1. 机器人运动学基础:刚体在空间中的位姿描述、旋转矩阵与齐次变换矩阵

各位同学,咱们今天聊点实在的。机器人运动学,说白了就是回答两个问题:「我的机械臂末端在哪儿?」和「它朝哪个方向?」。你想想看,如果连这两个基本问题都答不上来,后面的轨迹规划、关节控制根本无从谈起。

我个人习惯把运动学比作「给机器人写地址」。你不仅要告诉它门牌号(位置),还得告诉它朝向哪边(姿态)。这两者合在一起,就是刚体的位姿。

核心概念:位姿 = 位置 + 姿态。位置用坐标表示,姿态用旋转矩阵表示。两者合体,就是齐次变换矩阵。

1.1 刚体在空间中的位姿描述

什么叫刚体?就是受力不变形的理想物体。咱们的机器人连杆、末端执行器,都可以近似看作刚体。

描述一个刚体在空间中的状态,需要6个自由度:3个平移 + 3个旋转。我在项目中遇到过不少新手,只关心末端位置,忽略了姿态,结果机器人撞了工件——嗯,那场面挺尴尬的。

举个例子:你让机器人去抓一个杯子。光知道杯子在坐标(0.5, 0.3, 0.2)是不够的。杯口朝上还是朝左?把手朝哪个方向?这些就是姿态信息。

所以,我们用一个位置矢量描述平移,用一个旋转矩阵描述姿态。两者组合,就是完整的位姿描述。

描述对象 数学工具 自由度 物理含义
位置 3×1 列向量 3 刚体上某点相对于参考系的空间坐标
姿态 3×3 旋转矩阵 3 刚体坐标系相对于参考系的指向
位姿 4×4 齐次变换矩阵 6 位置+姿态的紧凑表达

1.2 旋转矩阵:姿态的数学语言

旋转矩阵,我愿称之为「机器人学里最优雅的发明」。它用3×3的矩阵,把三维空间里的旋转表达得干干净净。

旋转矩阵 R 的每一列,代表刚体坐标系的基向量在参考坐标系下的投影。说白了,就是你把刚体坐标系的三根轴,分别投影到世界坐标系的三根轴上,得到9个数字,排成3×3的方阵。

旋转矩阵有两个重要性质:

  • 正交性:RTR = I,即矩阵的逆等于它的转置。这意味着旋转不会拉伸或扭曲物体。
  • 行列式为+1:保证是右手系,不会把物体镜像翻转。

我的小技巧:验证一个矩阵是不是合法的旋转矩阵,直接算 RTR 和 det(R)。如果结果不是单位阵和+1,那肯定有问题。我曾经在调试视觉引导抓取时,发现旋转矩阵不满足正交性,结果发现是标定数据录入时少了个负号——这种坑,踩过一次就记住了。

常见的旋转矩阵有三种基本形式:绕X轴、绕Y轴、绕Z轴旋转θ角度。

// 绕Z轴旋转θ角
R_z(θ) = [
  [cosθ, -sinθ, 0],
  [sinθ,  cosθ, 0],
  [0,      0,    1]
]

// 绕X轴旋转θ角
R_x(θ) = [
  [1,   0,      0    ],
  [0,  cosθ,  -sinθ ],
  [0,  sinθ,   cosθ ]
]

// 绕Y轴旋转θ角
R_y(θ) = [
  [ cosθ,  0,  sinθ ],
  [ 0,     1,   0    ],
  [-sinθ,  0,  cosθ ]
]

你可能会问:为什么绕Y轴的sinθ前面有个负号?嗯,这是右手定则决定的。你伸出右手,拇指指向Y轴正方向,四指弯曲的方向就是正旋转方向。绕Y轴旋转时,X和Z轴的变换方向跟绕Z轴时不一样,所以符号会有差异。

1.3 齐次变换矩阵:位置与姿态的统一

旋转矩阵只能描述姿态,不能描述位置。那怎么办?把位置和姿态塞进一个4×4的矩阵里——这就是齐次变换矩阵。

它的形式很简单:

T = [
  [R(3×3),  p(3×1)],
  [0 0 0,    1    ]
]

左上角3×3是旋转矩阵,右上角3×1是位置矢量,最后一行是[0 0 0 1]——这个固定结构保证了矩阵运算的封闭性。

为什么叫「齐次」?因为我们在三维坐标后面加了一个1,变成了齐次坐标。这样,旋转和平移就可以用一次矩阵乘法搞定。

避坑指南:我曾经在写运动学正解代码时,忘记把齐次坐标的最后一个分量归一化。结果算出来的位置坐标全都不对,排查了整整一个下午。记住:齐次坐标 [x, y, z, w] 转成笛卡尔坐标是 [x/w, y/w, z/w]。w通常为1,但经过多次变换后w可能不再是1。

齐次变换矩阵的逆矩阵也有简洁形式:

T^(-1) = [
  [R^T,  -R^T * p],
  [0 0 0,    1   ]
]

这个公式很实用。比如你已知末端相对于基座的变换矩阵,想求基座相对于末端的变换,直接求逆就行。

1.4 知识体系总览

下面这张图,把本章的核心逻辑串起来了。我建议你多看几遍,建立整体认知。

刚体位姿描述知识体系 刚体在空间中的位姿 位置描述 姿态描述 3×1 位置矢量 p 3×3 旋转矩阵 R 性质:正交性 RᵀR=I | det(R)=+1 基本旋转:Rₓ(θ) Rᵧ(θ) R₂(θ) 4×4 齐次变换矩阵 T T = [[R, p], [0 0 0, 1]] 逆变换:T⁻¹ = [[Rᵀ, -Rᵀp], [0 0 0, 1]] 核心要点 • 位姿 = 位置 + 姿态,共6自由度 • 旋转矩阵描述姿态,满足正交性 • 齐次变换矩阵统一描述位姿

1.5 实战中的注意事项

理论讲完了,聊点实际的。我在做机器人标定时,遇到过几个典型问题:

  1. 旋转矩阵的累积误差:多次旋转后,矩阵会因浮点运算偏离正交性。我建议每隔一段时间做一次正交化处理。
  2. 坐标系约定要统一:不同厂家、不同软件可能使用不同的坐标系约定(比如Z轴向上还是Y轴向上)。不统一的话,数据交换时很容易出问题。
  3. 齐次变换矩阵的维度:4×4矩阵虽然好用,但存储和传输时比3×4多了一行。在嵌入式系统里,如果内存紧张,可以考虑只存旋转矩阵和平移向量,需要时再组装。

个人习惯:我在写运动学库时,会把齐次变换矩阵封装成一个类,提供乘法和求逆方法。这样上层代码只需要调用 T1 * T2 就能完成变换链,清爽又不容易出错。

好了,这一章的内容就到这里。旋转矩阵和齐次变换矩阵是机器人学的基石,后面的运动学正解、逆解、雅可比矩阵,全都建立在这个基础之上。你把这些搞透了,后面的路就好走了。