导言 我们都知道关节一般会导致(驱动)机械臂产生两种状态:平移或者转动。也知道我们需要借助坐标系来描述物体的姿态和位置信息,那如何为一整个机械臂建立一个完整的坐标系,从而能够求解每个关节通过平移/旋转多少值让机械臂最终拿到我们的目标物品呢?在这里需要借助DH表达法来定义我们的坐标系的作法,并且给出需要求解的数值(平移\large d/旋转\large \Theta)在空间上的表达。 本节是学习正逆向运动学的基础。

D-H表达法(Denavit-Hartenberg)

DH表达法有两个通用版本,一个是标准版(standard),一个是craig版本,在这先使用craig版本作解释。 一般(驱动)关节(joint)分为两种:转轴(R型,revolute)或者 滑动杆 / 平移(P型,prismatic)

目录

如何构建DH表格

相关例题

DH表的作用

相关例子(PUMA560)

扩展(选读)

DH表达法的另一个版本(标准版)

复合型关节如何得到驱动数值


 

如何构建DH表格

构建DH表格首先需要画出坐标系,然后根据坐标系的数据做表。   (1)如何确定 z 轴? 首先找到每个关节的转动/平移方向 平移关节 :  沿着平移方向画 z 轴 转轴关节 :垂直转动方向做 z 轴 注:方向不唯一,全凭喜好或条件选择轴向正负   1   可以看到这个机械臂由转动、平移、转动关节组成,即所谓的RPR类型机械臂。   (2)如何确定 x 轴? 上过高中的一定知道啦,空间中的两条线一定能找到一条线与它们都垂直。 找到一条与关节 \large i、关节 i+1 的 z 轴都垂直并相交的线,这条线就是 x 轴 。 注:方向不唯一,全凭喜好或条件选择轴向正负 需要注意的是( 下面的(5) 解释了 \large a_{i} 是个什么东西 ): Z_{i}Z_{i+1}不在同一平面上时:\large a_{i} ≠0, x 轴沿着这条线。 Z_{i}Z_{i+1}在同一平面上:\large a_{i} =0   2   (3)如何确定 y 轴? 已知 x 轴、 z 轴,与它们两两垂直的就是 y 轴。(符合坐标系的右手定则)   3   (4)处理特殊点的坐标系(最开始、最后的) 由上述三点,一般杆件的驱动坐标系都定义出来了。还有两个特殊的杆件:地杆和端杆,我们如何处理?
  • 地杆(第0杆,link 0):无关节驱动、不动的
4   当  \theta_{1} = 0 (或 \small d_{1} = 0 )时的关节1的坐标系,就可当作地杆的关节坐标系(如图红色所示)。   5   注:这个坐标系定义后不会变动,一般作为整个机械臂的参考坐标系使用。
  • 端杆(最后一杆,link n):
端杆依靠最后一个关节的运动改变坐标位置   6   一般使用上一个关节的坐标系的 x 轴延伸直线作为端杆的 x 轴。   7   (5)构建DH表格   8   (注意区分 \large a 和 \large \alpha } ) \large a_{i-1} :  即关节i-1与关节i 两者z轴的最短举例(即垂直距离) \large \alpha _{i-1} :即关节i-1与关节i 两者z轴的角度差 \large d_{i} : 即 \large a_{i-1} 与 \large a_{i}  的最短距离 \theta_{i} :即 \large a_{i-1} 与 \large a_{i} 的角度差 一般 \large d_{i} 以上/右为正,\theta_{i} 以逆时针方向为正方向。 如果仅是表达两杆,只需要\large a\large \alpha即可。如果是多杆(一般情况),涉及到的信息矩阵T的运算需要\large d_{i}\theta_{i}参数。 然后根据情况将机械臂的数值写到表中:   9   一般而言,杆的长度我们都是已知的,数值都是可以直接得到的,所以有: 对于转轴而言,\large a\large \alpha\large d都是已知的。\theta是未知的,它是这个关节的驱动数值。 对于动杆而言,\large a\large \alpha\theta都是已知的。\large d是未知的,它是这个关节的驱动数值。  

相关例题

  10   11   12   13      

DH表的作用

我们通过齐次矩阵{T}能轻易知道两个关节杆子相互之间的联系与位置转换,通过{T}的运算连续性也很容易知道不相邻杆件关节间的状态:   14   通过上式可以得知,如果我们想把物体\large P向量从{\large i}的表达转换到{\large i-1},则需要依次经过从\large i-1\large R,从\large R\large Q..... 这样就能让我们的机械臂一步一步慢慢触碰到目标物体了。 那么我们如何得知的\large T具体数值呢?   DH表的最大作用就是为齐次矩阵 T 提供了必要的数值。 从而可以使关节0通过相应的T矩阵到关节1的位置,关节\large i通过T矩阵到达关节\large i+1的位置,一个推一个,最终达到目标位置。 由于(二)中提到的,齐次矩阵{T}的特性,可以推出:   15   这个矩阵的意思是: 关节i-1怎么到关节i呢? 首先是围绕\large x_{i-1}轴逆时针转动\large \alpha _{i-1}(蓝色->绿色),然后再沿着\large x_{R}轴向右平移\large a_{i-1}(绿色->橙色) 然后再围绕\large z_{Q}轴逆时针转动\large \Theta _{i}(橙色->紫色),然后再沿着\large z_{P}轴向上平移\large d_{i}(紫色->红色) 然后就能得到固定公式   \large _{i}^{i-1}\textrm{T} =   16  

相关例子(PUMA560)

  17   这是很经典的一个机械手臂——PUMA 560.现在需要求出 \large _{6}^{0}\textrm{T}.   求解过程 1)首先画出DH表(用Craig方式)   20   2)使用T矩阵的连续性求解 根据之前提供的公式,这六个矩阵有:   21 22 23 24  

扩展(选读)

  • DH表达法的另一个版本(标准版)

之前有提到DH表达法由两种版本,本博客举例的是craig版本的,而不是早期教材中的standard版本。 25   26 他们的区别是: 1、名称上的区别,前者的关节的表示英文为axis ,后者为 joint 2、代号定义上的区别,前者是关节i后面接杆件\large i,后者是关节i后面接杆件\large i+1. 3、坐标系的画法标准不同,关于\large x轴的画法,前者是\large z_{i}指向\large z_{i+1},后者是\large z_{i-1}指向\large z_{i}。 4、运算上的复杂度区别,后者需要的运算量稍微大了点。(以[相关例子]的最后一个图为例)   30 31  
  • 复合型关节如何得到驱动数值

之前说过了,一般的关节分两种:转轴或者滑动杆。 其中转轴的驱动机械臂运动的数值取决于\large \Theta,滑动杆取决于\large d。 但是实际上的需求关节会有更复杂的,这里以这个机器人的轮腿为例:
  33  
可以看到的轮子不只可以转动,而且由于可以“上上下下”,所以可以达到“走路”的效果。 所以这是由两个马达控制的关节驱动,一个控制转动 \large \Theta,一个控制位移 \large \gamma\large \varphi _{1},\large \varphi _{2} 代表的是两个马达的状态。
  35  

感谢:课程内容、PPT来自林沛群教授的《机器人学》课程