运动学基础(一):空间坐标系与齐次变换、欧拉角与四元数、刚体姿态描述方法

各位同学,欢迎来到Delta机器人运动学的基础部分。

说实话,很多新手一上来就急着写轨迹代码,结果机器人跑起来乱晃,甚至撞到工作台。为什么?因为坐标系都没搞明白。今天这堂课,我们就来啃下这块硬骨头——空间描述与姿态表达。

1. 空间坐标系:机器人眼中的世界

Delta机器人有三个并联臂,每个臂末端都连接在同一个动平台上。要控制这个平台,我们得先定义清楚:它在哪里?它朝哪边?

我个人习惯把坐标系分成三种:

  • 世界坐标系:固定在机器人底座上,所有运动都基于它。
  • 工具坐标系:固定在末端执行器(比如吸嘴或夹爪)上。
  • 用户坐标系:你自定义的工作台坐标系,方便编程。

举个例子。我在做分拣项目时,传送带上的工件位置是变化的。如果只用世界坐标系,每次都要重新计算偏移量,非常麻烦。后来我改用用户坐标系,把传送带平面设为一个坐标系,问题就简单多了。

核心原则: 所有坐标变换,最终都要统一到世界坐标系下计算。

2. 齐次变换:把旋转和平移打包处理

你想想看,一个刚体在空间中有6个自由度——3个平移,3个旋转。如果分开处理,公式会变得非常冗长。齐次变换矩阵就是来解决这个问题的。

一个4×4的齐次变换矩阵长这样:

| R11  R12  R13  Tx |
| R21  R22  R23  Ty |
| R31  R32  R33  Tz |
|  0    0    0    1  |

左上角3×3是旋转矩阵,右上角3×1是平移向量。最后一行永远是[0 0 0 1],这是齐次坐标的约定。

为什么要加这一行?说白了,就是为了让矩阵乘法能同时处理旋转和平移。否则你得分两步算,代码写起来又臭又长。

我的小技巧: 在代码里,我习惯把齐次变换矩阵封装成一个类。这样调用时只需要做矩阵乘法,逻辑清晰,不容易出错。

3. 欧拉角:直观但容易踩坑

欧拉角用三个角度来描述姿态:绕X轴转(滚转Roll)、绕Y轴转(俯仰Pitch)、绕Z轴转(偏航Yaw)。听起来很直观对吧?

但这里有个大坑——万向锁。当俯仰角接近±90°时,滚转和偏航会变得无法区分,导致姿态失控。

我曾经踩过的坑: 有一次调试Delta机器人抓取动作,明明角度计算没问题,但机器人突然卡住不动。查了半天,发现是欧拉角遇到了万向锁。从那以后,我在做轨迹规划时,只要涉及大角度旋转,一律改用四元数。

欧拉角的另一个问题是:旋转顺序不同,结果完全不同。常见的顺序有ZYX、ZYZ等。你必须在文档里明确标注顺序,否则别人根本看不懂你的代码。

旋转顺序 应用场景
ZYX 航空航天、机器人末端姿态
ZYZ 工业机器人关节角度计算
XYZ 视觉标定、相机姿态

4. 四元数:稳定可靠的姿态表达

四元数听起来高大上,其实就是一个四维向量:q = w + xi + yj + zk。其中w是实部,x、y、z是虚部。

为什么用四元数?三个原因:

  • 无万向锁:无论怎么旋转,都不会出现奇异点。
  • 插值平滑:做轨迹规划时,四元数的球面线性插值(SLERP)非常平滑。
  • 计算高效:比旋转矩阵少用几个乘法,在嵌入式系统上跑得快。

我记得第一次在STM32上跑四元数运算时,发现浮点运算太慢。后来改用定点数近似,才把控制周期压到1ms以内。嗯,这里要注意,四元数归一化很重要,否则累积误差会让姿态漂移。

// 四元数归一化示例
void quaternion_normalize(float q[4]) {
    float norm = sqrt(q[0]*q[0] + q[1]*q[1] + q[2]*q[2] + q[3]*q[3]);
    if (norm > 0.0001f) {
        q[0] /= norm;
        q[1] /= norm;
        q[2] /= norm;
        q[3] /= norm;
    }
}

5. 刚体姿态描述方法对比

三种方法各有优劣,我整理了一张表,方便你选型:

方法 优点 缺点 推荐场景
旋转矩阵 直观、容易理解 9个参数,冗余大 教学演示、简单计算
欧拉角 参数少、物理意义明确 万向锁、顺序依赖 人机交互、小角度运动
四元数 无奇异、插值平滑 不够直观、调试困难 轨迹规划、实时控制
我的建议: 在Delta机器人项目中,我通常用四元数做内部计算,用欧拉角做界面显示。这样既保证了控制精度,又方便调试人员理解。

6. 知识体系结构图

下面这张图展示了本章的核心逻辑:从空间坐标系出发,通过齐次变换连接平移和旋转,再对比三种姿态描述方法的适用场景。

运动学基础知识体系 空间坐标系 世界坐标系 工具坐标系 用户坐标系 齐次变换矩阵 旋转矩阵 欧拉角 四元数 三者可相互转换,根据场景选择最合适的表达方式

好了,这一章的内容就到这里。空间坐标系是基础,齐次变换是工具,欧拉角和四元数是两种不同的姿态表达方式。你不需要死记硬背公式,但一定要理解它们背后的物理意义和适用场景。

课后练习: 试着用你熟悉的编程语言,写一个函数实现四元数到欧拉角的转换。注意处理万向锁的边界情况。
专注资料整理