机器人正运动学(7)—— 连杆坐标系与DH参数

1. 引言

  前面的文章我们一直在介绍坐标系以及它们之间的变换关系,数学的意味还是很浓的。讲了那么多的公式和规律,它们要怎么用在机器人上呢?这篇文章将介绍坐标系和机器人之间的纽带即连杆坐标系。完成这篇文章的介绍之后我们就可以利用一些机器人的开发平台如ROS,Robotic Toolbox,SimMechanics等来进行一些基本的机器人建模与仿真工作了。

2. 连杆坐标系

  从前面一系列关于坐标系的文章中我们了解到可以利用齐次变换矩阵来计算某个空间点在各个坐标系下的坐标。在机器人正运动学(3)—— 坐标系及其变换文章开头我们提出了一个问题,如何求解一个多连杆机器人(如下图)的末端点P在世界坐标系下的坐标。介绍到这里我们终于可以尝试解决这个问题。

  由于机器人的各个连杆之间可以发生相对运动,我们真的很难直观地看出末端点在世界坐标系的位置。那怎么办呢?其实我们可以把这个问题分解一下让每个子问题求解起来没有那么困难。
在这里插入图片描述

  如果我们建立一个与末端连杆固连的坐标系,那么 P P P 点在该坐标系下的坐标是很容易给出的,因为它只和末端连杆的机械尺寸有关,与机器人的运动无关,这就是一个连杆坐标系。连杆坐标系是一个个与机器人的连杆固连在一起的坐标系。如果我们在机器人的每一个连杆上都建立一个固连坐标系,并且我们想办法求解每相邻两个连杆之间的坐标系变换关系,是不是就能很容易地将P点坐标映射到世界坐标系了呢(相对而言相邻两个连杆之间的坐标变换关系是容易求得的)。

  这时比较关键的问题是怎么求解相邻两个坐标系之间的变换关系。随便建立连杆坐标系肯定是不好的,一方面这将导致坐标系之间的关系复杂多样,难以统一;另一方面我们可能需要进行很多不必要参数的测量。因此建立连杆坐标系需要一套准则。我们希望这套准则尽可能使用较少的参数来描述各个坐标系,同时我们希望这套准则是普适的。

  1995年Jacques DenavitRichard Hartenberg解决了这个问题,他们提出了著名的DH参数法建立连杆坐标系的准则。在这个准则下每个连杆只需四个参数就可以确定它的连杆坐标系。

3 DH参数

3.1 DH参数的介绍

  DH参数是一种描述连杆坐标系的方法,如下图所示。可以认为这是机器人中的两个相邻连杆 L i n k i − 1 Link_{i-1} Linki1 L i n k i Link_{i} Linki。在这里我首先还是希望解释一下图中符号的含义,特别是下标含义,我学习的时候经常弄混。
在这里插入图片描述

图1. DH参数

  首先我们来定义两个概念,驱动关节传动关节,这两个概念很容易理解。我们都知道对于电驱动的机器人,各个关节处通常都会有伺服电机驱动。在一个串联机器人中连杆i靠近基座的关节驱动连杆i的运动,称为连杆i的驱动关节; 连杆i靠近末端执行器的关节用于驱动连杆i+1的运动,因此我们称这个关节为连杆i的传动关节。DH参数建立的坐标系又被称为传动轴坐标系。这里需要强调连杆i的坐标系是建立在传动关节也就是靠近末端执行器一侧的关节处,也就是说坐标系 O i − 1 x i − 1 y i − 1 z i − 1 O_{i-1}x_{i-1}y_{i-1}z_{i-1} Oi1xi1yi1zi1(简称 { O i − 1 } \{O_{i-1}\} {Oi1})是与 L i n k i − 1 Link_{i-1} Linki1 固连在一起的,坐标系 { O i } \{O_{i}\} {Oi} 是与 L i n k i Link_{i} Linki 固连在一起的,在后面的介绍中请各位一定牢记,否则你会觉得整个坐标系变换都很奇怪

   A x i s i − 1 Axis_{i-1} Axisi1 对应的是 L i n k i − 1 Link_{i-1} Linki1 的驱动轴; A x i s i Axis_{i} Axisi 对应的是 L i n k i − 1 Link_{i-1} Linki1 的传动轴以及 L i n k i Link_{i} Linki 的驱动轴; A x i s i + 1 Axis_{i+1} Axisi+1对应的是 L i n k i Link_{i} Linki 的传动轴…

  标志右斜杠的两对直线圈1和圈2分别是两对平行直线。图中的 θ i \theta_{i} θi d i d_{i} di α i \alpha _{i} αi a i a_{i} ai 就是我们要介绍的 L i n k i Link_{i} Linki 的DH参数。

3.2 DH参数定义

  要说DH参数为何如此受青睐我觉得主要有两个原因。第一就是DH参数描述一个连杆坐标系只需要4个参数; 第二这四个参数具备明显的物理意义:

  1. θ i \theta _{i} θi 代表坐标系 { O i − 1 } \{O_{i-1}\} {Oi1} 和坐标系 { O i } \{O_{i}\} {Oi} 之间x轴的夹角,也就是 A x i s i Axis_{i} Axisi 旋转的角度(这不就是关节i电机旋转的角度吗)
  2. d i d_{i} di 代表坐标系 { O i } \{O_{i}\} {Oi} 想对于坐标系 { O i − 1 } \{O_{i-1}\} {Oi1} z i − 1 z_{i-1} zi1 轴方向的偏移量
  3. α i \alpha _{i} αi 代表 L i n k i Link_{i} Linki 的驱动轴和传动轴之间的夹角
  4. a i a_{i} ai 代表 L i n k i Link_{i} Linki 的数学意义上的长度

  从上面的描述我们可以看出1和2是描述的是 L i n k i − 1 Link_{i-1} Linki1 L i n k i Link_{i} Linki 之间的关系,3和4描述的是 L i n k i Link_{i} Linki 的固有属性(因为它们只和 L i n k i Link_{i} Linki 有关)。因此要说清楚DH参数,这两组不同含义的参数还是分开来看。

3.2.1 连杆长度和扭角

  我们先从 α i \alpha _{i} αi a i a_{i} ai 的定义开始,因为这两个参数比较直观。下图就是连杆固有参数 α i \alpha _{i} αi a i a_{i} ai 的示意图。再次强调连杆长度和扭角是连杆自身的固有属性,与其他连杆没有任何关系。
在这里插入图片描述

图2. 连杆固有属性

  无论这个连杆有多么的复杂,我们都可以对它进行一种统一的描述:两根关节轴线 A x i s i Axis_{i} Axisi A x i s i + 1 Axis_{i+1} Axisi+1)以及他们的公垂线(圈1)是对一个连杆最简单的抽象。这里可能需要一点点空间几何的知识,异面直线有且仅有一条公垂线

  在这里我们定义Axis_{i}和Axis_{i+1}的公垂线圈1的长度为连杆长度a_{i},这就是四个DH参数中的第一个参数。

  定义 A x i s i Axis_{i} Axisi A x i s i + 1 Axis_{i+1} Axisi+1 两条异面直线的夹角为连杆的关节扭角 α i \alpha _{i} αi,图中双右斜杠对应的两条直线平行,这是DH参数中的第二个参数。

3.2.2 连杆转角和连杆偏距

  接下来我们来看连杆转角 θ i \theta _{i} θi 连 杆 偏 距 d i 连杆偏距d_{i} di 的定义。这两个参数描述的是一种位置关系。再次强调它们描述的是相邻两个连杆之间的位置关系,不再是连杆的固有属性。就这里来说 θ i \theta _{i} θi d i d_{i} di 描述的是 L i n k i Link_{i} Linki 相对于 L i n k i − 1 Link_{i-1} Linki1 的位置关系。

  请在回到图1中观察(这里我把图1放在了下面,方便观看), { O i − 1 } \{O_{i-1}\} {Oi1} { O i } \{O_{i}\} {Oi} 分别是与 L i n k i − 1 Link_{i-1} Linki1 L i n k i Link_{i} Linki 固连的坐标系。根据我们的定义 { O i − 1 } \{O_{i-1}\} {Oi1} 的x轴建在 A x i s i − 1 Axis_{i-1} Axisi1 A x i s i Axis_{i} Axisi 的公垂线上, { O i } \{O_{i}\} {Oi} 的x轴建在 A x i s i Axis_{i} Axisi A x i s i + 1 Axis_{i+1} Axisi+1 的公垂线上。仔细体会一下这说明了什么。这说明 { O i − 1 } \{O_{i-1}\} {Oi1} 的x轴和 { O i } \{O_{i}\} {Oi} 的x轴都垂直于 A x i s i Axis_{i} Axisi,也就是 A x i s i Axis_{i} Axisi 是异面直线 x i − 1 x_{i-1} xi1 x i x_{i} xi 的公垂线。

  图1中单右斜杠对应的两条直线平行,那么 θ i \theta _{i} θi 对应的就是直线 x i − 1 x_{i-1} xi1 x i x_{i} xi 的夹角。因此我们定义 { O i − 1 } \{O_{i-1}\} {Oi1} { O i } \{O_{i}\} {Oi} 的x轴夹角为连杆转角 θ i \theta _{i} θi
在这里插入图片描述

图1. DH参数

  我们发现 { O i − 1 } \{O_{i-1}\} {Oi1} 沿 A x i s i Axis_{i} Axisi(即 { O i − 1 } \{O_{i-1}\} {Oi1} 的z轴)旋转 θ i \theta _{i} θi { O i − 1 } \{O_{i-1}\} {Oi1} { O i } \{O_{i}\} {Oi} 的x轴平行了!我们定义 { O i − 1 } \{O_{i-1}\} {Oi1} { O i } \{O_{i}\} {Oi} 的x轴之间的公垂线长度为连杆偏距 d i d_{i} di

  我们发现 { O i − 1 } \{O_{i-1}\} {Oi1} 沿着 A x i s i Axis_{i} Axisi 旋转 θ i \theta _{i} θi,再沿着新坐标系的z轴(其实还是 A x i s i Axis_{i} Axisi,因为前面的旋转是绕着z轴的,因此z轴方向不会改变)平移 d i d_{i} di,之后你会发现新的坐标系和 { O i } \{O_{i}\} {Oi} 的x轴已经完全重合了!!

  更进一步,再将新坐标系沿着其x轴旋转 α i \alpha _{i} αi 角,我们发现新坐标系和 { O i } \{O_{i}\} {Oi} 不仅x轴重合,而且z轴平行了!!!那么如果再沿着x轴平移 a i a_{i} ai 呢?没错两个坐标系这时候完全重合!!!!

  以上描述的过程用数学语言表达就是: i − 1 T i = r o t z ( θ i ) t r a n s z ( d i ) r o t x ( α i ) t r a n s x ( a i ) ^{i-1}\textrm{T}_{i}=rot_{z}\left ( \theta _{i} \right )trans_{z}\left ( d_{i} \right )rot_{x}\left ( \alpha _{i} \right )trans_{x}\left ( a_{i} \right ) i1Ti=rotz(θi)transz(di)rotx(αi)transx(ai)

  这个变换矩阵可以将 { O i } \{O_{i}\} {Oi} 中的点映射到 { O i − 1 } \{O_{i-1}\} {Oi1}!有一点需要注意沿同一轴连续的平移和旋转是可以交换位置的,这一点大家从几何的角度思考一下就不难发现,因此沿z的平移和旋转可交换,沿x轴的平移和旋转可交换。

4. 解决问题

  到这里我们终于可以解决前面提到的关于机器人末端点在基坐标系下的坐标的问题了。方法很简单,就是在每个连杆上都建立一个坐标系,然后用前面提到的变换关系找到相邻连杆之间的变换关系,这样问题就迎刃而解了。如下图所示就是在SCARA机器人的各个连杆上建立的坐标系,为了便于观察添加了一些辅助线。
在这里插入图片描述
  在利用DH参数进行机器人正运动学分析时我们习惯上列写DH参数表。有了参数表后我们就已经从机器人中抽象出了数学模型。有人说高手眼中没有机器人,只有坐标系大概就是这种感觉吧。我们把这个机器人的参数列成如下的表格。(依然请各位牢记DH参数中\theta代表两个x轴夹角,d代表两个x轴的公垂线长度,\alpha代表两个z轴夹角,a代表两个z轴的公垂线长度

SCARA DH参数
连杆编号 θ \theta θ d d d α \alpha α a a a
1 θ 1 \theta _{1} θ1 d 1 d_{1} d1 0 0 0 l 1 l_{1} l1
2 θ 2 \theta _{2} θ2 0 0 0 0 0 0 l 2 l_{2} l2
30 d 3 d_{3} d300
4 θ 4 \theta _{4} θ4000

  DH参数表到这里就算是建立完成了,SCARA机器人第三轴是平移关节,DH参数表中的变量为 θ 1 \theta _{1} θ1 θ 2 \theta _{2} θ2 d 3 d_{3} d3 θ 4 \theta _{4} θ4,其余参数均为固定值。还记得我们在3.2.2介绍的变换关系吗?每相邻两个连杆之间的关系都可以用这个变换加以描述。因此我们可以找到: 0 T 1 = r o t z ( θ 1 ) t r a n s z ( d 1 ) t r a n s x ( l 1 ) ^{0}\textrm{T}_{1}=rot_{z}\left ( \theta _{1} \right )trans_{z}\left ( d_{1} \right )trans_{x}\left ( l_{1} \right ) 0T1=rotz(θ1)transz(d1)transx(l1)

1 T 2 = r o t z ( θ 2 ) t r a n s x ( l 2 ) ^{1}\textrm{T}_{2}=rot_{z}\left ( \theta _{2} \right )trans_{x}\left ( l_{2} \right ) 1T2=rotz(θ2)transx(l2)

2 T 3 = t r a n s z ( d 3 ) ^{2}\textrm{T}_{3}=trans_{z}\left ( d_{3} \right ) 2T3=transz(d3)

3 T 4 = r o t z ( θ 4 ) ^{3}\textrm{T}_{4}=rot_{z}\left ( \theta _{4} \right ) 3T4=rotz(θ4)

  我们要求的 P P P 点是不是就是坐标系{4}的原点呢?它在基坐标系下如下表示呢?很简单把所有变换迭乘就可以了: P 0 = 0 T 1 ⋅ 1 T 2 ⋅ 2 T 3 ⋅ 3 T 4 ⋅ [ 0 0 0 1 ] P^{0}=^{0}\textrm{T}_{1}\cdot ^{1}\textrm{T}_{2}\cdot ^{2}\textrm{T}_{3}\cdot ^{3}\textrm{T}_{4}\cdot \begin{bmatrix} 0\\ 0\\ 0\\ 1 \end{bmatrix} P0=0T11T22T33T40001

  因此当我们测量到DH参数中各个变量的值以及已知机器人的结构参数时,只需要代入到上面的方程中,就可以求解末端点 P P P 在基坐标系下的坐标。

5. 总结

  这篇文章我们介绍了DH参数以及其物理意义,有些特殊的连杆如何建立坐标系没有进行相关介绍,比如连杆两个轴线平行/相交时如何建立坐标系。建立DH坐标系有哪些小技巧,这些我们将在下一篇文章进行讨论。

  由于个人能力有限,所述内容难免存在疏漏,欢迎指出,欢迎讨论。

下一篇:机器人正运动学(8)—— DH坐标系建立技巧
————————————————
版权声明:本文为CSDN博主「hitgavin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hitgavin/article/details/104442034

  • 10
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值