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))
运行与验证
- 依赖安装:
pip install sympy - 运行方式:将上述代码保存为
mdh_model.py,执行python mdh_model.py - 验证方法:观察数值验证结果。当θ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建立模型,后续逆运动学求解将基于此参数表展开。