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 连杆坐标系的建立步骤
好,理论说完了,咱们动手。我一般按下面五步来建坐标系,你跟着走一遍就不会乱。
- 找关节轴: 画出所有关节的旋转轴(或移动方向),标为z0, z1, ..., zn-1。
- 定原点: 对于坐标系{i},原点选在zi和zi+1的公垂线与zi的交点。如果两轴相交,原点就在交点。
- 定x轴: 沿zi和zi+1的公垂线方向,从zi指向zi+1。如果两轴相交,xi垂直于两轴所在平面。
- 定y轴: 右手定则,yi = zi × xi。
- 填参数表: 根据坐标系之间的几何关系,读出四个D-H参数。
一个小技巧: 如果你发现某个连杆的a或d是负数,别慌。检查一下你的x轴方向是不是指反了。我遇到过好几次,把x轴方向反过来,参数就全变成正的了。
3.5 知识体系总览
下面这张图,把D-H模型的整个知识脉络串起来了。你对照着看,心里就有谱了。
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表对了,剩下的就是矩阵乘法的事儿了。