2、机械臂运动学基础(上):坐标系与变换(齐次变换矩阵)、DH参数法建立模型
各位同学,欢迎来到运动学基础的上半部分。说实话,很多初学者一上来就被「运动学」三个字吓住了。其实没那么玄乎——你想想看,我们平时用手去拿杯子,大脑是怎么算的?眼睛看到杯子位置,大脑算出肩膀、肘部、手腕该转多少角度,然后肌肉执行。机械臂也是一样的道理,只不过我们用数学来描述这个过程。
我个人习惯把运动学分成两块:正运动学和逆运动学。今天我们先啃正运动学这块硬骨头——给你每个关节的角度,算出末端到底在哪儿。说白了,就是建立从「关节空间」到「笛卡尔空间」的映射关系。
2.1 坐标系与空间描述
先问个问题:你怎么描述一个点在空间中的位置?
很简单,三个坐标 (x, y, z) 就搞定了。但机械臂有六个关节,每个关节都有自己的坐标系。我们需要知道这些坐标系之间怎么互相转换。
我在项目中遇到过这样一个坑:现场调试时,机械臂末端明明应该对准工件,结果差了5毫米。查了半天,原来是工具坐标系没标定好。你看,坐标系这东西,差之毫厘谬以千里。
姿态的描述方式有很多种:旋转矩阵、欧拉角、四元数。今天我们先聚焦旋转矩阵,它是理解齐次变换矩阵的基础。
2.2 齐次变换矩阵
齐次变换矩阵,说白了就是一个4×4的矩阵,把旋转和平移打包在一起。为什么是4×4?因为3×3的旋转矩阵只能处理旋转,加上平移就变成非线性了。加一个维度,把问题线性化——这是数学上很漂亮的一个技巧。
它的形式长这样:
| R P |
| 0 1 |
其中 R 是 3×3 的旋转矩阵,P 是 3×1 的平移向量。最后一行是 [0 0 0 1]。
嗯,这里要注意:齐次变换矩阵的乘法顺序很重要。我记得刚入行时,有一次把 T1 * T2 写成了 T2 * T1,结果仿真出来的轨迹完全乱套。你想想看,先旋转再平移,和先平移再旋转,结果能一样吗?
2.3 DH参数法——建立模型的利器
好了,现在我们有工具了(齐次变换矩阵),但怎么把它用到机械臂上?总不能每个关节都手动推导吧?
1955年,Denavit 和 Hartenberg 两位老哥提出了一个标准方法——DH参数法。这个方法的核心思想是:用四个参数来描述相邻两个关节坐标系之间的变换关系。
这四个参数分别是:
| 参数 | 符号 | 含义 |
|---|---|---|
| 连杆长度 | ai-1 | 沿 xi-1 轴,从 zi-1 到 zi 的距离 |
| 连杆扭角 | αi-1 | 绕 xi-1 轴,从 zi-1 到 zi 的角度 |
| 连杆偏距 | di | 沿 zi 轴,从 xi-1 到 xi 的距离 |
| 关节角 | θi | 绕 zi 轴,从 xi-1 到 xi 的角度 |
有了这四个参数,相邻坐标系之间的变换矩阵就可以写成标准形式:
T = Rot_x(α) * Trans_x(a) * Rot_z(θ) * Trans_z(d)
展开后就是:
| cosθ -sinθ 0 a |
| sinθ*cosα cosθ*cosα -sinα -d*sinα |
| sinθ*sinα cosθ*sinα cosα d*cosα |
| 0 0 0 1 |
2.4 六轴机械臂的DH参数建模
以典型的六轴工业机器人为例,我们建立它的DH参数模型。先画出坐标系,然后填表。
我个人习惯先画一个简图,标出每个关节的 z 轴方向。z 轴沿着关节旋转轴,x 轴沿着公垂线方向。这个步骤看似简单,但很多人在这里栽跟头。
下面我用 SVG 画一个六轴机械臂的坐标系示意图,帮你理清思路:
有了坐标系,接下来就是填 DH 参数表。以常见的六轴机器人(比如 KUKA、ABB 的典型结构)为例:
| 关节 i | ai-1 | αi-1 | di | θi |
|---|---|---|---|---|
| 1 | 0 | 0 | d1 | θ1 |
| 2 | a1 | -90° | 0 | θ2 |
| 3 | a2 | 0 | 0 | θ3 |
| 4 | a3 | -90° | d4 | θ4 |
| 5 | 0 | 90° | 0 | θ5 |
| 6 | 0 | -90° | d6 | θ6 |
有了这张表,我们就可以写出每个关节的变换矩阵 T1 到 T6,然后相乘得到末端位姿:
T_06 = T1 * T2 * T3 * T4 * T5 * T6
这个 T_06 就是机械臂末端在基坐标系下的位姿。你给六个关节角度,它就能告诉你末端在哪儿、朝哪个方向。
2.5 正运动学计算示例
光说不练假把式。我们拿一个具体的例子来算算。
假设某六轴机器人的 DH 参数为:d1=0.3m, a1=0.1m, a2=0.4m, a3=0.05m, d4=0.35m, d6=0.1m。所有关节角度都设为 0°。
你猜末端在哪儿?
当所有关节角为 0 时,机械臂处于「直立」状态。代入公式计算:
T_06 =
| 1 0 0 a1 + a2 + a3 |
| 0 0 1 d1 + d4 + d6 |
| 0 -1 0 0 |
| 0 0 0 1 |
代入数值:x = 0.1 + 0.4 + 0.05 = 0.55m,y = 0.3 + 0.35 + 0.1 = 0.75m,z = 0。
这个结果对不对?你可以想象一下:所有关节角为 0,机械臂应该是一个「L」形或者「Z」形,末端在 x 正方向和 y 正方向。嗯,跟计算结果吻合。
2.6 小结
今天的内容,说白了就是两件事:
- 齐次变换矩阵——描述坐标系之间关系的数学工具
- DH参数法——建立机械臂模型的标准化方法
掌握了这两样,正运动学就基本拿下了。你想想看,有了 DH 参数表,写个循环就能算出末端位姿,多简单。
我个人觉得,学习运动学最好的方式就是动手算一遍。拿笔在纸上画坐标系,填 DH 参数,然后写几行代码验证。别怕麻烦,这一步走扎实了,后面的逆运动学、轨迹规划、碰撞检测都会轻松很多。
好,今天就到这儿。记住:坐标系是基础,DH 参数是工具,多练几次就熟了。