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° 时,云台突然“卡住”了,怎么转都转不动。查了半天,就是万向锁问题。从那以后,只要涉及连续旋转,我优先用四元数。
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 ... 非常方便。
2.4 知识体系结构图
下面我用一张图来总结本章的知识结构。这张图是我自己画的,希望能帮你理清思路。
从这张图你可以看到,整个知识体系是层层递进的。先理解刚体运动,再学习位姿的三种表示方法,最后用齐次变换矩阵把它们统一起来。我个人觉得,这个框架比死记公式有用得多。
2.5 实战小贴士
最后,分享几个我在项目中踩过的坑,希望能帮你少走弯路。
- 坐标系要统一:我曾经在一个协作机器人项目里,用了三个不同厂家的传感器,结果每个传感器的坐标系定义都不一样。调试了整整两天,才发现是坐标系没对齐。所以,开工前先定好全局坐标系。
- 注意旋转顺序:欧拉角的旋转顺序很重要。ZYX 和 ZYZ 的结果完全不同。写代码时一定要注释清楚旋转顺序。
- 四元数归一化:四元数在使用前一定要归一化,否则变换矩阵会出问题。我见过有人因为忘了归一化,导致机器人轨迹跑偏的。
好了,这一章的内容就到这里。记住,运动学基础是机器人控制的“地基”,地基不牢,后面盖什么楼都会晃。希望你能把旋转矩阵、欧拉角、四元数、齐次变换矩阵这几个概念吃透。下次我们聊正运动学和逆运动学,到时候你会发现,今天学的这些全都会用上。