2. 建立改进D-H参数表

任务目标

使用改进D-H(Modified Denavit-Hartenberg)表示法,为六轴机械臂建立运动学模型,明确各连杆坐标系与参数定义,并与标准D-H表示法进行对比。

改进D-H参数定义

改进D-H(也称Craig表示法)将坐标系固定在连杆首端,变换顺序为:绕X轴旋转α、沿X轴平移a、绕Z轴旋转θ、沿Z轴平移d。相邻连杆变换矩阵为:

T(i,i-1) = RotX(α(i-1)) · TransX(a(i-1)) · RotZ(θ(i)) · TransZ(d(i))

六轴机械臂改进D-H参数表

以典型六轴关节型机械臂(如类PUMA构型)为例,建立改进D-H参数表如下:

| 关节i | α(i-1)/rad | a(i-1)/mm | θ(i)/rad | d(i)/mm |
|-------|------------|-----------|----------|---------|
| 1     | 0          | 0         | θ1       | d1=330  |
| 2     | -π/2       | 0         | θ2       | 0       |
| 3     | 0          | a2=400    | θ3       | 0       |
| 4     | -π/2       | a3=40     | θ4       | d4=350  |
| 5     | π/2        | 0         | θ5       | 0       |
| 6     | -π/2       | 0         | θ6       | d6=80   |

关键完整代码(Python + SymPy)

import sympy as sp
from sympy import pi, cos, sin, Matrix

# 定义关节变量与连杆参数符号
th1, th2, th3, th4, th5, th6 = sp.symbols('th1:7')
d1, d4, d6 = sp.symbols('d1 d4 d6')
a2, a3 = sp.symbols('a2 a3')

# 改进D-H参数表: [alpha, a, theta, d]
dh_params = [
    [0,      0, th1, d1],
    [-pi/2,  0, th2, 0],
    [0,     a2, th3, 0],
    [-pi/2, a3, th4, d4],
    [pi/2,   0, th5, 0],
    [-pi/2,  0, th6, d6],
]

def modified_dh_transform(alpha, a, theta, d):
    """返回改进D-H相邻连杆变换矩阵 T(i,i-1)"""
    return Matrix([
        [cos(theta), -sin(theta), 0, a],
        [sin(theta)*cos(alpha), cos(theta)*cos(alpha), -sin(alpha), -sin(alpha)*d],
        [sin(theta)*sin(alpha), cos(theta)*sin(alpha),  cos(alpha),  cos(alpha)*d],
        [0, 0, 0, 1]
    ])

# 计算正运动学:T60 = T10·T21·T32·T43·T54·T65
T = sp.eye(4)
for alpha, a, theta, d in dh_params:
    T = T * modified_dh_transform(alpha, a, theta, d)

# 提取末端位置(第4列前3行)
position = T[:3, 3]
print("末端位置表达式:")
print(position)

# 数值验证:给定一组关节角与连杆长度
values = {th1: 0, th2: pi/2, th3: 0, th4: 0, th5: 0, th6: 0,
          d1: 330, d4: 350, d6: 80, a2: 400, a3: 40}
T_num = T.evalf(subs=values)
print("\n数值验证 T60 =")
print(T_num)

# 预期输出(由代码逻辑直接推出):
# 当 θ2=π/2 时,末端位置应为 [0, 0, d1+d4+d6+a2+a3] = [0, 0, 1200]
print("\n预期末端位置:", position.evalf(subs=values))

运行与验证

  1. 依赖安装:pip install sympy
  2. 运行方式:将上述代码保存为 mdh_model.py,执行 python mdh_model.py
  3. 验证方法:观察数值验证结果。当θ2=π/2、其余关节角为0时,末端位置应为(0, 0, 1200)mm,对应机械臂完全竖直伸展状态。若输出与此一致,则说明改进D-H参数表与变换矩阵构建正确。

改进D-H与标准D-H对比

对比项改进D-H(Craig)标准D-H
坐标系位置固定在连杆首端(i-1系在i系之前)固定在连杆末端
变换顺序先绕X轴(α, a),再绕Z轴(θ, d)先绕Z轴(θ, d),再绕X轴(α, a)
参数含义α(i-1), a(i-1)描述连杆i-1自身;θ(i), d(i)描述连杆i与i-1关系α(i-1), a(i-1)描述连杆i-1;θ(i), d(i)描述连杆i
适用场景树形结构、闭链机构更直观串联开链简单直接

两种表示法在串联六轴机械臂中均可使用,但改进D-H在参数标定和奇异位形分析时更常用,因其坐标系与关节轴对齐方式更利于区分相邻关节的耦合影响。本案例采用改进D-H建立模型,后续逆运动学求解将基于此参数表展开。