standard_DH
根据DH表示法确定一个一般步骤为每个关节指定参考坐标系,然后确定如何实现任意两个相邻坐标系之间的变换,最后写出机器人的总变换矩阵。如图所示表示了三个顺序关节和两个连杆,每个关节都是可以转动和平移的。第一个关节指定为关节i-1,第二个关节指定为关节i,第三个关节指定为关节i+1。在这些关节前后可能还有其他关节,连杆也是如此表示,连杆i位于关节i与关节i+1之间。
1、standard_DH建立每个关节参考坐标系步骤:
(1)所有关节,无一例外用z轴表示。如果是关节是旋转的,z轴位于按右手定则选装的方向,如果关节是滑动的,z轴为沿实现运动的方向。在每一种情况下,关节i处的z轴(以及该关节的本地参考坐标系)的下标为i-1。
(2) 通常关节不一定平行或相交。因此,通常z轴是斜线,但是总有一条距离最短的公垂线,它正交于任意两条斜线。通常在公垂线方向上定义x轴。所以如果aia_iai表示zi−1z_{i-1}zi−1与ziz_izi之间的公垂线,则xix_ixi的方向沿aia_iai。
(3)如果两个关节的z轴平行,选取与前一关节的公垂线共线的一条公垂线,可简化模型;如果两个相邻关节的z轴是相交的,那么它们之间没有公垂线,可选取两条z轴的叉积2方向作为x轴,可简化模型。
θ\thetaθ角表示绕z轴旋转角,d表示在z轴上两条相邻的公垂线之间的距离,a表示每一条公垂线的长度,角α\alphaα表示两个相邻的z轴之间的角度。

2、standard_DH建模步骤:
(1)绕zi−1z_{i-1}zi−1轴旋转θi\theta_iθi,它使得xi−1x_{i-1}xi−1和xix_{i}xi互相平行;
(2)沿zi−1z_{i-1}zi−1轴平移did_{i}di距离,使得xi−1x_{i-1}xi−1和xix_{i}xi共线;
(3)沿xix_{i}xi轴平移aia_{i}ai距离,使得xi−1x_{i-1}xi−1和xix_{i}xi的原点重合;
(4)将zi−1z_{i-1}zi−1轴绕xix_{i}xi旋转aia_{i}ai,使得zi−1z_{i-1}zi−1轴与ziz_{i}zi轴对准。
通过右乘四个运动的四个矩阵就可以得到变换矩阵i−1Ti^{i-1}T_ii−1Ti:
i−1Ti=Rot(zi−1,θi)×Trans((zi−1,di)×Trans((xi,ai)×Rot(xi,αi)\begin{aligned}^{i-1}T_i=Rot(z_{i-1},\theta_i)\times Trans((z_{i-1},d_i)\times Trans((x_{i},a_i)\times Rot(x_{i},\alpha_i)\end{aligned}i−1Ti=Rot(zi−1,θi)×Trans((zi−1,di)×Trans((xi,ai)×Rot(xi,αi)
i−1Ti=[cθi−sθi00sθicθi0000100001][10000100001di0001][100ai010000100001][10000cαi−sαi00sαicαi00001]^{i-1}T_i=\begin{bmatrix} c\theta_i&-s\theta_i&0&0\\s\theta_i&c\theta_i&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix} \begin{bmatrix} 1&0&0&0\\0&1&0&0\\0&0&1&d_i\\0&0&0&1\end{bmatrix} \begin{bmatrix} 1&0&0&a_i\\0&1&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix} \begin{bmatrix} 1&0&0&0\\0&c\alpha_i&-s\alpha_i&0\\0&s\alpha_i&c\alpha_i&0\\0&0&0&1\end{bmatrix}i−1Ti=⎣⎢⎢⎡cθisθi00−sθicθi0000100001⎦⎥⎥⎤⎣⎢⎢⎡10000100001000di1⎦⎥⎥⎤⎣⎢⎢⎡100001000010ai001⎦⎥⎥⎤⎣⎢⎢⎡10000cαisαi00−sαicαi00001⎦⎥⎥⎤
i−1Ti=[cθi−sθicαisθisαiaicθisθicθicαi−cθisαiaisθi0sαicαidi0001]^{i-1}T_i=\begin{bmatrix} c\theta_i&-s\theta_i c\alpha_i&s\theta_i s\alpha_i&a_i c\theta_i\\s\theta_i&c\theta_i c\alpha_i&-c\theta_i s\alpha_i&a_i s\theta_i\\0&s\alpha_i&c\alpha_i&d_i\\0&0&0&1\end{bmatrix}i−1Ti=⎣⎢⎢⎡cθisθi00−sθicαicθicαisαi0sθisαi−cθisαicαi0aicθiaisθidi1⎦⎥⎥⎤
modified_DH
1、modified_DH建立每个关节参考坐标系步骤:
(1)找出关节轴i和i+1之间的公垂线或关节轴i和i+1的交点,以关节轴i和i+1的交点或公垂线与关节轴i的交点作为连杆坐标系{i}的原点;
(2)规定ziz_izi轴沿关节轴i的指向;
(3)规定xix_ixi轴沿公垂线的指向,如果关节轴i和i+1相交,则规定xix_ixi垂直于关节轴i和i+1所在平面。
(4)按照右手定则确定yiy_iyi轴

2、modified_DH建模步骤:
(1)aia_iai=沿xix_ixi轴,从ziz_izi移动到zi+1z_{i+1}zi+1的距离;
(2)αi\alpha_iαi=绕xix_ixi轴,从ziz_izi旋转到zi+1z_{i+1}zi+1的角度;
(3)did_idi=沿ziz_izi轴,从xi−1x_{i-1}xi−1移动到xix_{i}xi的距离;
(4)θi\theta_iθi=沿ziz_izi轴,从xi−1x_{i-1}xi−1旋转到xix_{i}xi的角度;
变换矩阵可以写成:
i−1Ti=RX(αi−1)×DX(ai−1)×RZ(θi)×DZ(di)\begin{aligned}^{i-1}T_i=R_X(\alpha_{i-1})\times D_X(a_{i-1})\times R_Z(\theta_{i})\times D_Z(d_{i})\end{aligned}i−1Ti=RX(αi−1)×DX(ai−1)×RZ(θi)×DZ(di)
i−1Ti=[cθi−sθi0ai−1sθicαi−1cθicαi−1−sαi−1−sαi−1disθisαi−1cθisαi−1cαi−1cαi−1di0001]^{i-1}T_i=\begin{bmatrix} c\theta_i&-s\theta_i &0&a_{i-1} \\s\theta_i c\alpha_{i-1}&c\theta_i c\alpha_{i-1}&-s\alpha_{i-1}&-s\alpha_{i-1}d_i \\s\theta_i s\alpha_{i-1}&c\theta_i s\alpha_{i-1}&c\alpha_{i-1}&c\alpha_{i-1}d_i\\0&0&0&1\end{bmatrix}i−1Ti=⎣⎢⎢⎡cθisθicαi−1sθisαi−10−sθicθicαi−1cθisαi−100−sαi−1cαi−10ai−1−sαi−1dicαi−1di1⎦⎥⎥⎤
SDH与MDH比较
(1)固连坐标系不同
SDH方法关节i上固连的是i-1坐标系,即坐标系建在连杆的输出端;MDH关节i上固连的是i坐标系,即坐标系建在连杆的输入端。
(2)坐标系变换顺序不同
SDH方法是ZX类变换:先绕着i-1坐标系的的Zi-1轴旋转和平移,再绕着坐标系i的Xi轴进行旋转和平移;MDH方法是XZ类变换:先绕着i坐标系的的Xi轴旋转和平移,再绕着坐标系i的Zi轴进行旋转和平移;