3. 连杆参数与D-H表示法
各位,咱们今天聊聊机器人建模里最基础、也最绕不开的一个话题——D-H参数。说实话,我刚入行那会儿,被这玩意儿折腾得不轻。明明就是几个参数,怎么不同教材、不同里长得还不一样?后来做项目做多了才明白,这东西说白了就是一套“给机器人关节和连杆发身份证”的规则。
你想想看,一个六轴机器人,六个关节、七根连杆(包括基座和末端),怎么用数学描述它们之间的相对位置?D-H法就是干这个的。它用四个参数,把相邻两根连杆的空间关系说得清清楚楚。
核心思想:D-H参数的本质,是用最少的参数(4个)描述两个相邻关节轴之间的空间变换。这4个参数分别是:连杆长度 ai、连杆扭角 αi、连杆偏距 di、关节角 θi。
3.1 连杆参数的定义
咱们先看一根连杆。一根连杆两端各有一个关节轴,这两个轴在空间里通常是异面直线。那怎么描述它们的关系?
- 连杆长度 ai:两个关节轴之间的公垂线长度。说白了,就是两根轴之间最短的距离。我在做焊接机器人项目时,就遇到过因为ai标定不准,导致焊枪末端偏差2mm的情况——嗯,后来返工了一整天。
- 连杆扭角 αi:将一根轴沿着公垂线平移到另一根轴上,两根轴之间的夹角。这个角决定了连杆的“扭转”程度。
- 连杆偏距 di:沿着关节轴方向,从上一根连杆的公垂线到下一根连杆的公垂线的距离。
- 关节角 θi:绕着关节轴,从上一根连杆的公垂线到下一根连杆的公垂线的转角。
这四个参数,a和α描述的是连杆本身的结构,d和θ描述的是相邻连杆之间的连接关系。对于旋转关节,θ是变量;对于移动关节,d是变量。
我的习惯:每次建立D-H参数表之前,我都会先在纸上画出关节轴的简化图。标出每个关节的z轴方向,然后找公垂线。这一步做扎实了,后面参数基本不会错。
3.2 D-H参数表的建立
建立D-H参数表,有固定的步骤。我建议你按这个顺序来,不容易乱。
- 标定关节轴:画出所有关节的旋转轴(或移动轴)方向,用zi表示。
- 确定连杆坐标系原点:对于每个关节i,原点Oi在zi轴与zi+1轴的公垂线与zi轴的交点上。
- 确定x轴方向:xi轴沿着zi到zi+1的公垂线方向。
- 确定y轴方向:用右手定则,yi = zi × xi。
- 填写参数表:根据坐标系定义,逐一填写a、α、d、θ。
来看一个具体的例子。这是一个简单的两连杆平面机械臂:
# 两连杆平面机械臂 D-H 参数表
# 关节1(肩关节):旋转关节
# 关节2(肘关节):旋转关节
连杆 i | a_i | α_i | d_i | θ_i
-------|------|-----|-----|-----
1 | L1 | 0 | 0 | θ1
2 | L2 | 0 | 0 | θ2
你看,对于平面机械臂,所有关节轴都平行,所以α都是0。所有关节都在同一个平面内,所以d也都是0。a就是连杆长度,θ就是关节变量。
我曾经踩过的坑:在建立六轴工业机器人的D-H表时,把相邻两个关节的z轴方向搞反了。结果算出来的末端位姿完全不对,仿真里机器人直接“拧麻花”。后来花了半天时间,一个一个关节对,才发现是z2和z3的方向标反了。所以,z轴方向一定要统一,要么都指向关节旋转的正方向,要么都指向远离基座的方向。
3.3 标准D-H与改进D-H的区别
这部分是很多初学者的噩梦。为什么会有两个版本?说白了,就是坐标系定义的位置不同。
| 对比项 | 标准D-H (Craig) | 改进D-H (Khalil & Kleinfinger) |
|---|---|---|
| 坐标系位置 | 坐标系{i}固定在连杆i的末端(靠近关节i+1) | 坐标系{i}固定在连杆i的起始端(靠近关节i) |
| 变换顺序 | 先绕z轴旋转θ,再沿z轴平移d,再沿x轴平移a,最后绕x轴旋转α | 先绕x轴旋转α,再沿x轴平移a,再绕z轴旋转θ,最后沿z轴平移d |
| 变换矩阵 | i-1Ti = Rot(z,θ) · Trans(z,d) · Trans(x,a) · Rot(x,α) | i-1Ti = Rot(x,α) · Trans(x,a) · Rot(z,θ) · Trans(z,d) |
| 适用场景 | 串联机器人,尤其是关节轴线不平行的情况 | 树形结构、并联机器人、闭环机构 |
你可能会问:到底用哪个?我个人习惯用标准D-H。为什么?因为大多数工业机器人厂商的说明书里给的参数都是标准D-H格式,比如ABB、KUKA。你用标准D-H,可以直接套用他们的参数,省去转换的麻烦。
但改进D-H也有它的优势。在处理树形结构(比如人形机器人)时,改进D-H的坐标系定义更自然,因为每个连杆的坐标系都固定在关节的输入端,方便分支。
关键区别一句话总结:标准D-H的坐标系在连杆“出口”,改进D-H的坐标系在连杆“入口”。变换矩阵的乘法顺序正好相反。
下面这张图,帮你理清两种方法的整体逻辑:
你看这张图,从上到下就是D-H参数法的完整知识链。四个参数是基础,五步建立法是操作流程,最后分叉到两种方法。我个人建议初学者先掌握标准D-H,因为它的资料最多、案例最丰富。等标准D-H用熟了,再去看改进D-H,你会发现其实就是坐标系挪了个位置,变换顺序调了个个儿。
一个小技巧:如果你在写代码时不确定自己用的是标准D-H还是改进D-H,可以检查一下变换矩阵。标准D-H的左上角3×3子矩阵,第一列是x轴方向向量,第二列是y轴方向向量,第三列是z轴方向向量。如果发现z轴向量和你的关节轴方向对不上,那大概率是方法搞混了。
最后说一句,D-H参数法虽然经典,但它不是万能的。对于某些特殊构型(比如关节轴线相交于一点),D-H参数会出现退化——a=0且α=0,导致坐标系定义不唯一。遇到这种情况,我建议你改用旋量理论(Screw Theory)或者POE(Product of Exponentials)公式。不过那是后话了,先把D-H吃透再说。