二、空间描述与变换:位置与姿态的描述、旋转矩阵、齐次变换矩阵、平移与旋转的复合变换
各位同学,欢迎来到第二章。上一章我们聊了机器人学的基本概念,这一章我们要啃一块硬骨头——空间描述与变换。
说白了,就是回答一个问题:机械臂的每个关节、每个连杆,到底在哪儿?朝哪个方向?
我个人习惯把这一章叫做“机器人学的语言基础”。你想想看,如果连描述位置和姿态的语言都没掌握,后面谈运动学求解、轨迹规划,那都是空中楼阁。我在做第一个六轴机械臂项目时,就因为姿态描述搞混了,导致仿真里看着好好的,一上真机就撞了限位……嗯,从那以后我再也不敢轻视这部分内容了。
核心要点:空间描述是机器人学的基石。位置用坐标,姿态用旋转矩阵,合起来就是齐次变换矩阵。这三者构成了我们描述机械臂运动的完整语言。
2.1 位置与姿态的描述
先问个问题:你怎么告诉别人你手里拿着的螺丝刀在哪儿?
你可能会说:“在我手里,距离胸口30厘米,朝右偏15度。” 这其实就是位置和姿态的描述。
位置描述相对简单。我们用一个3×1的列向量来表示:
P = [x, y, z]^T
这里的x、y、z就是相对于某个参考坐标系的位置坐标。我在项目中习惯用毫米作为单位,因为大多数工业机械臂的精度都在毫米级。
姿态描述就有点意思了。它描述的是物体“朝哪个方向”。比如螺丝刀的尖端是朝上还是朝下?是水平还是倾斜?
我们用一个3×3的旋转矩阵来表示:
R = [r11 r12 r13;
r21 r22 r23;
r31 r32 r33]
这个矩阵的每一列,其实代表的是物体坐标系各轴在参考坐标系中的方向向量。听起来有点绕?我换个说法:
- 第一列:物体x轴在参考系中的方向
- 第二列:物体y轴在参考系中的方向
- 第三列:物体z轴在参考系中的方向
我的小技巧:刚开始学的时候,可以把旋转矩阵想象成一个“方向说明书”。它告诉你:物体的每个轴,在参考系里是怎么“摆放”的。
2.2 旋转矩阵
旋转矩阵是姿态描述的核心工具。它有几个重要性质,我建议你记牢:
| 性质 | 说明 | 实际意义 |
|---|---|---|
| 正交性 | R^T = R^{-1} | 转置等于逆,计算方便 |
| 行列式为1 | det(R) = 1 | 保证是纯旋转,没有缩放 |
| 单位向量 | 每列模长为1 | 方向向量是单位向量 |
绕三个坐标轴的基本旋转矩阵,是必须背下来的:
// 绕x轴旋转θ角
Rx(θ) = [1 0 0;
0 cosθ -sinθ;
0 sinθ cosθ]
// 绕y轴旋转θ角
Ry(θ) = [cosθ 0 sinθ;
0 1 0;
-sinθ 0 cosθ]
// 绕z轴旋转θ角
Rz(θ) = [cosθ -sinθ 0;
sinθ cosθ 0;
0 0 1]
我曾经犯过一个低级错误:把绕y轴的旋转矩阵符号搞反了。结果仿真里机械臂的末端姿态怎么都对不上。排查了整整一个下午,才发现是sinθ的符号问题。所以,绕y轴的旋转矩阵和其他两个轴不一样,sinθ的位置和符号要特别注意。
2.3 齐次变换矩阵
位置用向量,姿态用矩阵,能不能合在一起?当然可以。这就是齐次变换矩阵:
T = [R P;
0 1]
其中R是3×3旋转矩阵,P是3×1位置向量。最后一行是[0 0 0 1]。
为什么叫“齐次”?说白了,就是把旋转和平移统一到一个4×4的矩阵里。这样,连续变换就可以用矩阵乘法来完成了。
重要理解:齐次变换矩阵T描述了从一个坐标系到另一个坐标系的完整变换。它既告诉你“怎么转”,也告诉你“怎么移”。
2.4 平移与旋转的复合变换
实际应用中,很少只有纯旋转或纯平移。大多数情况是:先旋转,再平移;或者先平移,再旋转。
复合变换的顺序很重要。我强调一下:矩阵乘法不满足交换律。先旋转后平移,和先平移后旋转,结果完全不同。
举个例子:
// 先旋转再平移
T = Trans(P) * Rot(θ)
// 先平移再旋转
T = Rot(θ) * Trans(P)
这两种顺序,得到的是不同的末端位姿。我在调试一个焊接机器人时,就遇到过这个问题。程序里写的是先平移后旋转,但实际工艺要求是先旋转后平移。结果焊枪的轨迹完全偏了,焊缝质量不合格。后来检查代码才发现是变换顺序搞反了。
避坑指南:我曾经因为变换顺序搞反,导致一台价值50万的机器人差点撞坏夹具。记住:左乘是相对于固定坐标系,右乘是相对于当前坐标系。这个规则一定要刻在脑子里。
下面这张图展示了整个空间描述与变换的知识体系:
总结一下这一章的核心:
- 位置用3×1向量,姿态用3×3旋转矩阵
- 齐次变换矩阵把两者统一成4×4矩阵
- 复合变换要注意顺序,左乘右乘要分清
这些概念看起来抽象,但一旦你开始写机械臂的运动学代码,就会发现它们无处不在。下一章我们会用这些工具来建立机械臂的连杆坐标系,那才是真正开始“玩”运动学了。