3. 连杆参数与DH模型:Denavit-Hartenberg参数定义、标准DH与改进DH的区别、建立连杆坐标系的步骤

大家好,我是你们的老朋友。今天我们来聊聊机器人运动学里最基础、也最绕不开的一个话题——DH模型。

说实话,我刚入行那会儿,第一次看到DH参数表,脑子里全是问号。四个参数就能描述一个连杆?凭什么?后来在项目里调了两年机械臂,才真正体会到这四个参数的精妙之处。说白了,DH参数就是给每个关节和连杆发了一张「身份证」,让计算机能精确知道它们之间的位置关系。

3.1 什么是Denavit-Hartenberg参数?

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轴的角度。对于旋转关节,这个值是变量。

核心记忆点:a和α描述的是连杆本身的几何特性,d和θ描述的是关节的运动特性。记住这个,你就能分清哪个参数是固定的,哪个是变量了。

3.2 标准DH与改进DH的区别

这个问题,我在面试新人时经常问。很多人背得滚瓜烂熟,但一问到「为什么要有两种」,就卡住了。

其实很简单。标准DH(Classic DH)把坐标系建在连杆的末端,而改进DH(Modified DH)把坐标系建在连杆的起始端。就这点区别。

具体来说:

  • 标准DH(Craig版):坐标系{i}固定在连杆i的末端。变换顺序是:先绕Zi-1转θ,再沿Zi-1移d,然后沿Xi移a,最后绕Xi转α。
  • 改进DH(Khalil & Kleinfinger版):坐标系{i}固定在连杆i的起始端。变换顺序是:先绕Xi-1转α,再沿Xi-1移a,然后绕Zi转θ,最后沿Zi移d。

我个人习惯用改进DH。为什么?因为它在处理树形结构或闭链机构时更直观。我记得有一次做并联机器人项目,用标准DH死活对不上参数,换成改进DH一下子就通了。

我的建议:如果你刚开始学,先用标准DH,因为教材和开源代码(比如MoveIt里的URDF解析)大多用这个。等熟练了,再尝试改进DH。

3.3 建立连杆坐标系的步骤

好,理论说完了,我们来点实际的。怎么给一个机械臂建立连杆坐标系?我总结了五步法:

  1. 确定关节轴:画出所有关节的旋转轴或移动轴方向。记住,Z轴永远沿着关节轴方向。
  2. 确定基坐标系:{0}坐标系可以任意放置,但通常让Z0沿关节1的轴方向,且尽量让X0指向下一个关节。
  3. 确定连杆坐标系{i}:对于i从1到n-1:
    • Zi轴沿关节i+1的轴方向
    • Xi轴沿Zi-1和Zi的公垂线方向,从Zi-1指向Zi
    • Yi轴由右手定则确定
  4. 确定末端坐标系{n}:通常放在末端执行器的中心,Zn轴沿接近方向。
  5. 填写DH参数表:根据坐标系的位置,读出a、α、d、θ四个值。

注意:当两个相邻关节轴平行时,公垂线不唯一。这时候我一般选择让Xi轴沿前一个X轴的方向,或者让di=0来简化计算。曾经有个项目,我忘了处理平行轴的情况,结果仿真出来的轨迹全是乱的,排查了两天才发现是坐标系建歪了。

3.4 DH参数与变换矩阵

有了DH参数,我们就可以写出相邻连杆之间的变换矩阵了。标准DH的变换矩阵长这样:

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      ]

你想想看,一个4x4矩阵,四个参数,就能描述任意两个连杆之间的位姿关系。这就是DH模型的魅力所在。

3.5 知识体系总览

下面这张图,是我用SVG画的DH模型核心逻辑图。它把参数定义、坐标系建立、变换矩阵串成了一个整体。建议你保存下来,以后写代码时对照着看。

DH模型知识体系 连杆长度 a 沿X轴,Z轴间距离 连杆扭角 α 绕X轴,Z轴间角度 关节距离 d 沿Z轴,X轴间距离 关节转角 θ 绕Z轴,X轴间角度 建立连杆坐标系 Z轴沿关节轴 → X轴沿公垂线 → Y轴右手定则 相邻连杆变换矩阵 T T = Rot(z,θ)·Trans(z,d)·Trans(x,a)·Rot(x,α) 正运动学:T₀ₙ = T₀₁·T₁₂·...·Tₙ₋₁ₙ

3.6 一个简单的例子

假设我们有一个两连杆机械臂,两个关节都是旋转关节。按照上面的步骤,我们可以建立坐标系并填写DH参数表:

连杆 i ai αi di θi
1 L1 0 0 θ1 (变量)
2 L2 0 0 θ2 (变量)

把这两个变换矩阵乘起来,就能得到末端相对于基座的位置和姿态。嗯,这就是正运动学的核心。

避坑指南:我曾经在写MoveIt的URDF文件时,把DH参数里的a和d搞反了。结果机械臂在仿真里直接「飞」出去了。后来我养成了一个习惯:每次填完DH参数表,先手动算一个简单位姿验证一下,比如让所有关节角为0,看看末端位置对不对。

好了,DH模型就讲到这里。记住,这四个参数不是死记硬背的,而是要在实际项目中反复用、反复调,才能真正理解。下一章我们会聊MoveIt里怎么用这些参数来规划运动轨迹,到时候你会看到,今天学的这些全是基础中的基础。