3. 连杆参数与D-H模型:D-H参数定义、标准D-H与改进D-H、连杆坐标系建立

好,咱们进入正题。机器人运动学里,最绕不开的就是D-H模型。说白了,它就是一套给机器人“拍身份证照”的方法——用四个参数,把每个关节和连杆的位姿关系固定下来。

我刚入行那会儿,觉得这东西就是查表填数,没啥技术含量。直到有一次做六轴协作机器人标定,发现末端精度死活差了2mm……查了两天,最后发现是D-H参数里一个符号写反了。嗯,从那以后,我对这四个参数再也不敢马虎了。

3.1 为什么需要D-H参数?

你想想看,一个六轴机器人,六个旋转关节,七个连杆(包括基座和末端)。如果每个关节都用6个自由度(3个位置+3个姿态)去描述,那整个系统就是42个变量。别说计算了,光写出来都头疼。

D-H的厉害之处在于:它利用连杆的几何约束,把相邻坐标系之间的变换压缩到四个参数。这样一来,整个运动链只需要4×N个参数就能完整描述。

核心思想: 每个连杆用两个长度参数(a, d)和两个角度参数(α, θ)定义。这四个参数足以唯一确定相邻关节坐标系之间的齐次变换矩阵。

3.2 四个D-H参数的定义

咱们一个一个说。我习惯把参数分成两组:连杆自身参数和关节连接参数。

参数 符号 物理含义 类型
连杆长度 ai-1 沿xi-1轴,从zi-1到zi的距离 常数(固定连杆)
连杆扭角 αi-1 绕xi-1轴,从zi-1到zi的转角 常数(固定连杆)
连杆偏距 di 沿zi轴,从xi-1到xi的距离 关节变量(移动关节)或常数
关节转角 θi 绕zi轴,从xi-1到xi的转角 关节变量(旋转关节)或常数

我的记忆口诀: “先扭再走,先转再移”——先绕x轴转α,再沿x轴走a;然后绕z轴转θ,再沿z轴走d。这个顺序就是D-H变换矩阵的乘法顺序。

3.3 标准D-H vs 改进D-H

这里有个坑,我当年踩过。D-H模型其实有两个版本:标准D-H(Classic D-H)和改进D-H(Modified D-H)。它们本质上是等价的,但坐标系附着位置不同。

为什么会这样?因为Craig老爷子在写《Introduction to Robotics》时,把标准D-H的坐标系附着方式改了一下,结果就成了“改进D-H”。说白了,就是坐标系挂在哪个关节上的区别。

对比项 标准D-H 改进D-H
坐标系{i}附着位置 连杆i的末端(关节i+1处) 连杆i的起始端(关节i处)
变换顺序 先绕z轴转θ,再沿z轴移d
然后沿x轴移a,再绕x轴转α
先绕x轴转α,再沿x轴移a
然后绕z轴转θ,再沿z轴移d
参数下标 ai, αi, di, θi ai-1, αi-1, di, θi
常见教材 Paul, Denavit & Hartenberg原著 Craig《机器人学导论》

避坑指南: 我曾经在项目里混用了两种D-H模型——用标准D-H的表格去套改进D-H的变换矩阵。结果仿真时末端轨迹完全不对。后来我养成了一个习惯:在代码注释里明确标注用的是哪种D-H,并且在参数表第一行就写清楚。

3.4 连杆坐标系的建立步骤

好,理论说完了,咱们动手。我一般按下面五步来建坐标系,你跟着走一遍就不会乱。

  1. 找关节轴: 画出所有关节的旋转轴(或移动方向),标为z0, z1, ..., zn-1。
  2. 定原点: 对于坐标系{i},原点选在zi和zi+1的公垂线与zi的交点。如果两轴相交,原点就在交点。
  3. 定x轴: 沿zi和zi+1的公垂线方向,从zi指向zi+1。如果两轴相交,xi垂直于两轴所在平面。
  4. 定y轴: 右手定则,yi = zi × xi。
  5. 填参数表: 根据坐标系之间的几何关系,读出四个D-H参数。

一个小技巧: 如果你发现某个连杆的a或d是负数,别慌。检查一下你的x轴方向是不是指反了。我遇到过好几次,把x轴方向反过来,参数就全变成正的了。

3.5 知识体系总览

下面这张图,把D-H模型的整个知识脉络串起来了。你对照着看,心里就有谱了。

D-H模型知识体系 D-H参数模型 连杆长度 a 连杆扭角 α 连杆偏距 d 关节转角 θ 标准D-H (Classic) 改进D-H (Modified) 连杆坐标系建立(5步法) ① 找关节轴 ② 定原点 ③ 定x轴 ④ 定y轴 ⑤ 填参数表 最终输出:4×4齐次变换矩阵 i-1T_i 用于正向运动学计算与轨迹规划

3.6 一个完整的例子:两连杆平面臂

光说不练假把式。咱们拿最简单的两连杆平面臂走一遍流程。

假设:连杆1长度L1,连杆2长度L2,两个旋转关节。

步骤1:画关节轴
z0垂直于纸面(关节1),z1垂直于纸面(关节2),z2垂直于纸面(末端)。

步骤2-4:建坐标系
坐标系{0}:原点在关节1,x0沿连杆1方向。
坐标系{1}:原点在关节2,x1沿连杆2方向。
坐标系{2}:原点在末端,x2与x1同向。

步骤5:填参数表(用改进D-H)

i ai-1 αi-1 di θi
1 0 0° 0 θ1
2 L1 0° 0 θ2

你看,就这么简单。两个参数是0,两个是常数,剩下两个是变量。整个运动学模型就出来了。

关键点: D-H参数表就是机器人的“基因”。只要参数表对了,正向运动学、逆向运动学、雅可比矩阵……后面所有计算都建立在这个基础上。所以,建表时多花10分钟检查,后面能省10小时调试时间。

3.7 常见错误与避坑

最后,分享几个我这些年见过的坑:

  • 坐标系方向搞反: 特别是x轴方向,一定要从当前z轴指向下一个z轴。反了的话,a和θ的符号全错。
  • 忘记处理平行关节: 当两个相邻关节轴平行时,公垂线不唯一。这时候我习惯选一个让d=0的x轴方向。
  • 混淆标准D-H和改进D-H的参数下标: 标准D-H的ai对应改进D-H的ai-1。如果你从网上抄了一段代码,先搞清楚它用的是哪种。
  • 忽略初始关节偏移: 实际机器人装配时,关节零点位置可能不在D-H参数定义的“零位”。记得加一个初始偏移量。

我曾经踩过的坑: 有一次做SCARA机器人的运动学标定,用了标准D-H模型,但参考的用的是改进D-H。两个模型的参数表看起来一模一样,但变换矩阵的乘法顺序不同。结果末端位置误差达到了15mm。后来我把两种模型的变换矩阵手算了一遍,才发现问题。从那以后,我每次写D-H代码,都会在文件头部用注释写明模型类型和变换矩阵公式。

嗯,D-H参数这块儿,说难不难,说简单也不简单。关键是把四个参数的物理意义吃透,坐标系建立步骤走熟。后面咱们做正逆运动学计算时,你会发现——只要D-H表对了,剩下的就是矩阵乘法的事儿了。