2. 机器人运动学基础:刚体运动描述、位姿表示、齐次变换矩阵

各位同学,大家好。今天我们进入机器人运动学的核心地带。说实话,这部分内容我当年学的时候也觉得有点抽象,但后来在实际项目中才发现,它就像机器人的“身份证”和“地图”——没有它,你根本没法指挥机器人干活。

我个人习惯把运动学基础拆成三个层次来理解:描述刚体表示位姿变换矩阵。咱们一个一个来啃。

2.1 刚体运动的描述

什么叫刚体?说白了,就是一个不会变形的物体。你推它、拉它、转它,它内部各点的相对位置不变。机器人手臂的连杆、末端执行器,都可以近似看作刚体。

描述一个刚体在空间中的运动,我们需要知道两件事:位置姿态。位置好理解,就是它在哪儿;姿态呢,就是它朝哪个方向。

举个例子。我在项目里调试一个六轴机械臂,末端夹爪要抓一个螺丝。光知道螺丝的坐标(x, y, z)是不够的,你还得知道夹爪的开口方向对不对,否则夹子怼上去就歪了。这就是姿态的重要性。

核心概念:刚体在空间中的运动 = 位置(平移) + 姿态(旋转)。两者合起来,我们称之为“位姿”。

2.2 位姿表示方法

位姿怎么表示?常用的方法有三种:旋转矩阵欧拉角四元数。我一个个说。

2.2.1 旋转矩阵

旋转矩阵是一个 3x3 的正交矩阵。它描述了从一个坐标系到另一个坐标系的旋转变换。比如,一个点在世界坐标系下的坐标是 p_w,在机器人基坐标系下的坐标是 p_b,那么 p_b = R * p_w,其中 R 就是旋转矩阵。

旋转矩阵的优点是直观、无奇异性。但缺点也很明显:9个元素,冗余,而且不直观。你看着一个旋转矩阵,很难一眼看出它转了多大角度。

我的经验:在写代码做坐标变换时,我习惯用旋转矩阵做中间计算,因为它数学性质好,不容易出错。但调试时,我会把它转成欧拉角来看,更直观。

2.2.2 欧拉角

欧拉角用三个角度(比如绕 X、Y、Z 轴的旋转角)来描述姿态。常见的顺序有 ZYX、ZYZ 等。欧拉角很直观,但有个大坑——万向锁

我曾经在一个移动机器人项目里,用欧拉角控制云台。结果在俯仰角接近 90° 时,云台突然“卡住”了,怎么转都转不动。查了半天,就是万向锁问题。从那以后,只要涉及连续旋转,我优先用四元数。

避坑指南:欧拉角在俯仰角为 ±90° 时,会丢失一个自由度。如果你在做飞行器、云台、机械臂的连续姿态控制,请谨慎使用欧拉角。

2.2.3 四元数

四元数是一个超复数,形式为 q = w + xi + yj + zk。它用四个数表示旋转,没有奇异性,插值平滑。现代机器人系统(如 ROS、Eigen 库)几乎都用四元数。

嗯,这里要注意:四元数虽然好用,但理解起来有点反直觉。我建议你把它当作一个“黑盒”——知道怎么用就行,不必深究它的几何意义。当然,如果你有兴趣,可以看看它的推导,但初学阶段,会用更重要。

表示方法 优点 缺点 适用场景
旋转矩阵 无奇异性,数学性质好 冗余,不直观 中间计算、理论推导
欧拉角 直观,易理解 万向锁,插值困难 人机交互、简单控制
四元数 无奇异性,插值平滑 不直观,理解门槛高 连续旋转、姿态控制

2.3 齐次变换矩阵

好了,位置和姿态都有了,怎么把它们合在一起?答案就是齐次变换矩阵

齐次变换矩阵是一个 4x4 的矩阵,形式如下:

| R   t |
| 0   1 |

其中 R 是 3x3 的旋转矩阵,t 是 3x1 的平移向量。最后一行是 [0 0 0 1]。

为什么用 4x4?说白了,是为了把旋转和平移统一成一个矩阵乘法。这样,一个点的坐标变换就可以写成:

p' = T * p

其中 p 和 p' 都是齐次坐标(4维向量,最后一维为1)。

你想想看,如果没有齐次变换矩阵,你要先旋转再平移,得写两步。有了它,一步到位。而且多个变换可以连乘:T_total = T1 * T2 * T3 ... 非常方便。

核心公式:齐次变换矩阵 T = [R t; 0 1]。它同时描述了刚体的位置和姿态,是机器人运动学中最基本的工具。

2.4 知识体系结构图

下面我用一张图来总结本章的知识结构。这张图是我自己画的,希望能帮你理清思路。

机器人运动学基础 刚体运动描述 位姿表示 旋转矩阵 欧拉角 四元数 齐次变换矩阵

从这张图你可以看到,整个知识体系是层层递进的。先理解刚体运动,再学习位姿的三种表示方法,最后用齐次变换矩阵把它们统一起来。我个人觉得,这个框架比死记公式有用得多。

2.5 实战小贴士

最后,分享几个我在项目中踩过的坑,希望能帮你少走弯路。

  • 坐标系要统一:我曾经在一个协作机器人项目里,用了三个不同厂家的传感器,结果每个传感器的坐标系定义都不一样。调试了整整两天,才发现是坐标系没对齐。所以,开工前先定好全局坐标系。
  • 注意旋转顺序:欧拉角的旋转顺序很重要。ZYX 和 ZYZ 的结果完全不同。写代码时一定要注释清楚旋转顺序。
  • 四元数归一化:四元数在使用前一定要归一化,否则变换矩阵会出问题。我见过有人因为忘了归一化,导致机器人轨迹跑偏的。
推荐工具:如果你刚开始学,可以用 MATLAB 的 Robotics Toolbox 或者 Python 的 PyBullet 来可视化位姿变换。看到图形动起来,理解会快很多。

好了,这一章的内容就到这里。记住,运动学基础是机器人控制的“地基”,地基不牢,后面盖什么楼都会晃。希望你能把旋转矩阵、欧拉角、四元数、齐次变换矩阵这几个概念吃透。下次我们聊正运动学和逆运动学,到时候你会发现,今天学的这些全都会用上。


专注资料整理