1. 建立标准D-H参数表

建立标准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)
10\(\pi/2\)150\(\theta_1\)
240000\(\theta_2\)
30\(\pi/2\)0\(\theta_3\)
40\(-\pi/2\)350\(\theta_4\)
50\(\pi/2\)0\(\theta_5\)
600100\(\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))

运行与验证方法

  1. 运行环境:Python 3.8+,安装 numpy(pip install numpy)。
  2. 执行方式:将上述代码保存为 dh_verify.py,在终端运行 python dh_verify.py。
  3. 验证判定标准:将全部关节角设为0,观察输出。预期末端位置为 \((400, 0, 600)\)(单位mm),计算过程如下:
    • 关节1转角为0,坐标系仅沿基座Z轴平移150mm;
    • 关节2转角为0,连杆沿X方向延伸400mm;
    • 关节3、4、5转角为0,不产生额外旋转;
    • 关节6转角为0,末端沿Z轴再平移100mm。
    因此末端位置应为 \(x=400\),\(y=0\),\(z=150+350+100=600\)。若输出与此一致,则D-H参数表建立正确。

预期输出(对应上述代码与输入)

末端位姿矩阵 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 列表中的数值重新运行。