运动学基础:刚体运动描述、齐次变换矩阵、正逆运动学求解

各位,咱们开始第二讲。运动学这东西,说白了就是研究“怎么动”的学问,不关心“为什么动”。你给机器人一个关节角度,它末端在哪儿?反过来,你想让末端去某个位置,关节该怎么转?这就是正逆运动学要干的事。

我个人习惯,讲运动学之前,先把刚体运动描述清楚。因为机器人身上每一个连杆,都可以看作一个刚体。你描述清楚了它怎么转、怎么移,后面的矩阵变换才有根基。

2.1 刚体运动的描述

刚体运动,就是物体在空间里又转又移。我当年刚入行时,总觉得这概念太抽象。后来做抓取项目,发现一个零件从传送带上拿起来,它相对于机械臂基座的位置和姿态,就是刚体运动描述。说白了,就是两个东西:位置和姿态。

  • 位置:用三维坐标 (x, y, z) 表示。这个简单,初中几何。
  • 姿态:用旋转矩阵、欧拉角或四元数表示。这个稍微绕一点。

旋转矩阵是 3x3 的,每一列代表刚体坐标系的一个轴在参考坐标系下的投影。它有个硬规矩:必须是正交矩阵,行列式为 +1。你想想看,如果行列式不是 1,那这个变换就带了缩放或镜像,刚体就变形了,这在物理上是不可能的。

核心概念:刚体在空间中的位姿 = 位置矢量 + 旋转矩阵。一共 6 个自由度(3 个平移 + 3 个旋转)。

2.2 齐次变换矩阵

旋转矩阵和位置矢量分开写,计算起来很麻烦。尤其是你要把多个变换串起来时,又得乘旋转矩阵,又得加平移向量,容易乱。所以就有了齐次变换矩阵——把旋转和平移塞到一个 4x4 的矩阵里。

它的形式长这样:

| R   p |
| 0   1 |

其中 R 是 3x3 旋转矩阵,p 是 3x1 平移向量,最后一行是 [0 0 0 1]。

为什么要加这一行?说白了,就是为了让复合变换能用矩阵乘法一口气算完。你想想看,如果不用齐次坐标,你要先旋转再平移,得写两个式子。用了齐次变换矩阵,一个乘法搞定。

我在项目中遇到过一个问题:两个变换矩阵相乘时,顺序搞反了。结果机械臂末端直接撞到工件上,还好速度慢,没出事。记住:左乘是相对于固定坐标系变换,右乘是相对于当前坐标系变换。这个坑,我踩过,你别踩。

我的习惯:写代码时,我会把齐次变换矩阵封装成一个类,重载乘法运算符。这样链式变换写起来特别直观,不容易出错。

2.3 正运动学求解

正运动学,就是已知关节角度,求末端位姿。这个相对简单,因为公式是确定的,没有多解问题。

对于串联机器人,常用的方法是 Denavit-Hartenberg 参数法,也就是 DH 参数法。每个连杆用四个参数描述:

参数 符号 含义
连杆长度 ai 沿 xi 轴,从 zi 到 zi+1 的距离
连杆扭角 αi 绕 xi 轴,从 zi 到 zi+1 的角度
连杆偏距 di 沿 zi 轴,从 xi-1 到 xi 的距离
关节角 θi 绕 zi 轴,从 xi-1 到 xi 的角度

有了这四个参数,每个连杆的齐次变换矩阵就能写出来。然后从基座到末端,把所有矩阵乘起来,就得到了末端位姿。

我曾经带过一个实习生,他写正运动学代码时,DH 参数表抄错了两个符号,结果仿真时机械臂末端飞到天上去。嗯,这里要注意:DH 参数有两种约定——标准 DH 和改进 DH。两种的坐标系定义不一样,参数也会不同。你用哪种,从头到尾保持一致。

避坑指南:我曾经因为 DH 参数中 a 和 d 的正负号搞反,导致抓取精度差了 5 毫米。后来排查了三天才发现。建议你建完模型后,先用几个特殊姿态验证一下,比如所有关节归零时,末端应该在什么位置。

2.4 逆运动学求解

逆运动学就麻烦多了。已知末端位姿,求关节角度。这是个非线性问题,可能有多个解,也可能无解。

求解方法主要有两类:

  • 解析法:通过几何或代数推导,得到封闭解。速度快,精度高,但不是所有机器人都有解析解。一般要求机器人满足 Pieper 准则——三个相邻关节轴交于一点。
  • 数值法:用迭代逼近,比如牛顿-拉夫森法。通用性强,但速度慢,可能陷入局部最优。

我个人偏好解析法。为什么?因为稳定。数值法在奇异点附近容易发散,而解析法不会。我在做码垛机器人项目时,用的就是解析法,六个关节角度直接算出来,毫秒级响应。

但解析法也有坑。比如,同一个末端位姿可能对应多组关节角。你想想看,一个六轴机器人,肘部可以朝上也可以朝下,腕部可以翻转也可以不翻转。这就产生了多解。怎么选?一般选最接近当前关节角的那一组,这样运动最平滑。

经验之谈:逆运动学求解时,我通常会先判断目标位姿是否在工作空间内。如果不在,直接返回无解,避免浪费算力。这个判断可以用简单的距离和角度范围来快速过滤。

2.5 知识体系总览

下面这张图,把本章的核心逻辑串起来了。你可以把它当作一个思维导图,方便复习。

运动学基础 · 知识体系 运动学基础 刚体运动描述 齐次变换矩阵 正/逆运动学 位置 (x,y,z) 姿态 (R, 欧拉角, 四元数) 4x4 矩阵 [R p; 0 1] 正运动学 (DH 参数) 逆运动学 (解析/数值) 标准 DH vs 改进 DH 多解选择 · 奇异点处理 核心要点 刚体位姿 = 位置 + 姿态 | 齐次矩阵统一旋转与平移 正运动学唯一解 | 逆运动学多解需择优

2.6 本章小结

运动学是机器人抓取的数学基础。你只有把刚体怎么动、矩阵怎么变、正逆解怎么求搞清楚了,后面才能谈轨迹规划、力控制这些高级话题。

我个人建议,学完这一章后,你找个开源机器人模型(比如 UR5 或 KUKA 的 DH 参数表),自己动手写一遍正逆运动学代码。写出来,跑通,再用仿真验证一下。这个过程走一遍,比你光看书强十倍。