第3章 改进DH参数法:标准DH与改进DH的全面对比

大家好,欢迎来到第三章。这一章我们聊聊DH参数法——准确地说,是改进DH参数法。

很多初学者学到这里会懵:怎么还有标准DH和改进DH?到底用哪个?我当年刚入行时也踩过这个坑。有一次给一个六轴协作臂建运动学模型,按标准DH算出来的末端位姿死活对不上实际值,折腾了两天才发现是坐标系建反了……嗯,从那以后我就把两种DH的差异刻在脑子里了。

今天咱们就把这事彻底讲透。

为什么会有两种DH?

说白了,DH参数法就是一种给机械臂每个关节建立坐标系的约定规则。既然是约定,就允许有不同的版本。

  • 标准DH(Classic DH):由Denavit和Hartenberg在1955年提出。坐标系建在连杆的末端(即连杆的输出端)。
  • 改进DH(Modified DH):由Craig等人在1986年改良。坐标系建在连杆的起始端(即连杆的输入端)。

你可能会问:就差这么一点,至于搞出两套体系吗?

至于。因为坐标系的位置变了,参数的定义、变换顺序、甚至正解公式都不一样。我个人的习惯是:工业机器人用标准DH多,教学和科研用改进DH多。但这不是的,关键是你得理解背后的逻辑。

核心区别:坐标系挂在哪?

咱们直接上对比表,一目了然:

对比项 标准DH(Classic DH) 改进DH(Modified DH)
坐标系{i}的位置 固定在连杆i的末端(输出端) 固定在连杆i的起始端(输入端)
变换顺序 绕x轴旋转 → 沿x轴平移 → 绕z轴旋转 → 沿z轴平移 沿x轴平移 → 绕x轴旋转 → 沿z轴平移 → 绕z轴旋转
参数定义 αi-1, ai-1, di, θi αi-1, ai-1, di, θi
参数下标 α和a的下标与当前连杆一致 α和a的下标与前一连杆一致
适用场景 串联机器人,树形结构 串联、并联、树形结构均适用

一句话总结:标准DH的坐标系{i}在连杆i的末端,改进DH的坐标系{i}在连杆i的起始端。这个差异导致了变换矩阵的乘法顺序完全不同。

改进DH的坐标系建立规则

我个人更推荐初学者从改进DH入手。为什么?因为它的规则更直观,而且能统一处理串联和并联机构。下面是我总结的五步建系法:

  1. 找关节轴:画出所有关节的旋转轴或移动轴,用箭头标出正方向。
  2. 定Z轴:第i个关节的轴线就是Zi-1轴。注意下标!Zi-1对应关节i。
  3. 定原点Oi-1:Zi-1与Zi的公垂线与Zi-1的交点。
  4. 定Xi-1轴:沿公垂线方向,从Zi-1指向Zi。
  5. 定Yi-1轴:右手定则,Yi-1 = Zi-1 × Xi-1。

我的小技巧:每次建系时,我都会在纸上画一个简图,标出Z轴和公垂线。只要公垂线画对了,X轴方向就不会错。这个习惯帮我避免过无数次低级错误。

四个参数的定义

改进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的转角 旋转关节为变量

注意看下标:a和α的下标是i-1,d和θ的下标是i。这就是改进DH和标准DH最明显的区别——标准DH里a和α的下标是i。

变换矩阵的推导

改进DH的相邻坐标系变换矩阵,是从坐标系{i-1}到坐标系{i}的变换。我习惯把它拆成四个基本变换的乘积:

i-1T_i = RotX(α_{i-1}) · TransX(a_{i-1}) · RotZ(θ_i) · TransZ(d_i)

展开成4×4矩阵就是:

i-1T_i = 
[ cosθ_i,  -sinθ_i,  0,       a_{i-1}          ]
[ sinθ_i·cosα_{i-1},  cosθ_i·cosα_{i-1},  -sinα_{i-1},  -d_i·sinα_{i-1} ]
[ sinθ_i·sinα_{i-1},  cosθ_i·sinα_{i-1},   cosα_{i-1},   d_i·cosα_{i-1}  ]
[ 0,        0,        0,       1                ]

我曾经踩过的坑:注意变换顺序!改进DH是先绕X轴再绕Z轴,而标准DH是先绕Z轴再绕X轴。如果你把顺序搞反了,算出来的位姿会完全不对。我当年调试一个SCARA机器人时,就是在这里卡了整整一个下午。

改进DH vs 标准DH:实战对比

咱们用一个简单的两连杆平面机械臂来对比。假设两个连杆长度都是L,关节角分别为θ₁和θ₂。

标准DH的参数表:

连杆i ai-1 αi-1 di θi
1 0 0 0 θ₁
2 L 0 0 θ₂

改进DH的参数表:

连杆i ai-1 αi-1 di θi
1 0 0 0 θ₁
2 L 0 0 θ₂

咦?看起来一样?别急,这是因为平面两连杆太简单了。一旦遇到关节轴线不平行的情况,差异就出来了。比如一个六轴工业机器人,标准DH和改进DH的参数表会有明显不同,尤其是扭角α的取值。

核心结论:对于简单的串联机构,两种DH可能给出相同的参数表。但对于复杂机构(尤其是存在偏置或轴线异面的情况),改进DH的参数定义更自然,不容易出错。

改进DH的完整建系流程(附SVG图)

下面这张图展示了一个三关节机械臂的改进DH坐标系建立过程。我特意把每个步骤都标出来了:

改进DH参数法:三关节机械臂坐标系建立 基座(连杆0) J1 连杆1 J2 连杆2 J3 连杆3 末端 X₀ Z₀ X₁ Z₁ X₂ Z₂ 坐标系建立要点: 1. Zᵢ₋₁ 轴沿关节i的轴线方向 2. 原点Oᵢ₋₁在公垂线与Zᵢ₋₁的交点 3. Xᵢ₋₁轴沿公垂线指向Zᵢ 4. Yᵢ₋₁轴由右手定则确定 5. 基座坐标系固定不动 6. 末端坐标系与最后一个连杆固连 改进DH四个参数: aᵢ₋₁:沿Xᵢ₋₁轴,Zᵢ₋₁→Zᵢ的距离 αᵢ₋₁:绕Xᵢ₋₁轴,Zᵢ₋₁→Zᵢ的转角 dᵢ:沿Zᵢ轴,Xᵢ₋₁→Xᵢ的距离 θᵢ:绕Zᵢ轴,Xᵢ₋₁→Xᵢ的转角

避坑指南:我踩过的那些坑

做运动学建模这么多年,我总结了几条关于改进DH的避坑经验:

  • 下标搞混:改进DH里a和α的下标是i-1,不是i。写代码时特别容易搞混,我建议在参数表里把下标写清楚。
  • 公垂线方向:当两个Z轴平行时,公垂线不唯一。这时候我习惯取使X轴与前一坐标系X轴同向的那条。
  • 扭角正负:α的正负由右手定则决定。大拇指指向X轴正方向,四指从Zi-1弯向Zi,就是正方向。
  • 移动关节处理:对于移动关节,di是变量,θi是常数。千万别搞反了。

我曾经犯过的错:有一次给一个六轴机器人建模型,我习惯性地用了标准DH的变换顺序(先绕Z再绕X),但参数表是按改进DH填的。结果算出来的正解和逆解全都不对,调试了整整两天才发现是变换矩阵用错了。从那以后,我每次写代码都会在注释里明确标注"这是改进DH"。

什么时候用改进DH?

我个人建议:

  • 教学和入门:用改进DH。规则更统一,不容易出错。
  • 工业机器人:看厂家手册。ABB、KUKA等主流厂商通常用标准DH。
  • 并联机器人:必须用改进DH。标准DH处理不了并联机构的闭环约束。
  • 自己写库:选一种并坚持用下去。混用两种DH是灾难的开始。

好了,这一章的内容就到这里。改进DH的核心就一句话:坐标系建在连杆起始端,变换先绕X再绕Z。把这个记牢了,后面的正解、逆解、动力学都会顺畅很多。