3. 刚体运动学:从刚体概念到四元数入门
大家好,欢迎来到第三章。
前两章我们把坐标系、向量、旋转矩阵这些数学工具过了一遍。从这章开始,我们要真正面对机器人运动学里最核心的模型——刚体。
你想想看,人形机器人的手臂、大腿、躯干,在运动学里我们怎么描述它们?总不能把每个原子都算一遍吧。所以,我们得做个合理的简化。
3.1 刚体概念:一个理想化的模型
刚体,说白了就是受力后形状和大小都不变的物体。内部任意两点之间的距离始终保持不变。
现实世界里当然没有的刚体。我早期做机械臂标定时,就发现铝合金臂杆在重载下会有微米级的弯曲。但在运动学层面,我们关心的是位置和姿态,不是变形。所以,把连杆当作刚体来处理,精度完全够用。
核心要点:刚体假设是运动学分析的基石。它让我们可以忽略材料变形,只关注物体的位置和朝向。
3.2 刚体自由度:一个刚体有几个“能动”的方向?
自由度,英文叫 Degrees of Freedom,简称 DOF。它描述的是一个系统独立运动的数目。
一个自由刚体在三维空间里,能怎么动?
- 平移(3个自由度):沿 X、Y、Z 轴移动。
- 旋转(3个自由度):绕 X、Y、Z 轴转动。
所以,一个自由刚体在三维空间里,总共有 6 个自由度。
我刚开始学的时候,总记不住为什么是6。后来我换了个思路:你想想看,要确定一个刚体在空间中的状态,你需要知道它上面某点的位置(3个坐标),以及它相对于坐标系的朝向(3个角度)。这不就是6个参数吗?
| 运动类型 | 自由度数量 | 描述 |
|---|---|---|
| 平移 | 3 | 沿 X、Y、Z 轴的移动 |
| 旋转 | 3 | 绕 X、Y、Z 轴的转动 |
| 总计 | 6 | 自由刚体的完整自由度 |
避坑指南:人形机器人的每个关节通常只提供1个自由度(旋转或平移)。所以,一条有7个关节的机械臂,理论上可以有7个自由度,比刚体需要的6个还多1个。这就是“冗余自由度”的来源。我曾经在调试一个7轴协作机器人时,就因为没处理好这个冗余,导致规划出的轨迹出现了不必要的自运动。
3.3 刚体运动描述:位置 + 姿态
描述一个刚体的运动,其实就是描述它的位置和姿态。
- 位置:用刚体上某个参考点(通常是质心或关节中心)的坐标表示。比如
p = [x, y, z]^T。 - 姿态:描述刚体相对于参考坐标系的朝向。这就是我们前面讲的旋转矩阵、欧拉角、四元数要干的事。
把位置和姿态合在一起,就构成了一个刚体的完整位姿。在机器人学里,我们通常用一个 4×4 的齐次变换矩阵 来表示它。
// 齐次变换矩阵 T 的形式
// [R p]
// [0 1]
// 其中 R 是 3x3 旋转矩阵,p 是 3x1 位置向量
T = | r11 r12 r13 x |
| r21 r22 r23 y |
| r31 r32 r33 z |
| 0 0 0 1 |
这个矩阵的好处是,你可以通过矩阵乘法,把多个刚体的位姿变换串联起来。比如,从基座到手腕的变换,就是一连串的 T 矩阵相乘。嗯,这里要注意,矩阵乘法的顺序不能搞反,它对应着运动链的传递顺序。
3.4 欧拉角与四元数入门
旋转矩阵有9个元素,但自由度只有3个。所以它是有冗余的。在实际工程中,我们更喜欢用更紧凑的方式来表示旋转。这就引出了欧拉角和四元数。
3.4.1 欧拉角:直观但容易“万向锁”
欧拉角的核心思想是:把一次旋转分解成绕三个坐标轴的依次旋转。
最常见的欧拉角是 Z-Y-X 顺序(也叫偏航-俯仰-滚转,Yaw-Pitch-Roll):
- 先绕 Z 轴转 γ(偏航角)
- 再绕 Y 轴转 β(俯仰角)
- 最后绕 X 轴转 α(滚转角)
欧拉角很直观,你一说“偏航30度,俯仰20度”,工程师马上就能想象出姿态。但欧拉角有个著名的坑——万向锁。
万向锁问题:当俯仰角 β = ±90° 时,第一次旋转和第三次旋转的轴会重合,导致丢失一个自由度。这时候,你无法唯一地表示某些姿态。
我曾经在调试一个云台时,就遇到了万向锁。当时云台在俯仰接近90度时,偏航和滚转的控制突然变得异常,画面开始乱转。排查了半天,才发现是欧拉角插值导致的。
3.4.2 四元数:无奇点,适合插值
四元数,听起来很玄乎,但它本质上是一个超复数,由1个实部和3个虚部组成:
q = w + xi + yj + zk
其中,w 是实部,x、y、z 是虚部,且满足 i² = j² = k² = ijk = -1。
在机器人学里,我们用单位四元数(模长为1)来表示旋转。它的好处是:
- 无奇点:不会出现万向锁。
- 插值平滑:可以在两个姿态之间做球面线性插值(SLERP),得到平滑的旋转过渡。
- 计算高效:组合旋转只需要四元数乘法,比矩阵乘法快。
我个人习惯在代码里用四元数做姿态控制,只在需要给人看的时候,才转成欧拉角。比如,在调试界面上显示当前的偏航、俯仰、滚转值。
下面这张图,帮你理清本章的知识脉络:
好了,这一章我们聊了刚体的概念、自由度、运动描述,以及欧拉角和四元数的基本概念。这些都是后续学习正逆运动学、动力学的基础。尤其是四元数,它在现代机器人控制里几乎是标配。我建议你课后可以写几行代码,试试把欧拉角转成四元数,再转回来,感受一下它们之间的差异。