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):

  1. 先绕 Z 轴转 γ(偏航角)
  2. 再绕 Y 轴转 β(俯仰角)
  3. 最后绕 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),得到平滑的旋转过渡。
  • 计算高效:组合旋转只需要四元数乘法,比矩阵乘法快。

我个人习惯在代码里用四元数做姿态控制,只在需要给人看的时候,才转成欧拉角。比如,在调试界面上显示当前的偏航、俯仰、滚转值。

下面这张图,帮你理清本章的知识脉络:

刚体运动学知识体系 刚体运动学知识体系 刚体运动学 刚体概念 自由度 (6 DOF) 运动描述 理想化模型 内部距离不变 平移 (3) 旋转 (3) 位置 (p) 姿态 (R) 旋转矩阵 欧拉角 四元数 齐次变换矩阵 💡 核心: 位置 + 姿态 = 完整位姿

好了,这一章我们聊了刚体的概念、自由度、运动描述,以及欧拉角和四元数的基本概念。这些都是后续学习正逆运动学、动力学的基础。尤其是四元数,它在现代机器人控制里几乎是标配。我建议你课后可以写几行代码,试试把欧拉角转成四元数,再转回来,感受一下它们之间的差异。