建立标准DH (Standard DH) 坐标系是机器人建模中最关键、也最容易出错的步骤。如果坐标系建错了,后续算出来的 θ,d,a,α\theta, d, a, \alpha 全都会错,导致正逆运动学完全失效。

标准 DH 的核心逻辑是:坐标系 {i}\{i\} 建立在连杆 ii 的末端(即关节 i+1i+1 的轴线上)。


第一阶段:画轴线 (确定 Z 轴)

规则:ZiZ_i 轴位于关节 i+1i+1 的轴线上。

  1. 标识关节轴线:

    • 画出每一个关节(Joint 1, Joint 2, … Joint n)的运动轴线。

    • 如果是旋转关节,轴线就是旋转中心轴。

    • 如果是移动关节,轴线就是伸缩移动的方向。

  2. 确定 Z 轴方向:

    • Z0Z_0:沿 关节 1 的轴线。

    • Z1Z_1:沿 关节 2 的轴线。

    • …

    • ZiZ_{i}:沿 关节 i+1i+1 的轴线。

    • …

    • Zn−1Z_{n-1}:沿 关节 nn 的轴线。

    • ZnZ_n (末端):通常没有关节 n+1n+1 了,所以 ZnZ_n 可以任意定义,但习惯上让它与 Zn−1Z_{n-1} 平行,或者指向工具的进给方向。


第二阶段:找公垂线 (确定原点 OO 和 X 轴)

这是最难的一步。我们需要确定坐标系 {i}\{i\} 的原点 OiO_i 和 XiX_i 轴。

核心原则:XiX_i 必须同时垂直于 Zi−1Z_{i-1} 和 ZiZ_i(即沿着公垂线方向)。

我们需要处理 Zi−1Z_{i-1} 和 ZiZ_i 之间的三种空间关系:

情况 1:两轴异面(既不平行也不相交)

  • 找公垂线:在空间中,异面直线之间只有一条最短的公垂线。

  • 确定原点 OiO_i:公垂线与当前轴 ZiZ_i 的交点,就是坐标系 {i}\{i\} 的原点。

  • 确定 XiX_i 轴:沿着公垂线,从 Zi−1Z_{i-1} 指向 ZiZ_i。

情况 2:两轴平行

  • 找公垂线:平行线之间有无数条公垂线。

  • 确定原点 OiO_i:

    • 通常选择一条公垂线,使得它通过前一个坐标系的原点(这样 di=0d_i=0,简化计算)。

    • 或者根据机器人的物理对称性选择一个明显的“中心”。

  • 确定 XiX_i 轴:沿着选定的公垂线,从 Zi−1Z_{i-1} 指向 ZiZ_i。

情况 3:两轴相交

  • 确定原点 OiO_i:两条轴线的交点就是原点。

  • 确定 XiX_i 轴:

    • 根据叉乘规则:Xi=Zi−1×ZiX_i = Z_{i-1} \times Z_i(或者反方向)。

    • 也就是垂直于 Zi−1Z_{i-1} 和 ZiZ_i 构成的平面。


第三阶段:推导参数 (提取 θ,d,a,α\theta, d, a, \alpha)

现在坐标系画好了,我们只需要“看图说话”,量出相邻两个坐标系 {i−1}\{i-1\} 和 {i}\{i\} 之间的 4 个参数。

请记住口诀:“先两轴,后两面”。

  • 定义:沿 XiX_i 轴,从 Zi−1Z_{i-1} 到 ZiZ_i 的距离。

  • 测量:就是公垂线的长度。

  • 正负号:永远非负(因为 XiX_i 就是沿着公垂线定义的)。

  • 定义:绕 XiX_i 轴,从 Zi−1Z_{i-1} 旋转到 ZiZ_i 的角度。

  • 测量:把 Zi−1Z_{i-1} 平移过来,看它转多少度能和 ZiZ_i 重合。

  • 正负号:右手定则(大拇指指向 XiX_i,四指从 Zi−1Z_{i-1} 抓向 ZiZ_i)。

  • 定义:沿 Zi−1Z_{i-1} 轴,从 Xi−1X_{i-1} 到 XiX_i 的距离。

  • 测量:两个公垂线(XX轴)在 ZZ 轴上的截距。

  • 注意:如果是移动关节,这个 did_i 就是变量 qiq_i。

4. 关节角 θi\theta_i (Joint Angle)

  • 定义:绕 Zi−1Z_{i-1} 轴,从 Xi−1X_{i-1} 旋转到 XiX_i 的角度。

  • 测量:两个 XX 轴的夹角。

  • 注意:如果是转动关节,这个 θi\theta_i 就是变量 qiq_i(当机器人处于初始姿态时,算出来的常数部分就是 offset)。


示例:如何处理 Base Frame {0}\{0\}?

这也是新手常犯错的地方。标准 DH 规定:

  • Z0Z_0 沿关节 1 轴线。

  • 原点 O0O_0 可以任意选择(通常选在地面或者底座中心)。

  • X0X_0 怎么定?

    • 为了简化 θ1\theta_1 的计算,通常让 X0X_0 与 X1X_1 平行(当关节1角度为0时)。

    • 这样初始状态下 θ1=0\theta_1 = 0。

总结检查表

步骤动作结果
1标出所有关节轴得到 Z0,Z1,…,Zn−1Z_0, Z_1, \dots, Z_{n-1}
2找 Zi−1Z_{i-1} 和 ZiZ_i 的公垂线得到 XiX_i 的方向
3找公垂线与 ZiZ_i 的交点得到原点 OiO_i
4补全 YiY_i (右手定则)得到完整坐标系 {i}\{i\}
5量 aia_iXiX_i 方向上 ZZ 轴间距
6量 αi\alpha_i绕 XiX_i 旋转看 ZZ 夹角
7量 did_iZi−1Z_{i-1} 方向上 XX 轴间距
8量 θi\theta_i绕 Zi−1Z_{i-1} 旋转看 XX 夹角

建立好坐标系后,将提取出的参数填入 Link([theta, d, a, alpha]) 即可完成建模。