3、运动学基础(下):齐次变换矩阵、正运动学建模(DH参数法)、逆运动学求解入门

好,咱们接着聊。上一节我们把旋转矩阵、平移向量这些基础概念捋了一遍。这一节,我们要把它们串起来,真正开始搭建机器人的“骨架”——也就是运动学模型。

说实话,我刚入行那会儿,觉得运动学就是一堆矩阵乘法,枯燥得很。直到有一次,我调试一台六轴协作机器人,发现末端执行器总是偏那么几毫米。查来查去,最后发现是相邻两个关节的坐标系定义错了。从那以后,我才真正体会到,运动学这东西,差之毫厘,谬以千里。

一、齐次变换矩阵:把旋转和平移装进一个“盒子”

你想想看,一个关节相对于上一个关节,既有旋转,又有平移。如果我们分开算,先旋转再平移,或者先平移再旋转,公式会变得非常啰嗦。有没有一种方法,能把旋转和平移打包在一起?

有的。就是齐次变换矩阵。

说白了,它就是一个 4x4 的矩阵。左上角 3x3 是旋转矩阵,右上角 3x1 是平移向量,左下角是 0 0 0,右下角是 1。

| R(3x3)  |  T(3x1) |
| 0 0 0   |    1    |

这个矩阵的好处是什么?

  • 统一表达:一个矩阵,同时表达了旋转和平移。
  • 连续变换:从基座到末端,只需要把每个关节的变换矩阵乘起来。矩阵乘法,简单粗暴。
  • 求逆方便:想知道末端在基座下的位姿?乘。想知道基座在末端下的位姿?求逆矩阵就行。
我的小技巧: 我在写代码时,习惯把齐次变换矩阵定义成一个类。里面封装好乘法、求逆、提取旋转矩阵、提取平移向量这些方法。这样后面写正运动学、逆运动学,代码会干净很多。

二、正运动学建模:DH参数法——机器人界的“身份证”

有了齐次变换矩阵这个工具,我们怎么给一个真实的机器人建模呢?

最经典的方法,就是 DH 参数法。Denavit 和 Hartenberg 这两位前辈,在 1955 年提出了一套标准。这套标准,说白了就是给每个关节定义一个坐标系,然后用四个参数来描述相邻坐标系之间的关系。

这四个参数分别是:

  • ai-1:连杆长度。沿着 Xi-1 轴,从 Zi-1 到 Zi 的距离。
  • αi-1:连杆扭角。绕着 Xi-1 轴,从 Zi-1 转到 Zi 的角度。
  • di:连杆偏距。沿着 Zi 轴,从 Xi-1 到 Xi 的距离。
  • θi:关节角。绕着 Zi 轴,从 Xi-1 转到 Xi 的角度。

嗯,光看文字可能有点晕。我画个图帮你理解一下。

DH参数法:相邻连杆坐标系变换示意 Zi-1 Xi-1 Yi-1 Oi-1 Zi Xi Yi Oi ai-1 di θi αi-1 从坐标系 {i-1} 到 {i} 的变换:先绕 Xi-1 转 αi-1,再沿 Xi-1 移 ai-1,再绕 Zi 转 θi,最后沿 Zi 移 di

有了这四个参数,相邻两个坐标系之间的变换矩阵就可以直接写出来了。公式是这样的:

i-1T_i = RotX(αi-1) * TransX(ai-1) * RotZ(θi) * TransZ(di)

展开后,就是一个 4x4 的齐次变换矩阵。你只要把每个关节的 DH 参数填进去,然后从基座开始,一直乘到末端,就能得到末端在基座坐标系下的位姿。这就是正运动学。

核心思想: 正运动学,就是已知关节角度,求末端位姿。公式是死的,但参数是活的。DH 参数表,就是机器人的“身份证”。

三、逆运动学求解入门:从“终点”反推“路径”

正运动学是“已知关节角,求末端位姿”。那逆运动学正好反过来:已知末端位姿,求关节角。

为什么需要逆运动学?

  • 你想让机器人把手伸到某个点,你不可能手动调每个关节的角度。你只需要告诉它“把手伸到那里”,它自己算出关节角。
  • 轨迹规划、避障、力控……几乎所有高级功能,都离不开逆运动学。

但逆运动学比正运动学难得多。为什么?

  • 多解性:同一个末端位姿,可能对应多组关节角。比如“肘部朝上”和“肘部朝下”。
  • 无解:目标点太远,机器人够不着。
  • 奇异点:在某些位姿下,关节速度会变得无穷大,导致控制失效。

求解方法主要有两类:

  1. 解析法(封闭解):通过代数或几何方法,直接推导出关节角的表达式。速度快,精度高。但只适用于特定构型的机器人(比如后三个关节轴线交于一点的六轴机器人)。
  2. 数值法(迭代法):比如牛顿-拉夫森法、雅可比伪逆法。通用性强,任何机器人都能用。但速度慢,可能陷入局部最优。
我曾经踩过的坑: 有一次,我用数值法做逆运动学求解,迭代了 100 次还没收敛。后来发现,是我初始值给得太离谱了。记住,数值法对初始值很敏感。如果你知道机器人大概在什么位姿,就给一个接近的初始值。如果不知道,就多试几个随机初始值。

对于初学者,我建议先从解析法入手。拿一个简单的 2 自由度平面机械臂练手。用几何法,画个三角形,用余弦定理就能算出关节角。等你把解析法的思路理清了,再去看数值法,会容易很多。

四、小结

这一节,我们聊了三个东西:

  • 齐次变换矩阵:把旋转和平移打包,方便连续变换。
  • DH 参数法:给机器人建模的标准方法。四个参数,搞定一切。
  • 逆运动学入门:从末端位姿反推关节角。多解、无解、奇异点,都是你要面对的挑战。

嗯,运动学是机器人控制的基石。你把这些搞懂了,后面学动力学、轨迹规划、控制算法,都会轻松很多。别急,慢慢来。

我的建议: 找一款开源机器人(比如 UR5、KUKA LBR iiwa),下载它的 DH 参数表。然后自己动手,用 Python 或 MATLAB 写一个正运动学函数。再试着写一个简单的逆运动学求解器(先用解析法)。代码跑通了,你才算真正掌握了。

可可精品资料库