3、DH参数法:标准DH与改进DH、连杆参数定义、建立连杆坐标系
聊到机械臂的运动学,DH参数法是个绕不开的话题。说实话,我刚入行那会儿,也被标准DH和改进DH搞得有点晕。后来在项目里踩过几次坑,才真正搞明白它们之间的区别。
今天我就把这块内容掰开了讲。你跟着我走一遍,保证能理清楚。
3.1 什么是DH参数法?
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 和 α 是连杆的固定属性,d 和 θ 则与关节运动相关。对于旋转关节,θ 是变量;对于移动关节,d 是变量。
3.2 标准DH vs 改进DH
这里有个容易混淆的点。标准DH(Standard DH)和改进DH(Modified DH)到底差在哪?
我个人的理解是这样的:
- 标准DH:坐标系 i 固定在连杆 i 的远端(靠近关节 i+1 那一端)。变换顺序是:绕 xi-1 转 αi-1 → 沿 xi-1 移 ai-1 → 绕 zi 转 θi → 沿 zi 移 di
- 改进DH:坐标系 i 固定在连杆 i 的近端(靠近关节 i 那一端)。变换顺序是:绕 zi-1 转 θi → 沿 zi-1 移 di → 绕 xi 转 αi → 沿 xi 移 ai
我在项目中遇到过一个问题:用标准DH建模时,如果两个相邻关节的轴线平行,会出现参数奇异。后来换成改进DH,这个问题就解决了。所以我现在做项目,基本都用改进DH。
我的建议:如果你刚开始学,建议先用改进DH。它更符合直觉,而且处理平行轴时更稳定。等熟练了,再回头看看标准DH,理解它们的区别。
3.3 建立连杆坐标系的步骤
建立坐标系是DH参数法中最关键的一步。我总结了一个四步法,你照着做就行:
- 找轴线:画出所有关节的旋转轴线(z 轴)
- 定原点:相邻两轴线的交点作为坐标系原点
- 定 x 轴:沿着两轴线的公垂线方向
- 定 y 轴:用右手定则确定
嗯,这里要注意:如果两轴线平行,公垂线不唯一,这时候取过前一坐标系原点的公垂线。
我曾经在调试一个六轴协作机器人时,就是因为坐标系建立不规范,导致正解算出来的位置总是差几毫米。后来重新梳理了一遍坐标系,问题就解决了。所以这一步千万别马虎。
3.4 知识体系结构图
下面这张图展示了DH参数法的核心逻辑,我建议你多看几遍:
3.5 变换矩阵的推导
有了坐标系和参数,下一步就是推导变换矩阵。以改进DH为例,相邻连杆的变换矩阵为:
T = Rot(z, θ) · Trans(z, d) · Trans(x, a) · Rot(x, α)
写成矩阵形式:
T = [cosθ -sinθ·cosα sinθ·sinα a·cosθ]
[sinθ cosθ·cosα -cosθ·sinα a·sinθ]
[0 sinα cosα d ]
[0 0 0 1 ]
这个矩阵就是连接两个相邻连杆的桥梁。把六个关节的变换矩阵连乘起来,就得到了末端执行器相对于基座标系的位姿。
注意:标准DH和改进DH的变换矩阵顺序不同,千万别混用。我曾经看到有人把标准DH的参数套进改进DH的矩阵里,结果算出来的位置完全不对。记住:参数和矩阵必须配套使用。
3.6 一个简单的例子
假设我们有一个两连杆机械臂,两个关节都是旋转关节。用改进DH建立参数表:
| 连杆 i | ai-1 | αi-1 | di | θi |
|---|---|---|---|---|
| 1 | 0 | 0 | 0 | θ1 |
| 2 | L1 | 0 | 0 | θ2 |
把参数代入变换矩阵,然后连乘,就能得到末端位置。这个过程虽然看起来繁琐,但一旦你理解了矩阵乘法的几何意义,就会发现其实很直观。
小技巧:写代码实现时,建议先把变换矩阵封装成一个函数,输入四个参数,输出4x4矩阵。这样代码会干净很多,也方便调试。
好了,DH参数法的核心内容就这些。你先把坐标系建立和参数定义搞明白,后面正解逆解的计算就水到渠成了。