MDH 与 SDH 参数法对比

DH (Denavit- Hartenberg) 法在matlab robotics toolbox中有SDH和MDH之分。

我先看的Craig的书,我自己一般习惯用MDH,但是后来上课的时候又是讲的SDH法,整得我很分裂,现在看Bruno Siciliano的Robotics也是用的SDH法,两种DH参数法用起来容易混,在这里进行一下区分。

其实两种方法的区别主要在于{0}的选择,从而导致了后面坐标系的小区别,link parameters的意义都是相同的。 两种方法大同小异,结果都是相同的,凭个人喜好选择即可。

Modified DH (MDH)

在这里插入图片描述

这种DH法是John J. Craig. Introduction to Robotics: Mechanics and Control 上面讲的。他自己也说这个方法和别的书不太一样,所以可能才叫Modified DH吧?

Note that many related conventions go by the name Denavit–Hartenberg, but differ in a few details. For example, the version used in this book differs from some of the robotic literature in the manner of frame numbering. Unlike some other conventions, in this book frame {i} is attached to link i and has its origin lying on joint axis i.

Link parameters表示frame{i-1}到frame{i}的变换Ti−1iT_{i-1}^iTi1i。从base{0}开始到6轴{6}结束,也可以到工具坐标系{T}结束。

连杆参数的定义 Link parameters

连杆参数 说明
连杆长度 ai−1a_{i-1}ai1 轴i-1和轴i之间的公垂线长度
扭转角 αi−1\alpha_{i-1}αi1 轴 i-1 绕ai−1a_{i-1}ai1转向 轴 i 的角度
偏距 did_idi ai−1a_{i-1}ai1与轴 i 的交点 指向 aia_{i}ai与 轴 i 的交点 的长度
关节角 θi\theta_iθi ai−1a_{i-1}ai1aia_{i}ai 绕轴 i 的夹角

其中连杆长度aaa和扭转角α\alphaα反应了轴 i-1 和 轴 i 的关系,偏距 ddd 反应了连杆 i-1 和 连杆 i 的关系。

连杆坐标系的选择 Rules of link-frame attachment

以6轴机械臂为例,Frame {i} 由{i}和{i+1}确定(i=0, 1, 2, 3, 4, 5),下面是确定 frame {i}的步骤。

  1. 确定Z轴。确定各关节轴线(Axis 1~6),每个轴线对应一个Z轴,比如 axis 1 对应Z1Z_1Z1, axis 6 对应Z6Z_6Z6
  2. 确定原点。要根据相邻的两个Z轴ZiZ_iZiZi+1Z_{i+1}Zi+1确定OiO_iOi
    • 如果ZiZ_iZiZi+1Z_{i+1}Zi+1 相交, 那么原点 OiO_iOi在交点。
    • 如果ZiZ_iZiZi+1Z_{i+1}Zi+1不相交(异面、平行),那么OiO_iOiZiZ_iZiZi+1Z_{i+1}Zi+1 的公垂线在 ZiZ_iZi 的垂足。
  3. 确定X轴。X轴的确定也和上面原点的确定类似,需要根据相邻两Z轴的情况来确定。
    • 如果相交,那么XiX_iXi沿两轴相交形成的平面的垂线,X⃗i=Z⃗i×Z⃗i+1\vec X_i=\vec Z_i\times \vec Z_{i+1}X i=Z i×Z i+1
    • 如果不相交,XiX_iXi沿公垂线。

根据上述规则确定了frame{1} ~ {6},我们可以把frame {0}设为与{1}重合,以便让尽可能多的DH参数为0。确定了{0}~{6}之后,便可以写DH参数了。

注意{6}并不是工具坐标系{T},而是6轴所在的坐标系,可以再加一个{6} -> {T}的DH参数,一般末端到工具坐标系的变换为一个固定的刚体变换。

定义了关节坐标系之后,我们再来看连杆参数在坐标系中的含义。

注意:我这里的下标都统一改成i了,和表1中的下标不一致。这是因为我一般在写某个关节坐标系{i}的DH参数时,我希望下标统一,而不是有的i-1有的是i,我这里手动修改了下标看起来更加顺眼。

DH parameters 意义
aia_iai Zi−1Z_{i-1}Zi1沿XiX_iXiZiZ_iZi的空间距离
αi\alpha_iαi Xi−1X_{i-1}Xi1为轴由Zi−1Z_{i-1}Zi1ZiZ_iZi转过的角度
did_idi Xi−1X_{i-1}Xi1沿ZiZ_iZiXiX_iXi的空间距离
θi\theta_iθi ZiZ_iZi为轴由Xi−1X_{i-1}Xi1XiX_iXi转过的角度

下面是{i}到{i+1}的变换矩阵
Tii+1=[cosθ−sinθ0asinθcosαcosθcosα−sinα−dsinαsinθsinαcosθsinαcosαdcosα0001] T_i^{i+1} = \begin{bmatrix} cos\theta & -sin\theta & 0 & a \\ sin\theta cos\alpha & cos\theta cos\alpha & -sin\alpha & -dsin\alpha \\ sin\theta sin\alpha & cos\theta sin\alpha & cos\alpha & dcos\alpha \\ 0 & 0 & 0 & 1 \end{bmatrix} Tii+1=cosθsinθcosαsinθsinα0sinθcosθcosαcosθsinα00sinαcosα0adsinαdcosα1

Standard DH (SDH)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZVr11fGL-1623574983358)(DH%E5%8F%82%E6%95%B0%E6%B3%95%E5%AF%B9%E6%AF%94.assets/51Rz-cclsaL._SY291_BO1,204,203,200_QL40_FMwebp_.jpg)]

这个方法是Bruno Siciliano. Robotics Modelling, Planning and Control 里面讲的。因为两种方法其实很相似,SDH我就不讲太详细了。

  1. 确定Z轴。i+1 轴确定ZiZ_iZi
  2. OiO_iOiZi−1Z_{i-1}Zi1ZiZ_iZi的公垂线与ZiZ_iZi的交点
  3. XiX_iXi沿Zi−1Z_{i-1}Zi1ZiZ_iZi公垂线,由i轴指向i+1轴。

下面是{i}到{i+1}的变换矩阵
Tii+1=[cosθ−cosαsinθsinαsinθacosθsinθcosθcosα−sinαcosθ−asinθ0sinαcosαd0001] T_i^{i+1} = \begin{bmatrix} cos\theta & -cos\alpha sin\theta & sin\alpha sin\theta & acos\theta \\ sin\theta & cos\theta cos\alpha & -sin\alpha cos\theta & -asin\theta \\ 0 & sin\alpha & cos\alpha & d \\ 0 & 0 & 0 & 1 \end{bmatrix} Tii+1=cosθsinθ00cosαsinθcosθcosαsinα0sinαsinθsinαcosθcosα0acosθasinθd1

案例:拟人臂(Anthropomorphic arm ) 两种DH参数法对比

我直接从Bruno Siciliano的书上截下来了一页。SDH方法的结果见左图。

SDH MDH
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-si5Os56l-1623574983360)(DH%E5%8F%82%E6%95%B0.assets/image-20210613113134531.png)]

右图为 MDH方法,结果如下图所示。可以看到两种方法最终求得的刚体变换是相同(废话)。

DH parameter aaa α\alphaα ddd θ\thetaθ
1 0 0 0 v1v_1v1
2 0 π/2\pi/2π/2 0 v2v_2v2
3 a2a_2a2 0 0 v3v_3v3
4 a3a_3a3 0 0 0


第4组其实是到末端单独的一组变换,这样算出来结果跟SDH法是相同的

通过对比可以发现,SDH比MDH领先一个轴,主要是因为MDH的{0}与{1}是重合的,而SDH的{0}是1轴,{1}是2轴,所以形式上SDH比MDH更加简洁一点点。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐