2. 运动学基础(上):刚体在空间中的位姿描述、齐次变换矩阵、平移与旋转的数学表达
各位同学,欢迎来到运动学基础部分。
说实话,搞机器人这么多年,我最大的体会就是:运动学是机器人的灵魂。你想想看,一个机械臂要抓杯子,它得先知道杯子在哪,自己的手在哪,然后才能算怎么过去。这一章,我们就来解决第一个问题——怎么描述一个刚体在空间中的位置和姿态。
核心思想: 刚体在空间中有6个自由度——3个平移 + 3个旋转。我们用一个4×4的齐次变换矩阵,就能把这6个自由度全部打包带走。
2.1 位姿描述:位置 + 姿态
什么叫「位姿」?说白了就是两个东西:位置和姿态。
- 位置:刚体上某个参考点(比如法兰盘中心)在空间中的坐标 (x, y, z)。
- 姿态:刚体相对于参考坐标系的朝向,也就是它「脸朝哪边、头顶哪边」。
我记得刚入行时,有个老工程师跟我说:「小张,你光知道手在哪没用,你还得知道手是正着抓还是歪着抓。」这句话我一直记到现在。
在数学上,我们用一个3×1的位置矢量 p 描述位置,用一个3×3的旋转矩阵 R 描述姿态。合在一起,就是一个4×4的齐次变换矩阵 T:
T = [ R p ]
[ 0 1 ]
这个矩阵,就是我们在机器人学里描述刚体位姿的「万能工具」。
2.2 旋转矩阵:姿态的数学表达
旋转矩阵 R 是一个3×3的正交矩阵,它的每一列代表刚体坐标系的一个轴在参考坐标系中的投影。
举个例子:假设有个坐标系 {B} 相对于参考坐标系 {A} 绕 Z 轴转了 θ 角度,那么旋转矩阵就是:
R_z(θ) = [ cosθ -sinθ 0 ]
[ sinθ cosθ 0 ]
[ 0 0 1 ]
同理,绕 X 轴和 Y 轴的旋转矩阵分别是:
R_x(θ) = [ 1 0 0 ]
[ 0 cosθ -sinθ ]
[ 0 sinθ cosθ ]
R_y(θ) = [ cosθ 0 sinθ ]
[ 0 1 0 ]
[-sinθ 0 cosθ ]
我的小技巧: 记不住这些矩阵?没关系。你只要记住「绕哪个轴转,哪个轴对应的行和列就不变」,剩下的就是二维旋转矩阵的翻版。我在项目里经常用这个口诀快速推导。
2.3 齐次变换矩阵:平移 + 旋转一把搞定
为什么要用4×4的齐次变换矩阵?因为它能把平移和旋转统一成一次矩阵乘法。
你想想看,如果只用3×3的旋转矩阵,你只能描述旋转,平移还得单独加一个矢量。但有了齐次变换矩阵,我们可以把坐标变换写成:
B_p = T_A^B * A_p
其中 T_A^B 表示从坐标系 {A} 到 {B} 的变换矩阵,A_p 是点在 {A} 中的坐标,B_p 是同一个点在 {B} 中的坐标。
这个公式,我几乎每天都在用。不管是正运动学还是逆运动学,都离不开它。
2.4 平移与旋转的复合变换
实际应用中,我们很少只做一次平移或一次旋转。更多时候是先平移再旋转,或者先旋转再平移。这两种顺序得到的结果是不一样的。
我记得有一次调试一个焊接机器人,焊枪总是偏一点。查了半天,发现是变换顺序搞反了——先旋转后平移,写成了先平移后旋转。嗯,这个坑我替你们踩过了。
复合变换的数学表达很简单:
T = T1 * T2 * T3 * ...
注意:矩阵乘法不满足交换律,所以顺序很重要。从左到右依次作用。
避坑指南: 我曾经在项目中遇到过一个问题——两个坐标系之间的变换矩阵算出来总是差一个符号。后来发现,是我把「从A到B」和「从B到A」搞混了。记住:T_A^B 的逆矩阵就是 T_B^A,不要自己重新推导,直接用逆矩阵。
2.5 知识体系总览
下面这张图,是我自己总结的运动学基础核心逻辑。你把它看懂了,这一章就算过关了。
2.6 实战小例子
光说不练假把式。我们来看一个实际例子。
假设机器人末端执行器相对于基座标系 {0} 的变换矩阵是:
T_0^6 = [ 0.707 -0.707 0 100 ]
[ 0.707 0.707 0 200 ]
[ 0 0 1 300 ]
[ 0 0 0 1 ]
这个矩阵告诉我们什么?
- 末端的位置是 (100, 200, 300) mm
- 末端的姿态是绕 Z 轴转了 45°(因为 cos45° = sin45° ≈ 0.707)
现在,如果末端上有一个点,在末端坐标系中的坐标是 (10, 20, 30),那么它在基座标系中的坐标就是:
p_0 = T_0^6 * p_6
= [ 0.707 -0.707 0 100 ] [10]
[ 0.707 0.707 0 200 ] * [20]
[ 0 0 1 300 ] [30]
[ 0 0 0 1 ] [1 ]
= [ 0.707*10 - 0.707*20 + 0*30 + 100 ]
[ 0.707*10 + 0.707*20 + 0*30 + 200 ]
[ 0*10 + 0*20 + 1*30 + 300 ]
[ 1 ]
= [ 100 - 7.07 ]
[ 200 + 21.21 ]
[ 330 ]
[ 1 ]
= [ 92.93 ]
[ 221.21 ]
[ 330 ]
[ 1 ]
你看,一次矩阵乘法,就把平移和旋转都算进去了。这就是齐次变换矩阵的威力。
我的建议: 刚开始学的时候,一定要亲手算几个这样的例子。不要偷懒用计算器,手算能帮你建立直觉。我当年就是靠手算了几十个变换矩阵,才真正理解了运动学的本质。
2.7 本章小结
这一章我们讲了三个核心概念:
- 位姿 = 位置 + 姿态,用6个自由度描述刚体在空间中的状态
- 旋转矩阵是描述姿态的数学工具,绕X/Y/Z轴有标准形式
- 齐次变换矩阵把平移和旋转统一成4×4矩阵,方便进行坐标变换
这些内容看起来简单,但它们是整个机器人学的基石。下一章我们会继续深入,讲旋转的另一种表达方式——欧拉角和四元数。嗯,到时候再聊。