1. 建立标准D-H参数表
任务目标
为六轴机械臂建立标准D-H参数表,确定各关节的连杆长度 \(a_i\)、连杆扭转角 \(\alpha_i\)、连杆偏距 \(d_i\) 和关节角 \(\theta_i\),并通过正运动学计算验证参数表的正确性。
标准D-H参数定义
采用标准D-H(Denavit-Hartenberg)约定,坐标系 \(\{i\}\) 固连于连杆 \(i\) 的远端(关节 \(i+1\) 处)。四个参数定义如下:
- \(a_i\):沿 \(X_i\) 轴,从 \(Z_i\) 移动到 \(Z_{i+1}\) 的距离;
- \(\alpha_i\):绕 \(X_i\) 轴,从 \(Z_i\) 旋转到 \(Z_{i+1}\) 的角度;
- \(d_i\):沿 \(Z_{i-1}\) 轴,从 \(X_{i-1}\) 移动到 \(X_i\) 的距离;
- \(\theta_i\):绕 \(Z_{i-1}\) 轴,从 \(X_{i-1}\) 旋转到 \(X_i\) 的角度(关节变量)。
六轴机械臂D-H参数表
以典型六轴串联关节型机械臂(类似通用工业六轴构型)为例,建立如下标准D-H参数表(长度单位:mm,角度单位:rad):
| 关节 \(i\) | \(a_i\) (mm) | \(\alpha_i\) (rad) | \(d_i\) (mm) | \(\theta_i\) (rad) |
|---|---|---|---|---|
| 1 | 0 | \(\pi/2\) | 150 | \(\theta_1\) |
| 2 | 400 | 0 | 0 | \(\theta_2\) |
| 3 | 0 | \(\pi/2\) | 0 | \(\theta_3\) |
| 4 | 0 | \(-\pi/2\) | 350 | \(\theta_4\) |
| 5 | 0 | \(\pi/2\) | 0 | \(\theta_5\) |
| 6 | 0 | 0 | 100 | \(\theta_6\) |
其中 \(\theta_1 \sim \theta_6\) 为关节变量。该参数表对应的机械臂构型为:关节1为腰部旋转(绕基座Z轴),关节2为肩部俯仰,关节3为肘部俯仰,关节4、5为腕部旋转,关节6为末端法兰旋转。
Python验证代码
以下代码使用 numpy 实现标准D-H齐次变换矩阵,并计算给定关节角下的末端位姿,用于验证参数表的正确性。
import numpy as np
def dh_transform(a, alpha, d, theta):
"""返回标准D-H参数对应的齐次变换矩阵"""
ct, st = np.cos(theta), np.sin(theta)
ca, sa = np.cos(alpha), np.sin(alpha)
return np.array([
[ct, -st*ca, st*sa, a*ct],
[st, ct*ca, -ct*sa, a*st],
[0, sa, ca, d ],
[0, 0, 0, 1 ]
])
# D-H参数表(a, alpha, d, theta)
dh_params = [
(0, np.pi/2, 150, 0), # 关节1
(400, 0, 0, 0), # 关节2
(0, np.pi/2, 0, 0), # 关节3
(0, -np.pi/2, 350, 0), # 关节4
(0, np.pi/2, 0, 0), # 关节5
(0, 0, 100, 0) # 关节6
]
# 设定一组关节角(单位:rad)
joint_angles = [0, -np.pi/2, 0, 0, 0, 0]
# 计算正运动学
T = np.eye(4)
for i, (a, alpha, d, _) in enumerate(dh_params):
T = T @ dh_transform(a, alpha, d, joint_angles[i])
print("末端位姿矩阵 T_06:")
print(np.round(T, 4))
# 提取末端位置
position = T[:3, 3]
print("\n末端位置 (mm):", np.round(position, 2))
运行与验证方法
- 运行环境:Python 3.8+,安装
numpy(pip install numpy)。 - 执行方式:将上述代码保存为
dh_verify.py,在终端运行python dh_verify.py。 - 验证判定标准:将全部关节角设为0,观察输出。预期末端位置为 \((400, 0, 600)\)(单位mm),计算过程如下:
- 关节1转角为0,坐标系仅沿基座Z轴平移150mm;
- 关节2转角为0,连杆沿X方向延伸400mm;
- 关节3、4、5转角为0,不产生额外旋转;
- 关节6转角为0,末端沿Z轴再平移100mm。
预期输出(对应上述代码与输入)
末端位姿矩阵 T_06:
[[ 1. 0. 0. 400.]
[ 0. 1. 0. 0.]
[ 0. 0. 1. 600.]
[ 0. 0. 0. 1.]]
末端位置 (mm): [400. 0. 600.]
该结果与几何直观完全一致,证明所建立的D-H参数表正确描述了机械臂的运动学关系。若需验证其他关节角组合,可修改 joint_angles 列表中的数值重新运行。