2. DH参数法:标准DH与改进DH参数定义、连杆坐标系建立规则
说到机器人运动学,DH参数法是个绕不开的话题。我刚开始接触那会儿,也被标准DH和改进DH搞得晕头转向。说白了,它们就是一套给机器人关节和连杆“贴标签”的规则。你想想看,一个六轴机器人,六个关节、六个连杆,怎么用数学描述它们之间的位置关系?DH参数法就是干这个的。
2.1 为什么需要DH参数?
在机器人里,每个关节都会动。如果直接写变换矩阵,每个关节的旋转轴方向、连杆长度都不一样,计算量会爆炸。DH参数法的核心思想是:用四个参数,就能唯一确定相邻两个关节坐标系之间的变换关系。
这四个参数分别是:
- 连杆长度 ai-1:从 Zi-1 轴到 Zi 轴,沿 Xi-1 方向的距离。
- 连杆扭角 αi-1:从 Zi-1 轴到 Zi 轴,绕 Xi-1 方向的转角。
- 关节距离 di:从 Xi-1 轴到 Xi 轴,沿 Zi 方向的距离。
- 关节转角 θi:从 Xi-1 轴到 Xi 轴,绕 Zi 方向的转角。
嗯,这里要注意:对于旋转关节,θi 是变量;对于移动关节,di 是变量。其他参数在机器人设计完成后就是固定的。
2.2 标准DH vs 改进DH:到底差在哪?
我在项目中遇到过不少工程师,把标准DH和改进DH混着用,结果算出来的末端位姿完全不对。其实它们的区别就两点:坐标系附着的位置不同,以及变换顺序不同。
先看个对比表格,一目了然:
| 对比项 | 标准DH (Standard DH) | 改进DH (Modified DH) |
|---|---|---|
| 坐标系附着 | 坐标系 {i} 固定在连杆 i 的末端(关节 i+1 处) | 坐标系 {i} 固定在连杆 i 的起始端(关节 i 处) |
| 变换顺序 | 绕 Xi-1 旋转 α → 沿 Xi-1 平移 a → 绕 Zi 旋转 θ → 沿 Zi 平移 d | 绕 Zi-1 旋转 θ → 沿 Zi-1 平移 d → 绕 Xi 旋转 α → 沿 Xi 平移 a |
| 参数下标 | ai-1, αi-1, di, θi | ai-1, αi-1, di, θi(参数名相同,但物理含义略有差异) |
| 常见教材 | Craig 的《机器人学导论》 | Siciliano 的《机器人学》 |
核心区别一句话总结:标准DH的坐标系建在连杆末端,变换时先绕X轴再绕Z轴;改进DH的坐标系建在连杆起始端,变换时先绕Z轴再绕X轴。
2.3 连杆坐标系建立规则(标准DH)
我个人习惯用标准DH,因为Craig那本书讲得特别清楚。建立坐标系时,遵循以下步骤:
- 找Z轴:Zi 轴沿关节 i+1 的轴线方向(注意是下一个关节)。
- 找原点:原点 Oi 在 Zi 轴与 Zi-1 轴的公垂线交点处。
- 找X轴:Xi 轴沿 Zi-1 到 Zi 的公垂线方向,指向 Zi。
- 找Y轴:Yi 轴由右手定则确定,Yi = Zi × Xi。
举个例子,一个简单的两连杆机器人:
- 关节1是旋转关节,轴线竖直向上 → Z0 轴竖直。
- 关节2也是旋转关节,轴线水平 → Z1 轴水平。
- Z0 和 Z1 的公垂线就是连杆1的长度 → X1 轴沿连杆方向。
小技巧:如果 Zi-1 和 Zi 相交,原点取在交点处,Xi 轴垂直于 Zi-1 和 Zi 所在平面。
2.4 连杆坐标系建立规则(改进DH)
改进DH的规则稍微不同,坐标系 {i} 建在关节 i 上:
- 找Z轴:Zi 轴沿关节 i 的轴线方向。
- 找原点:原点 Oi 在 Zi 轴与 Zi+1 轴的公垂线交点处。
- 找X轴:Xi 轴沿 Zi 到 Zi+1 的公垂线方向。
- 找Y轴:同样由右手定则确定。
你看,改进DH的X轴指向的是下一个Z轴,而标准DH的X轴指向的是当前Z轴。这个区别导致了变换矩阵的差异。
2.5 变换矩阵的推导
标准DH的相邻坐标系变换矩阵为:
T = Rotx(αi-1) · Transx(ai-1) · Rotz(θi) · Transz(di)
展开后得到:
| cosθi -sinθi 0 ai-1 |
| sinθicosαi-1 cosθicosαi-1 -sinαi-1 -disinαi-1 |
| sinθisinαi-1 cosθisinαi-1 cosαi-1 dicosαi-1 |
| 0 0 0 1 |
改进DH的变换矩阵为:
T = Rotz(θi) · Transz(di) · Rotx(αi-1) · Transx(ai-1)
展开后:
| cosθi -sinθicosαi-1 sinθisinαi-1 ai-1cosθi |
| sinθi cosθicosαi-1 -cosθisinαi-1 ai-1sinθi |
| 0 sinαi-1 cosαi-1 di |
| 0 0 0 1 |
我曾经踩过的坑:在写代码时,把标准DH的变换矩阵用在了改进DH的坐标系上,结果末端位置差了半个手臂的长度。后来我养成了一个习惯:在代码开头用注释写明用的是哪种DH约定,避免后续维护时搞混。
2.6 知识体系总览
下面这张图帮你理清DH参数法的整体脉络:
2.7 实际项目中的选择建议
说了这么多,到底该用哪个?我的建议是:
- 如果你用的是UR、KUKA等工业机器人,它们的控制器内部通常用标准DH,你照着标准DH建模就行。
- 如果你在做移动机器人或协作机器人,改进DH更常见,因为坐标系建在关节起始端,便于添加工具坐标系。
- 如果你在写教材或,看你的参考文献用哪个,保持一致即可。
避坑指南:我曾经在一个项目里,团队一半人用标准DH,一半人用改进DH,结果联调时发现末端位姿差了180度。后来我们统一了约定,并且在每个变换矩阵前面加了一个注释块,写明当前用的是哪种DH。嗯,从那以后,再也没出过这种问题。