(2018年11月21日更新) D-H)建模方法是由Denavit和Hartenberg 提出的一种建模方法,主要用在机器人运动学上,这种方法在每个连杆上建立一个坐标系,通过齐次坐标变换来实现两个连杆上坐标的变换,在多连杆串联的系统中,多次使用齐次坐标变换,就可以建立首末坐标系的关系。学习DH建模的主要知识点如下: DH建模分原版和修正版,修正版克服了原版建模中的一些问题,比较常用,本文介绍修正版DH建模方法 预备知识: 2、齐次坐标变换矩阵 若要表示旋转,稍微复杂点,由i系转到j系,要考虑到轴与轴之间的多个夹角,最终得到一个旋转姿态矩阵R,表达式里看着有好多夹角余弦,其实若只绕着某个轴转,很多值都会变得简洁。 上面说的是不使用齐次坐标的情况,若使用齐次坐标,就是将旋转与平移组合在一起,构建一个4*4的齐次变换矩阵,齐次变换矩阵长相如下所示: 仔细看一下,就是将上面说的R和P组合在了一起,右下角填了一个1,其余地方补0,这就是齐次变换矩阵。当看到一个44的齐次变换矩阵时,你一眼就能知道左上角的33表示旋转,右边一列表示平移,下面一行是固定写法,以后再说变换时,就不再把旋转与平移割裂开了,这一个矩阵就表示综合的变换。 上面是预备知识,下面才是D-H建模正题。 现在的机械臂很多都是旋转关节与滑动环节的链式组合,假设你知道机械臂各个连杆的尺寸,但各个关节都在动,你如何确定末端的位置?DH建模要解决的根本问题就是建立机械臂末端与基座位姿位姿关系的问题。 首先,需要知道DH建模里的一些基本概念,若对下述概念模棱两可的话,后续建模的关系根本理不清,所以,请看图一个一个认识。 这张图表示了任意两个关节间的位姿关系,机械臂的外观结构可以多种多样,但剖析本质,都可以表示成这样的一组相邻关节。要想知道末端与基座间的位姿关系,需要先了解相邻两关节的关系。之后的分析,都建立在当前的套路上。 请将当前关节标号定位i-1,下一个关节定位i。有些教程将当前关节定位i,下一个是i+1,这样后续的分析中角标都会于此不一样,请注意区分。 (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}的规定 建系的原则 来结合具体的一个模型看看: 上图示意了一个三自由度机械臂,要对其进行DH建模,就是要建立{0}{1}{2}{3}{4}个坐标系,其中,1、2、3对应三个关节,0号对应基座,4号对应末端,对好上述原则一条一条过。 再来看{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也很明确。 理一下,此时x1,x2,x3的轴线与方向都确定了。 (4)下面该用右手定则确定y了。 最终的坐标系就和上图所示的坐标系相一致,每一步的确定都请参照建系的原则,其实中间有些环节熟练之后可以一步到位,有些中间坐标系的位置你也可以不这样建,比如上例{3}系{4}系其实也可以完全重合,只要你能搞清楚系与系之间的转换关系,但DH建模法肯定是一条比较规范的方法,可以保证你见得坐标系别人能看懂,并且避免一些不易察觉的错误。 上述原则最好能记住,若记不住,建模时也得回头反复校对,很有可能一个坐标原点没选对,或者某个轴方向指错了,导致建立了一个错误的坐标转换关系。 还没完,上面只是画了画坐标系,下面需要来填一张DH参数表。这是便于你后续运算用的。 表头分5栏,这是固定写法。需要确定之前的一些连杆参数,这些参数表征了各个坐标系间的变换。 i从1到末端,这里末端坐标系编号为4,所以i到4。 先填i=1这一行,i=1时,就是要去找出a0,α0,d1和θ1。回顾一下,a是指连杆长度,α是指扭角,d是指偏置,θ是指关节角。 当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或1)。这些矩阵带入表达式 --------------2018年11月6日更新内容---------------------- 我们用matlab机器人工具箱绘制该机械臂。
绘制出的机械臂如下图: 若将3号坐标系和4号坐标系合并,我们也使用机器人工具箱画一下。
3行DH参数模型,输入[0 pi/2 0] 关于如何写出T(i-1->i)的变换矩阵。 第二种方法才是正常的方法:DH建模法已经给出了 T(i-1->i)的变换通式, |
|