[机械臂] 关节空间和变换的定义与获取(基于改进D-H)
本文参考Craig 的《Introduction to Robotics(机器人学导论)》Craig 的 MDH 方法特别适合处理树状结构(分叉)的机器人,因为它的坐标系是固连在连杆上的,且原点通常位于连杆的前端(即关节的位置),而标准 DH 的坐标系固连在连杆上但原点在连杆的后端(关节i1i+1i1在 Craig 的 MDH 中,变换是从坐标系i−1\{i-1\}i−1到i\{i\}i。参数的下
写在前面
本文参考Craig 的《Introduction to Robotics(机器人学导论)》
Craig 的 MDH 方法特别适合处理树状结构(分叉)的机器人,因为它的坐标系 是固连在连杆 上的,且原点通常位于连杆 的前端(即关节 的位置),而标准 DH 的坐标系 固连在连杆 上但原点在连杆的后端(关节 i+1i+1i+1)。
以下是按照 MDH 方法 定义关节空间(建立坐标系)的详细步骤:
建立坐标系 (Frame Assignment)
假设我们有连杆 i−1i-1i−1 和连杆 iii,以及连接它们的关节 iii
Step 1: 确定 Z 轴(ZiZ_iZi)
- 定义: ZiZ_iZi 轴的方向沿着关节 iii 的旋转轴(或移动轴)
- 注意区别:在标准 DH 中,ZiZ_iZi 通常是关节 i+1i+1i+1 的轴;而在 Craig MDH 中,ZiZ_iZi 就是当前关节 iii 的轴
Step 2: 确定 X 轴 (Xi−1X_{i-1}Xi−1)
这是 MDH 的核心。我们需要定义前一个坐标系的 X 轴。
- 定义:Xi−1X_{i-1}Xi−1 轴沿着 Zi−1Z_{i-1}Zi−1 和 ZiZ_iZi 两个轴之间的公垂线(Common Normal)
- 方向:从 Zi−1Z_{i-1}Zi−1 指向 ZiZ_iZi
- 特殊情况:
- 如果 Zi−1Z_{i-1}Zi−1 和 ZiZ_iZi 平行:公垂线有无数条,通常选择通过前一连杆坐标原点的那个,或者使得 di=0d_i=0di=0 的那个
- 如果 Zi−1Z_{i-1}Zi−1 和 ZiZ_iZi 相交:Xi−1X_{i-1}Xi−1 垂直于由这两个轴构成的平面(即叉乘方向 Zi−1×ZiZ_{i-1} \times Z_iZi−1×Zi)
Step 3: 确定原点 (OiO_iOi)
- 定义:坐标系 {i}\{i\}{i} 的原点 OiO_iOi 位于 XiX_iXi 轴与 ZiZ_iZi 轴的交点
- 这意味着坐标系 {i}\{i\}{i} 是建立在关节 iii 上的
Step 4: 确定 Y 轴 ()
- 根据右手定则:Yi=Zi×XiY_i = Z_i \times X_iYi=Zi×Xi
定义四个 DH 参数
在 Craig 的 MDH 中,变换是从坐标系 {i−1}\{i-1\}{i−1} 到 {i}\{i\}{i}。参数的下角标非常重要,请注意 aaa 和 α\alphaα 的下标是 i−1i-1i−1
- 连杆长度 ai−1a_{i-1}ai−1 (Link Length):
沿 Xi−1X_{i-1}Xi−1 轴测量的,Zi−1Z_{i-1}Zi−1 到 ZiZ_iZi 的距离 - 连杆扭角 αi−1\alpha_{i-1}αi−1 (Link Twist):
绕 Xi−1X_{i-1}Xi−1 轴旋转的角度,使得 Zi−1Z_{i-1}Zi−1 转到与 ZiZ_iZi 平行 - 连杆偏距 did_idi (Link Offset):
沿 ZiZ_iZi 轴测量的,Xi−1X_{i-1}Xi−1 与 XiX_iXi 之间的距离 - 关节角 θi\theta_iθi (Joint Angle):
绕 ZiZ_iZi 轴旋转的角度,使得 Xi−1X_{i-1}Xi−1 转到与 XiX_iXi 平行
不得不说的是
用DH参数和用旋转矩阵+位移向量描述任意两个关节的关系,本质上是等价的,
通常来说,DH 参数是一种“结构化、少参数”的描述(严格说是对相邻刚体变换的特定参数化),真正算位姿时通常都会把它变成4×4 齐次变换矩阵再连乘
旋转矩阵 BAR{}^A_B RBAR 的获取
数值定义:BAR{}^A_B RBAR 的每一列就是坐标系 B 的三个主轴单位向量(x^B,y^B,z^B\hat{x}_B, \hat{y}_B, \hat{z}_Bx^B,y^B,z^B)在坐标系 A 中的投影(分量)
(点积推导)通过将 B 系的基向量投影到 A 系的基向量(x^A,y^A,z^A\hat{x}_A, \hat{y}_A, \hat{z}_Ax^A,y^A,z^A)上得到:BAR=[x^B⋅x^Ay^B⋅x^Az^B⋅x^Ax^B⋅y^Ay^B⋅y^Az^B⋅y^Ax^B⋅z^Ay^B⋅z^Az^B⋅z^A]{}^A_B R = \begin{bmatrix} \hat{x}_B \cdot \hat{x}_A & \hat{y}_B \cdot \hat{x}_A & \hat{z}_B \cdot \hat{x}_A \\ \hat{x}_B \cdot \hat{y}_A & \hat{y}_B \cdot \hat{y}_A & \hat{z}_B \cdot \hat{y}_A \\ \hat{x}_B \cdot \hat{z}_A & \hat{y}_B \cdot \hat{z}_A & \hat{z}_B \cdot \hat{z}_A \end{bmatrix}BAR= x^B⋅x^Ax^B⋅y^Ax^B⋅z^Ay^B⋅x^Ay^B⋅y^Ay^B⋅z^Az^B⋅x^Az^B⋅y^Az^B⋅z^A
假设坐标系 B 的三个轴单位向量在坐标系 A 中表示为:
- Ax^B{}^A\hat{x}_BAx^B:B 系 x 轴在 A 系中的描述
- Ay^B{}^A\hat{y}_BAy^B:B 系 y 轴在 A 系中的描述
- Az^B{}^A\hat{z}_BAz^B:B 系 z 轴在 A 系中的描述
那么,从结果上来看,BAR{}^A_B RBAR 就是直接由这三列向量拼成的:
BAR=[∣∣∣Ax^BAy^BAz^B∣∣∣]{}^A_B R = \begin{bmatrix} | & | & | \\ {}^A\hat{x}_B & {}^A\hat{y}_B & {}^A\hat{z}_B \\ | & | & | \end{bmatrix}BAR=
∣Ax^B∣∣Ay^B∣∣Az^B∣
然后如果两个关节不香菱,那么我们会使用逐级传递的方式,得到两个目标关节之间的关系
位移向量APBORG{}^A P_{BORG}APBORG的获取
本质上就是 从当前坐标系A原点,到目标关节坐标系原点的向量,在系A中的表达
最后把 BAR{}^A_B RBAR 和APBORG{}^A P_{BORG}APBORG拼起来,就是变换矩阵 (Transformation Matrix)
MDH 的变换顺序是:先绕 X 轴动,再绕 Z 轴动
即:Frame{i−1}→Rotx(α),Transx(a)Intermediate→Rotz(θ),Transz(d)Frame{i}Frame \{i-1\} \xrightarrow{Rot_x(\alpha), Trans_x(a)} \text{Intermediate} \xrightarrow{Rot_z(\theta), Trans_z(d)} Frame \{i\}Frame{i−1}Rotx(α),Transx(a)IntermediateRotz(θ),Transz(d)Frame{i}
公式为:ii−1T=Rotx(αi−1)⋅Transx(ai−1)⋅Rotz(θi)⋅Transz(di){}^{i-1}_i T = Rot_x(\alpha_{i-1}) \cdot Trans_x(a_{i-1}) \cdot Rot_z(\theta_i) \cdot Trans_z(d_i)ii−1T=Rotx(αi−1)⋅Transx(ai−1)⋅Rotz(θi)⋅Transz(di)
展开后的矩阵形式(实际用于计算的矩阵):
ii−1T=[cosθi−sinθi0ai−1sinθicosαi−1cosθicosαi−1−sinαi−1−disinαi−1sinθisinαi−1cosθisinαi−1cosαi−1dicosαi−10001]{}^{i-1}_i T = \begin{bmatrix} \cos\theta_i & -\sin\theta_i & 0 & a_{i-1} \\ \sin\theta_i \cos\alpha_{i-1} & \cos\theta_i \cos\alpha_{i-1} & -\sin\alpha_{i-1} & -d_i \sin\alpha_{i-1} \\ \sin\theta_i \sin\alpha_{i-1} & \cos\theta_i \sin\alpha_{i-1} & \cos\alpha_{i-1} & d_i \cos\alpha_{i-1} \\ 0 & 0 & 0 & 1 \end{bmatrix}ii−1T=
cosθisinθicosαi−1sinθisinαi−10−sinθicosθicosαi−1cosθisinαi−100−sinαi−1cosαi−10ai−1−disinαi−1dicosαi−11
其中的旋转矩阵部分ii−1R{}^{i-1}_i Rii−1R(左上角 3×33\times33×3)就是用来做速度和静力变换的核心
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)