运动学基础(上):空间描述与变换、齐次变换矩阵、DH参数法建模
各位同学,欢迎来到第二章。说实话,运动学是整个机械臂开发的基石。你想想看,如果连机器人的手在哪儿、朝哪个方向都说不清楚,那后面的轨迹规划、控制算法全是空中楼阁。这一章我会把空间描述、齐次变换矩阵和DH参数法这三个核心工具讲透,这些都是我这些年做项目时反复用到的东西。
2.1 空间描述:怎么描述一个物体在空间中的位置和姿态?
我们先从最基础的问题开始:怎么告诉别人一个物体在空间里到底在哪儿?
位置好办,三个坐标值(x, y, z)就能搞定。但姿态呢?光说“它朝那边”可不行。我们需要一个数学工具,既能描述位置,又能描述朝向。
核心概念:一个刚体在空间中的完整状态 = 位置(3个自由度)+ 姿态(3个自由度),总共6个自由度。
我个人习惯把姿态想象成“这个物体自己的坐标系相对于世界坐标系是怎么旋转的”。比如一个扳手,它的“鼻子”指向哪儿,“肚子”朝向哪儿,都需要用三个角度或者一个旋转矩阵来描述。
这里有个常见的坑:旋转矩阵是正交矩阵,它的逆等于它的转置。这个性质在后续计算中会反复用到,一定要记住。
2.2 齐次变换矩阵:把位置和姿态打包成一个矩阵
好,现在问题来了:位置用一个3×1向量,姿态用一个3×3矩阵,每次变换都要分开算,太麻烦了。能不能把它们合在一起?
能。这就是齐次变换矩阵的由来。
一个4×4的齐次变换矩阵长这样:
| R(3×3) p(3×1) |
| 0 0 0 1 |
其中R是旋转矩阵,p是位置向量。最后一行是固定的[0 0 0 1]。
为什么叫“齐次”?说白了,就是给三维向量加了一个维度,变成四维齐次坐标。这样旋转和平移就能用一次矩阵乘法搞定。
我的经验:刚开始学的时候,我总觉得最后一行是多余的。直到有一次做手眼标定,需要把相机坐标系下的点转换到机器人基坐标系,中间要经过五六个变换。如果用齐次矩阵,一次乘法就搞定;如果分开算,代码量翻倍还容易出错。从那以后,我再也没跳过齐次变换。
齐次变换矩阵有几个重要性质:
- 可逆性:逆矩阵表示反向变换
- 可组合性:多个变换可以连乘成一个
- 不满足交换律:变换顺序很重要,先旋转再平移和先平移再旋转结果不同
嗯,这里要注意:矩阵乘法不满足交换律。我在项目中遇到过有人把两个变换顺序搞反,结果机械臂直接撞到工件上。还好速度不快,不然就出事故了。
2.3 DH参数法:给机械臂建模的标准语言
现在我们知道怎么描述一个刚体了。但机械臂有多个关节,每个关节之间怎么描述?总不能每个关节都单独定义坐标系吧?
Denavit和Hartenberg两位前辈给出了标准答案:DH参数法。它用四个参数就能唯一确定相邻两个关节坐标系之间的变换关系。
四个参数分别是:
| 参数 | 符号 | 含义 |
|---|---|---|
| 连杆长度 | ai | 沿xi轴,从zi-1到zi的距离 |
| 连杆扭角 | αi | 绕xi轴,从zi-1到zi的转角 |
| 连杆偏距 | di | 沿zi-1轴,从xi-1到xi的距离 |
| 关节角 | θi | 绕zi-1轴,从xi-1到xi的转角 |
有了这四个参数,相邻坐标系之间的齐次变换矩阵就可以直接写出来:
T = Rot(z, θ) × Trans(z, d) × Trans(x, a) × Rot(x, α)
展开后就是:
| cosθ -sinθ·cosα sinθ·sinα a·cosθ |
| sinθ cosθ·cosα -cosθ·sinα a·sinθ |
| 0 sinα cosα d |
| 0 0 0 1 |
避坑指南:我曾经在给一个六轴协作臂建DH模型时,把α的符号搞反了。结果仿真里看着没问题,一上真机,末端执行器偏了十几度。查了两天才发现是扭角方向定义错了。所以,一定要严格按照右手定则确定α的正负。
2.4 标准DH与改进DH:两种流派
你可能会问:DH参数只有一种吗?其实有两种主流版本:
- 标准DH(Classic DH):坐标系建在连杆的末端
- 改进DH(Modified DH):坐标系建在连杆的起始端
两种方法本质上等价,但变换顺序和参数定义略有不同。我个人更习惯用改进DH,因为它在处理树形结构(比如并联机器人)时更直观。
下面这张图展示了标准DH的坐标系建立规则:
2.5 实战:给一个两轴机械臂建DH模型
光说不练假把式。我们拿一个简单的两轴平面机械臂来练手。
假设:
- 连杆1长度:L1 = 0.3m
- 连杆2长度:L2 = 0.25m
- 两个关节都是旋转关节
按照标准DH法,我们建立坐标系:
- 基坐标系{0}:原点在关节1,z轴向上
- 坐标系{1}:原点在关节2,x轴沿连杆1方向
- 坐标系{2}:原点在末端,x轴沿连杆2方向
对应的DH参数表:
| i | ai | αi | di | θi |
|---|---|---|---|---|
| 1 | L1 | 0 | 0 | θ1 |
| 2 | L2 | 0 | 0 | θ2 |
代入齐次变换矩阵公式,得到:
T_01 = | cosθ1 -sinθ1 0 L1·cosθ1 |
| sinθ1 cosθ1 0 L1·sinθ1 |
| 0 0 1 0 |
| 0 0 0 1 |
T_12 = | cosθ2 -sinθ2 0 L2·cosθ2 |
| sinθ2 cosθ2 0 L2·sinθ2 |
| 0 0 1 0 |
| 0 0 0 1 |
T_02 = T_01 × T_12
这样,给定任意两个关节角θ1和θ2,我们就能算出末端在基坐标系下的位置和姿态。这就是正运动学。
小技巧:我建议你在写代码时,先把DH参数表定义成一个结构体数组,然后用循环计算连乘。这样代码可读性强,也方便后期修改参数。千万别手写每个矩阵的展开式,容易写错。
2.6 本章小结
这一章我们覆盖了三个核心工具:
- 空间描述:位置+姿态=6自由度,用旋转矩阵和位置向量表示
- 齐次变换矩阵:4×4矩阵,把旋转和平移统一起来
- DH参数法:用四个参数标准化描述相邻关节的变换关系