最近重新学习机器人方面的知识,想到一年以前在学校选修《机器人学技术基础》这门课的时候,老师虽然讲机器人的各个方面的知识都讲到了,但只是浮光绿影的的提到,并没有真正讲到深处,我的理解也没有更加深入,导致总是知道有这个知识点,但总是用起来不顺手,有时候还会完全迷惑。最近重新看了Graig的《机器人学导论》导论的中文版,里面对D-H参数的讲解比较详细,更重要的是举出了详细的案例。

  其实D—H参数是有两种标定方式的,一种是标准的D-H参数法,还有一种是改进的D—H参数法,大部分书上现在都用到的是改进的D-H法,但也有一些书上用的是标准的D-H法,但是D-H法只是一种对连杆的坐标描述,最后的结果往往相同的参数就会有相同的物理含义在里面。不同的书上使用不同表示方法往往会给看书的人带来不小的迷惑,我就有一段时间非常迷茫,自己后来干脆就不管什么标准的D-H法,就按照大部分书上使用的改进的D-H方法去标定,只要掌握一种方法并清楚里面参数的含义就能方便地列写参数表,进而写出机器人操作臂的运动变换方程。

  首先对连杆做一简单介绍,在机器人运动学中,所谓连杆就是具有一定运动学功能的刚性杆,这和《机械原理》中的构件有相似的性质,就是它是运动的最小单元,而且由于它本身的形状和大小会对运动有影响。至于刚性,就是在运动学阶段我们认为连杆受力不会发生变形(事实上机器人在操作臂在运动过程中受力情况复杂,一定会发生变形)。在机器人操作臂中,研究的内容主要是一系列连杆通过关节连接起来而组成的空间开式运动链。这是最早的现代机器人的模型,也是在工业中应用最广泛的机器人,就是我们常说的工业机械臂。另一个重要的概念就是关节,在这里关节就是将两个机械臂连接起来的部分,而这个连接不是固定连接,而是两个连杆之间只能发生有限的相对运动。比如一个连杆绕一个连杆的转动,或者一个连杆沿着另一个连杆的某一个方向平动,在常见的工业机器人中转动平动是最基本的也是最常见的运动,基本到基本上没有其它形式的运动了。

  好了,现在开始来研究我们的第一个研究对象---连杆,描述的连杆参数有两个,无论形状多么复杂的连杆,其实它在运动的能提供的运动学功能是可以用两个参数确定的,一个是连杆的长度a,另一个是连杆的转角α,下图为我们详细地解释了这两个参数的意义:

图片来源于《机器人学导论》,如图中所示,一个连杆两端连接着有两个关节,为了描述起来方便,我们规定连杆i左端的关节是i,这样做的好处是从基座为连杆0,而基座和连杆1之间的关节就是关节1,而确实关节1就是机器人的第一个关节,这样描述起来就会方便很多,一个n自由度的机械臂就有n个关节和n+1个连杆,算上基座0,就像我们在《机械原理》中将大地也作为一个构件一样的道理。对于图中的连杆i-1,其左边对应的关节轴i-1,右边对应的是关节轴i,两个关节轴之间的关系便由这个连杆确定,在三维空间中,描述两个关节轴线之间的位置关系用他们之间的距离和角度就可以了,图中ai-1就是两条空间直线的公垂线,在三维空间中总是可以找到两条直线之间的公垂线,如果他们平行则有无数条,如果他们异面,则有一条,如果他们相交,则公垂线就是一个点了,总之,关节轴线i-1和关节轴线i的距离是由连杆i-1来确定的。除了描述两条轴线之间的距离,我们还需要描述这两条轴线之间的夹角,夹角的定义是关节轴i-1绕着公垂线ai-1转动到和关节轴i平行是所转过的角度αi-1按照右手法则转动,公垂线ai-1方向定义为从轴i-1指向轴i。注意到在这种描述中,连杆长度a和连杆转角α都是下标为i-1的,这是因为我们连杆也是第i-1根连杆,是一致的。

  上面我使用了两个参数完全地将一个连杆的运动学特殊性描述出来了,接下来就需要思考如何描述相邻两个连杆之间的关系,两个连杆之间是通过一个关节连接的,我们很容易想到描述连杆之间的关系实际上反映的是这个关节轴的一些特性。继续看图说话:

上图中,连杆i-1和连杆i通过关节轴i相互连接,我们规定,沿着关节轴i的轴向,将连杆i-1的长度ai-1移动到和连杆i的长度ai的距离叫做连杆偏距di ,这个参数反映了两个连杆沿着轴i的距离。同时,我们从图中看到连杆i-1和连杆i的长度线并不共线,这说明这两条线之间存在夹角,我们规定绕轴i将长度线ai-1的延长线转动到和长度线ai 转过的角度叫做关节角θi, 关节角反映了两个连杆在关节轴处的夹角。通过连杆偏距和关节角就可以将两个相邻连杆之间的相对位置描述清楚。因此,对于一个连杆,需要有四个参数对其进行描述,两个参数描述连杆本身的特性,另外两个参数描述该连杆和上一个连杆之间的关系。其中连杆偏距di关节角θi是由关节决定的,反映关节的运动学特性。如果关节i是一个转动关节,那么连杆i-1连杆i之间沿着关节轴线i距离di就是一个定值,在设计好机器人中该值不会再改变,而θi会发生改变,因此θi称为关节变量,意思就是机器人在运动过程中它会发生变化。同样的,如果关节i是一个移动关节,那么连杆i-1连杆i之间的夹角θi就是一个定值,变化的是两个连杆沿着关节轴线的距离di,此时di被称为关节变量

  为了在引入数学上的描述,我规定们给连杆上附件上坐标系,我们规定,在每个连杆上固连一个坐标系,对应于连杆i的坐标系就是{i},规定坐标系{i} 的Zi轴沿着关节轴线i,坐标原点在长度线ai和关节轴线的交点处,沿着长度线ai 由关节轴线i指向关节轴线i-1 是Xi的正方向。Yi按照右手螺旋定则确定。连杆坐标系表示在图中如下所示:

  当按照上述的要求定义好坐标系之后,四个连杆参数可以有在坐标系中的描述:

   ai = 沿着Xi 轴从Zi 移动到Zi+1的距离。

  αi = 绕着Xi轴从Zi转到Zi+1的角度。

  di = 沿着Zi轴从Xi-1到Xi的距离。

  θi = 绕着Zi轴从Xi-1到Xi的角度。

  现在,我们可以对一个机器人操作臂进行描述了,首先看一个平面三连杆机械臂。

   

  如上两图所示,对于一个平面三连杆机械臂,规定其Z轴垂直于纸面向外,可以得到如图的坐标表示方法。

  下面列写其D-H参数表:

  

  从上表就可以列写出机器人的运动学方程,可以说机器人(机械臂)的运动分析很大一部分工作是对机械臂进行参数标定。值得注意的是,参数标定方法不唯一,不同的人有不同的参数标定方式。

机器人操作臂运动学入门一--D-H参数标定的更多相关文章

  1. tar -h 参数

    1.1.1 tar命令参数-h,-h参数会把软链接指向的文件也打包. [root@ob2 mytmp]# ll total 8 -rw-r--r--. 1 root root 910 Aug 12 2 ...

  2. Python入门篇-函数、参数及参数解构

    Python入门篇-函数.参数及参数解构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.函数概述 1>.函数的作用即分类 函数 数学定义:y=f(x) ,y是x的函数,x ...

  3. V-rep学习笔记:机器人逆运动学解算

    IK groups and IK elements VREP中使用IK groups和IK elements来进行正/逆运动学计算,一个IK group可以包含一个或者多个IK elements: I ...

  4. V-rep学习笔记:机器人逆运动学数值解法(Cyclic Coordinate Descent Method)

    When performing inverse kinematics (IK) on a complicated bone chain, it can become too complex for a ...

  5. V-rep学习笔记:机器人逆运动学数值解法(Damped Least Squares / Levenberg-Marquardt Method)

    The damped least squares method is also called the Levenberg-Marquardt method. Levenberg-Marquardt算法 ...

  6. V-rep学习笔记:机器人逆运动学数值解法(The Pseudo Inverse Method)

    There are two ways of using the Jacobian matrix to solve kinematics. One is to use the transpose of ...

  7. V-rep学习笔记:机器人逆运动学数值解法(The Jacobian Transpose Method)

    机器人运动学逆解的问题经常出现在动画仿真和工业机器人的轨迹规划中:We want to know how the upper joints of the hierarchy would rotate ...

  8. springMVC第一天——入门、整合与参数绑定

    大纲摘要: 1.Springmvc介绍 2.入门程序 3.Springmvc架构讲解 a) 框架结构 b) 组件说明 4.Springmvc整合mybatis 5.参数绑定 乱码问题解决 a) Spr ...

  9. 一起入门python7之函数参数

    上一节课简单的讲了一下函数.那么今天来给大家讲一下函数参数.用案例说话哈.上一节课只是让大家有比较简单的了解,那么这节我们来细化一下哈.>>>def hello(x):        ...

随机推荐

  1. jQuery( )方法的构建原理

    jQuery中最常用方法的就是jQuery( ),也即$( ). jQuery( )是一个函数调用,调用的结果是返回了一个jQuery实例对象. 编写组件通常的做法是将组件封装成一个对象,需要用的时候 ...

  2. C# String 前面不足位数补零的方法

    int i=10;方法1:Console.WriteLine(i.ToString("D5"));方法2:Console.WriteLine(i.ToString().PadLef ...

  3. javascript立即执行函数

    javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花;当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解.  ( ...

  4. redis3.2 Jedis java操作

    package com.util; import java.util.HashSet; import java.util.List; import java.util.Map; import java ...

  5. Ubantu Linux 环境下编译c++程序

    先在文件中新建一个a.cpp文件,在里面编写程序, 然后打开终端输入下面命令即可; $ g++ a.cpp -o b ///编译a.cpp 然后把编译之后的.exe文件存入b中 $ ./b ///执行 ...

  6. 理解AX InventTrans的几种状态

    接触AX一段时间后,发现InventTrans表非常重要.它可以说是物流模块的核心,开发BI报表的话必须依赖此报表.   先来看官方释义: InventTrans表包含了库存交易的信息.当销售/采购订 ...

  7. golang map getkeys

    golang 获取map的keys package main import "fmt" import "reflect" func main() { abc : ...

  8. CSS之viewport 1

    在这个迷你系列的文章里边我将会解释viewport,以及许多重要元素的宽度是如何工作的,比如<html>元素,也包括窗口和屏幕. 这篇文章是关于桌面浏览器的,其唯一的目的就是为移动浏览器中 ...

  9. Java web学习filter (1)

    一.概念:Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源: 例如Jsp, Servlet, 静态图片文件 ...

  10. lua table integer index 特性

    table.maxn (table) Returns the largest positive numerical index of the given table, or zero if the t ...