分享

DH建模的具体步骤

 周伟资料室 2019-04-10

(2018年11月21日更新)

D-H)建模方法是由Denavit和Hartenberg 提出的一种建模方法,主要用在机器人运动学上,这种方法在每个连杆上建立一个坐标系,通过齐次坐标变换来实现两个连杆上坐标的变换,在多连杆串联的系统中,多次使用齐次坐标变换,就可以建立首末坐标系的关系。学习DH建模的主要知识点如下:
1、会齐次坐标变换(这是机器人运动学的基础知识)
2、知道DH建模中α,a,d,θ这四个量对应于连杆上的那些地方。
3、对于已知的连杆机构,会列些DH参数表。
4、会列些最终坐标变换的等式,建立机械臂末端与基座的坐标关系。

DH建模分原版和修正版,修正版克服了原版建模中的一些问题,比较常用,本文介绍修正版DH建模方法

预备知识:
1、齐次坐标系
齐次坐标系的定义可以参阅百度百科,核心就是n维向量的n+1维表示方法,比如,平面的一个点:(2,3),齐次坐标表示为(2w,3w,w),w为非零实数,同理,对于空间中某点的坐标(x,y,z),齐次坐标可表示为(xw,yw,zw,w),若令w取1,就是(x,y,z,1),这就是三维坐标的齐次坐标表示方法(不唯一)。
齐次坐标表示在计算机图学和机器人学中有着广泛的应用,优点说出来都很难懂,但在机器人学领域,主要优点就是将旋转变换和平移变换统一成了4×4的矩阵运算,任何一种复合变换(旋转与平移可以同时存在),都可以表示成一个4×4的齐次变换矩阵。

2、齐次坐标变换矩阵
若不使用齐次坐标表示法,对于三维空间下的平移,可以在原有坐标的基础上加一个向量这么表示:Pi=Pj+Pij,下图中,若P点在j坐标系坐标为(1,1,1),i到j的平移向量为(0,15,0),则P点在i坐标系下的表示为(1,16,1),应该很好理解吧。
这里写图片描述

若要表示旋转,稍微复杂点,由i系转到j系,要考虑到轴与轴之间的多个夹角,最终得到一个旋转姿态矩阵R,表达式里看着有好多夹角余弦,其实若只绕着某个轴转,很多值都会变得简洁。
这里写图片描述
这里写图片描述

上面说的是不使用齐次坐标的情况,若使用齐次坐标,就是将旋转与平移组合在一起,构建一个4*4的齐次变换矩阵,齐次变换矩阵长相如下所示:
这里写图片描述

仔细看一下,就是将上面说的R和P组合在了一起,右下角填了一个1,其余地方补0,这就是齐次变换矩阵。当看到一个44的齐次变换矩阵时,你一眼就能知道左上角的33表示旋转,右边一列表示平移,下面一行是固定写法,以后再说变换时,就不再把旋转与平移割裂开了,这一个矩阵就表示综合的变换。

上面是预备知识,下面才是D-H建模正题。

现在的机械臂很多都是旋转关节与滑动环节的链式组合,假设你知道机械臂各个连杆的尺寸,但各个关节都在动,你如何确定末端的位置?DH建模要解决的根本问题就是建立机械臂末端与基座位姿位姿关系的问题。

首先,需要知道DH建模里的一些基本概念,若对下述概念模棱两可的话,后续建模的关系根本理不清,所以,请看图一个一个认识。
这里写图片描述

这张图表示了任意两个关节间的位姿关系,机械臂的外观结构可以多种多样,但剖析本质,都可以表示成这样的一组相邻关节。要想知道末端与基座间的位姿关系,需要先了解相邻两关节的关系。之后的分析,都建立在当前的套路上。

请将当前关节标号定位i-1,下一个关节定位i。有些教程将当前关节定位i,下一个是i+1,这样后续的分析中角标都会于此不一样,请注意区分。
四个基本概念:
(1)连杆i-1的长度。是指图中a(i-1)所示的距离。表示i-1关节的轴线与i关节的轴线的垂直距离。
(2)连杆i-1的扭角。是指图中α(i-1)所示的角度。空间两条直线即使不相交也存在夹角,那么,扭角α(i-1)就是关节i-1与关节i轴线的夹角。
(3) 连杆i 相对于连杆i-1的偏置di。下图中的di就是偏置。我们来看i关节的轴线,它与前后两个关节轴线各有一条公垂线(红线,下一个关节虽没画出来),这两条公垂线的距离就是连杆i相对连杆i-1的偏置。(请看清楚连杆i-1和连杆i的位置,蓝字)。
这里写图片描述

(4) 关节角θi。连杆i相对于连杆i-1绕i轴的旋转角度,图中右下角的θi,其实就是上图两条红色公垂线的夹角。

上述两个图应该说清了两个关节的一般位置关系,涉及的4个基本概念需要详细看清,a(i-1) ,α(i-1) ,di ,θi 就是后续DH建模表的四个要素,每个角标都要看清。

其次,需要知道各个坐标系建立的原则。为每个关节建立一个与之对应的坐标系,才能计算它们之间的相互转换,而各个坐标系的建立都要遵守一定规则,才能用后面矩阵连乘的方法进行转换。这里建立坐标系,就是要确定7个要素,确定x,y,z所在轴线,x,y,z的方向,以及原点的位置,这几个要素其实是有关联的,比如,你总得用右手系来建立坐标系吧,所以,已知其中几条信息,有些信息就随之确定了。

这里用标号0表示与基座固连的坐标系,用标号n表示末端的坐标系,i就是中间各个关节的坐标系标号。
这里写图片描述

上图简单示意了一下各个坐标与关节的标号关系,但各坐标的实际位置与姿态可没有那么简单,注意一下,标号0就是指基座,有时它可能与第一个关节坐标系相重合,但还是不能忽略它。

下面3个加粗标题就是DH建模的主要规则:

先建立中间坐标系{i},后两端坐标系{0}、{n}

坐标系{0}和{n}的规定
Z0轴沿关节轴1的方向,关节变
量1为零时, 坐标系{0}与{1}重合
关节1是旋转关节时, d0=0,
关节1是移动关节时, θ0=0
Zn轴沿关节轴n-1的方向,关节变
量n-1为零时, 坐标系{n-1}与{n}重合
关节n-1是旋转关节时, dn=0,
关节n-1是移动关节时, θn=0

建系的原则
1)确定Z轴:找出关节轴线及关节转向采用右手定则确定Z;
2)确定原点:如果两相邻轴线Zi与Zi+1不相交,则公垂线与轴线i的交
点为原点,注意平行时原点的选择应使偏置为零;如果相交则交点
为原点,注意:如果重合则原点应使偏置为零;
3)确定X轴:两轴线不相交时,X与公垂线重合,指向从i到i+1;
若两轴线相交,则X是两轴线所成平面的法线X= - +Zi × Zi+1 ;
注意:如果两轴线重合,则X轴与轴线垂直且使其他连杆参数为零;
4)按右手定则确定Y ;
5)当第一个关节变量为零时,规定{0}与{1}重合,对于
末端坐标系{n},原点与X任选,希望坐标系{n}使杆参数尽量为零。

来结合具体的一个模型看看:
这里写图片描述

上图示意了一个三自由度机械臂,要对其进行DH建模,就是要建立{0}{1}{2}{3}{4}个坐标系,其中,1、2、3对应三个关节,0号对应基座,4号对应末端,对好上述原则一条一条过。
(1)找z轴。
关节轴线就是,于是图上红线Z123就可以标出来了,但指向先别着急定。
(2)定原点。
每个坐标系都需要定原点,{0}和{4}先别管,先看{1}{2}{3}号坐标系,因为中间的约束条件多,容易确定,这里看{2}号坐标系:z2和z3轴线不向交,公垂线与z2的交点就是{2}号坐标系的原点,是不是和“原则”里说的一样?(此时一不小心x2的轴线也提前定下来了,就是沿着连杆2)

再来看{1}号的原点,z1和z2平行,此时,也是找公垂线,但公垂线与两轴相交时位置不唯一,此时要求“偏置为0”,{2}号坐标系原点都定了,为了使{1}{2}间偏置为零,{1}的原点也是确定的,就在关节中心上(此时x1轴线也提前定了下来)。

来看{3}号坐标系的原点。之前只确定了{3}号Z轴的位置延旋转轴,但原点可不要想当然就在3号关节的中心,要按照“原则”来。z2与z3有一条唯一相交的公垂线x2(如图),z3与z4轴线重合,有无数条相交的公垂线,要让这两边的公垂线距离最短,即“偏置=0”,此时只能让{3}号坐标系的原点定在连杆拐角处,对比一下,这个原点并不在3号关节的中心(黄色关节)。

理一下,现在定下来的只是z1、z2、z3的轴线位置和原点位置。

来看{0}号坐标系,我们使用坐标系{0}和{n}的规定,z0沿着关节1的轴线方向,所以z0与z1轴线重合,{0}号系是固定在基座的,所以原点是确定的,就在第一个关节中心,又因为1号关节是旋转关节,所以要看关节变量d1是否为0,显然,d1=0(因为关节1与基座本身就是重合的,x1和x0距离为0),所以,{0}坐标系与{1}号坐标系完全重合,只要1号系定了,0号系就能完全确定。

来看{4}号坐标系,4号系是固定在末端的,所以原点定在末端(此时的末端就是关节3的中心),z4轴沿着关节3的旋转轴向,此时可以发现,{4}号系和{3}号系存在一个偏置,因为{3}号系的原点和{4}号系的原点距离相差一段距离(图中的d2),也就是说,只要{3}号系定了,{4}号系就是沿着z轴偏移d2。

再来理一下,现在z0,z1,z2,z3,z4的轴线和原点位置都定了。

(3)现在安照建系的原则3来定x轴。

还是从{2}号系开始吧。z2与z3不重合,x轴沿着公垂线,由2指向3,所以x2很明确。

{1}号系也是一样,z1与z2也不重合(平行),x轴沿着公垂线,由1指向2,所以x1也很明确。
{3}号系稍微不一样,z3与z4重合,此时为了使其他连杆参数为0,兼顾{2}系和{3}系,x3与x2应该重合且指向一致,若不一致,必然会引入夹角,这不是给自己找麻烦么。

理一下,此时x1,x2,x3的轴线与方向都确定了。

(4)下面该用右手定则确定y了。
有人可能会发现,严格来说,现在z轴的轴线确定了,可指向并没有确定。其实这里只要按照一般习惯指定一个,其余的都会随之确定。比如,我们从z2开始,图画成这样,最好就把z2指向上吧(看着比较方便),那么,z1也就应该上向上。再来看z3,最好让z3指向机械臂的伸展方向(看着比较方便),因此z4的指向也确定了。此时用右手定则,y的指向是一定的,不会有歧义。

最终的坐标系就和上图所示的坐标系相一致,每一步的确定都请参照建系的原则,其实中间有些环节熟练之后可以一步到位,有些中间坐标系的位置你也可以不这样建,比如上例{3}系{4}系其实也可以完全重合,只要你能搞清楚系与系之间的转换关系,但DH建模法肯定是一条比较规范的方法,可以保证你见得坐标系别人能看懂,并且避免一些不易察觉的错误。

上述原则最好能记住,若记不住,建模时也得回头反复校对,很有可能一个坐标原点没选对,或者某个轴方向指错了,导致建立了一个错误的坐标转换关系。

还没完,上面只是画了画坐标系,下面需要来填一张DH参数表。这是便于你后续运算用的。
这里写图片描述
这是与上例对应的已经填好的DH参数表,下面的目标就是掌握如何构造并填好这样一张表。

表头分5栏,这是固定写法。需要确定之前的一些连杆参数,这些参数表征了各个坐标系间的变换。

i从1到末端,这里末端坐标系编号为4,所以i到4。

先填i=1这一行,i=1时,就是要去找出a0,α0,d1和θ1。回顾一下,a是指连杆长度,α是指扭角,d是指偏置,θ是指关节角。
0号基座坐标系与1号坐标系重合,所以a0=0,α0=0,d1=0,而关节1是可以转动的,所以θ1是一个变量,初始转交可以认为是0度,所以直接写θ1(0),表示这是一个变量,括号内填初始状态值。

当i=2时,去找a1,α1,d2和θ2。a1是连杆1的长度,是图中已知数据,α1是z1与z2的夹角,z1与z2平行,所以α1=0,d2是x1与x2的距离,x1与x2共线,所以d2=0,关节2是转动关节,x1与x2的夹角是变量,初始夹角为0,所以记为θ2(0)。

当i=3时,找a2,α2,d3和θ3。a2是连杆2的长度,已知。α2是z2与z3的夹角,注意是从{2}号系变到{3}号系,当你用右手握住x2并将拇指指向与x2保持一致时,需要逆着握拳方向旋转{2}号坐标系,才能使之与{3}号系重合,所以α2=-90°。d2=0,θ3是变量,不在重复。

当i=4时,{3}系到{4}系只存在一个偏置,图中已知的d2。

这样,DH参数表就填完了,关键就是正确找出a,α,d,θ这四个参数在每次相邻坐标系变换是的值。

到此完成了一大半。

但不要忘了,最终我们是要找出首末坐标系的齐次变换矩阵,而不是仅仅画个表。

下面的内容涉及到机器人的位姿描述与坐标变换,这里只展示了结论,其实每一个式子都有推导。
从{0}系到{4}系的齐次变换矩阵记为这里写图片描述,它表示{4}号坐标系相对于{0}号坐标系的位姿,这里写图片描述
表示{0}到{4}的矩阵变换可以分解为每一步的矩阵连乘。根据DH参数表,可以方便的写出每一步的齐次变换矩阵(见文章结尾处11月21日补充内容),DH参数表的每一行对应一个齐次变换矩阵。如下图:
这里写图片描述这里写图片描述这里写图片描述这里写图片描述

根据之前预备知识里所讲到的,因为每次机器人关节旋转都是某个单一轴在转动,所以很多夹角余弦值都是特殊值(0或1)。这些矩阵带入表达式这里写图片描述,就能得到T04,其中有些值是未知的,这些值就是要求解的关节变量,求出关节变量,也就可以实现机械臂的控制了。

--------------2018年11月6日更新内容----------------------

我们用matlab机器人工具箱绘制该机械臂。
首先,按照4行DH参数表绘制,此时相当于有4个关节,但最后一个关节角不能旋转,假设连杆长度偏置都为20

L1=RevoluteMDH('a',0,'d',0,'alpha',0);
L2=RevoluteMDH('a',20,'d',0,'alpha',0);
L3=RevoluteMDH('a',20,'d',0,'alpha',-pi/2);
L4=RevoluteMDH('a',0,'d',20,'alpha',0);
bot = SerialLink([L1 L2 L3 L4 ], 'name', 'csdn');
bot.plot([0 0 0 0]);

绘制出的机械臂如下图:
在这里插入图片描述
图中显示了4个关节(红色圆柱体),但请注意,第四个不能转,因为三关节电机是前一个圆柱体,4关节相对于3关节只是偏置。

若将3号坐标系和4号坐标系合并,我们也使用机器人工具箱画一下。

L1=RevoluteMDH('a',0,'d',0,'alpha',0);
L2=RevoluteMDH('a',20,'d',0,'alpha',0);
L3=RevoluteMDH('a',20,'d',20,'alpha',-pi/2);
bot = SerialLink([L1 L2 L3] , 'name', 'csdn');
bot.plot([0 0 0 ]);

在这里插入图片描述
没办法,竟然画成了这样。但仔细想一想上下两个图应该是一样的。
首先,机器人工具箱画不出弯的连杆,所以第二幅图中,要想表达一个弯的连杆,机器人工具箱采用了它自己的画法,可以看连杆的投影,已经拐弯了。
其次看末端坐标系,上下两图的末端坐标系方位是一样的,这就表明在关节角[0 0 0]的输入下,3行DH参数表和4行DH参数表所得到的机械臂正解是一致的,你可以多试几个输入再次看看,因此,这两幅图的描述的是同一个机械臂,建3个坐标系与建4个坐标系是等价的。

3行DH参数模型,输入[0 pi/2 0]
在这里插入图片描述
4行DH参数模型,输入[0 pi/2 0 0]
在这里插入图片描述
--------------2018年11月21日更新内容----------------------

关于如何写出T(i-1->i)的变换矩阵。
两种方法,第一种方法比较麻烦,就是通过本文开头的预备知识中,找到两个坐标变换之间各个坐标轴之间的夹角余弦。

第二种方法才是正常的方法:DH建模法已经给出了

T(i-1->i)的变换通式,在这里插入图片描述
变换通式中包含了DH参数,将每行DH参数带入就能求出每一步T(i-1->i)的具体表达式。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多