ROS系统MoveIt玩转双臂机器人系列(五)--浅议机器人运动学与D-H建模

一、概述

  机器人运动学研究的是机械臂各个连杆之间的位移关系、速度关系和加速度关系。比较经典的一本书推荐大家读读熊有伦的《机器人技术基础》下载网址在这。本篇博文将从刚体的位姿描述讲起,逐步过渡到D-H法运动学建模的方法与步骤,结合前几篇博客所树的Rob机器人的手臂建立D-H运动学模型,并编写一个逆运动学运动学求解的程序。

  (1)位姿描述

  我们知道,刚体在世界坐标系里需要通过位置和姿态两个维度来描述。首先,位置描述很容易理解,就是坐标,例如点P的位姿通过坐标Px,Py,Pz来描述,如下所示。

  目前它是三维形式,但是我们需要在其下面添加一维,使其变为四维形式,如下所示,这就是齐次坐标,多增加的这一维 ω 称为比例因子,这里取1。

  姿态的描述的描述相对复杂一些,它表征的是刚体相对于世界坐标系的旋转情况,我们首先需要在刚体上添加一个坐标系,用这个坐标系的姿态来代表刚体的姿态,如图一所示,在世界坐标系中的刚体,我们建立坐标系X‘,Y‘,Z‘,然后分别额在这个坐标系上取单位失向量n,o,b。

图1

  刚体上的每个坐标轴 X‘,Y‘,Z‘ 都和世界坐标轴 X, Y, Z 之间在空间上存在夹角,我们以这些夹角为基础对其姿态进行描述,便得到下面这个式子,矩阵 R 就是刚体相对于世界坐标系的姿态描述。此外还有其他的描述方法,比如欧拉角描述方法,四元数描述方法等。

  我们将上面的 R 矩阵由三行三列的矩阵变换为四行三列的矩阵,最后一行补零,就得到了刚体姿态的其次矩阵,然后在将位置齐次矩阵加入进来组成四行四列的矩阵,就是刚体位姿描述的整体矩阵:T(也可以称为转换矩阵),如下式:

  我们也可以将其理解为这是相邻的两个坐标系之间的转换关系或相对关系,只是这个相对关系通过位置和姿态两个维度来描述的。我们的机械臂是由一系列杆件和运动关节组成,如果我们以一定的规则在机械臂的关节处建立坐标系,就得到一系列的坐标系,如图2所示,如果我们又知道这一系列坐标系中每相邻两个的转换关系(即转换矩阵),那么通过推导我们就知道了首位两个坐标系之间的转换关系了,从而就可以实现机械臂的运动学描述了。

图2

  

  (2)正逆运动学

  我们知道机器人运动学研究的是连杆之间的位移关系、速度关系和加速度关系,它又分为正运动学和逆运动学。

  正运动学:知道机械臂各个关节的关节变量(如每个转动关节转了多少度,移动关节移动了对少距离)推导出末端执行器相对于世界坐标系的位姿关系(坐标系n相对坐标系0)。(解决的是我在哪的问题)

  逆运动学:知道末端执行器相对于世界坐标系的位姿关系(坐标系n相对坐标系0),推导出要到达这个位姿械臂各个关节的关节变量(如每个转动关节需要转多少度,移动关节需要移动多少距离)。(解决的是如何到那的问题)

、D-H法

  通过第一部分我们就可以分析知道,所谓的机器人运动学建模通俗讲分为以下几个步骤:

  1. 以一定的规则在机械臂上创建一系列的坐标系。

  2. 通过这些坐标系中每相邻两个坐标系之间的关系推导出最后一个坐标系(坐标系n)相对于第一个坐标系(坐标系0)的转换关系(转换矩阵)。

  3. 通过这个转换关系获得机械臂正运动学矩阵。

  4. 通过正运动学矩阵获得逆运动学的求解方法。

  具体以什么样的规则创建坐标系?如何才能快速获得两个相邻坐标系之间的转换关系?如何求取逆运动学解?这一些列问题早在1995年两位前辈就给出了答案(膜拜,经典的东西往往经久不衰),它们就是 Denavit 和 Hartenberg,下面我们一步步看看它们如何解决这些问题的。

(1)描述连杆和连杆连接的参数

  上述两位大师将相邻两个连杆(刚体)之间的关系简化成4个参数来描述,其中另个参数用来描述连杆,两个参数用来描述两个连杆的连接关系,先来说说描述连杆的两个参数:ai-1 和 αi-1 ,如图3所示。

图3

  Link length 连杆长度 ai-1 ,关节轴 i-1 和关节轴 i 之间的公垂线(图3红色直线)的长度ai-1。

  Link twist   连杆转角 αi-1,假设作一个平面,并使该平面与两关节轴之间的公垂线垂直(图3粉红色平面),然后把关节轴 i-1 和关节轴 i 投影到该平面上,在平面内轴 i-1 按照右手法则转向轴 i ,测量两轴角之间的夹角为αi-1.

  再看一下描述两个连杆的连接关系的两个参数 di 和 θi,如图4所示。

图4

  link offset 连杆偏距 di,相邻两个连杆之间有一个公共的关节, 沿着两个相邻连杆公共法线(图4两条黄线)的距离可以用一个参数描述为连杆偏距di。(当 i 为移动关节时,连杆偏距为一变量)

  joint angle 关节角 θi, 两个相邻连杆的两条公共法线(图4两条黄线)绕公共轴线(图4红色轴线)旋转的夹角(图4蓝色夹角) θi。

  用这四个参数就可以完成相邻两个连杆(刚体)之间的关系的描述。

(2)在机械臂上建立坐标系

  Denavit 和 Hartenberg 确定了连杆关系的描述方法之后,又制定了坐标系的建立规则,长坐标系{0}到坐标系{n}的确定步骤如下:

  a. 确定关节轴,并画出轴的延长线。

  b. 找出关节轴 i -1 和 i 的公垂线(图3红色直线)关节轴 i -1 的交点 ,作为坐标系 i-1 的原点 Oi-1。

  c. 规定 Zi-1 的指向是沿着第 i-1 个关节轴。

  d. 规定 Xi-1 轴的指向是沿着轴 i-1 和 i 的公垂线(图3红色直线)的方向,如果关节轴 i-1 和 i 相交,则Xi-1轴垂直于关节轴 i-1 和 i 所在的平面。

  e. Yi-1轴的方向由右手定则确定 Yi-1 =  Zi-1 × Xi-1 。

  此外,对于坐标系{0} ,Z0轴沿着关节轴1的方向,当坐标系{1}的关节变量为0时,设定参考坐标系{0}与{1}重合,且a0=0, α0=0,当关节1为转动关节,d1=0;当关节1为移动关节,θ1=0。

  坐标系{n} 通常规定:   

    对于转动关节 n,设定θn=0,此时 Xn 和 Xn-1 轴的方向相同,选取坐标系{n} 的原点位置,使之满足 dn=0;
    对于移动关节 n, 设定Xn轴的方向使之满足θn=0,当dn=0时,选取坐标系{n} 的原点位于Xn-1轴与关节轴n的交点位置。

 (3)根据机械臂上所建立的坐标系确定描述连杆和连杆连接的参数

  建立完坐标系以后,就需要根据坐标系来确定小节(1)中所说的描述连杆和连杆连接的四个参数,由于我们是根据特定规则来建立的坐标系,所以我们很容易得到四个参数,得到的方法如图5所示。

图5

  三、Rob手臂的D-H法建模

  下面我们解结合前面博文所介绍的Rob机器人的一个手臂,讲解如何在它的手臂上建立坐标系,获得描述参数,最后得到运动学关系,首先手臂的模型抽象如下图6所示。

图6

  为了方便起见,我们让手臂抬起来伸直,如图7所示,这样方便我们建立坐标系,然后我们按照第二部分的(2)小节介绍的方法建立坐标系,首先绘制关节轴线(关节转轴) i1 到 i5(图7中绿色虚线),然后根据规则确定原点 O1 到 O6的位置,然后确定每个坐标系Z轴的方向(图7红色轴,和关节轴线共线),然后确定各个坐标系的X轴,最后根据右手定则确定各个坐标系的Y轴,此外各个连杆的物理尺寸如图7中的蓝色虚线所标识。

图7

  一旦确定了坐标系,我们根据第二部分的(3)小节中图5所示的法则就可以快速确定每个连杆(坐标系)之间的描述参数,如下表所示。

  至此其实我们已经得到了Rob手臂上的坐标系{0}到坐标系{6}之间每两个相邻坐标系的转换关系了,就是上表中 i 行的数据。但是拿到这些数据怎么转换成第一部分的(1)小节中所介绍的转换矩阵 T 呢?如何根据两个相邻坐标系的转换关系得到坐标系{6}到坐标系{0}的转换关系呢?又如何求取逆运动学解呢?这几个问题在下一篇博客中揭晓,并给出逆运动学求解的C++源代码。

<-- 本篇完 -->

原文地址:https://www.cnblogs.com/shawn0102/p/9383701.html

时间: 2024-10-10 01:45:41

ROS系统MoveIt玩转双臂机器人系列(五)--浅议机器人运动学与D-H建模的相关文章

ROS系统MoveIt玩转双臂机器人系列(六)--D-H逆运动学求解程序(C++)

注:本篇博文全部源码下载地址为:Git Repo. 1.  源码是在 Ubuntu14.04 + Indigo 环境下编写. 一.转换矩阵 经过上一篇博客介绍,我们已经获得了Rob一个手臂的D-H参数表,如上表所示,我们要把这些参数转换成相邻坐标系的转换矩阵,D和H两位老前辈已经推导出通用公式了,通用公式如图1,其中cθi = cos(θi) ,sθi =  sin(θi ).这是一个4x4的矩阵,它表征了相邻两个坐标系的位置和姿态两个维度的转换关系,具体说明见上一篇博文. 图1 套用图1中的公

ROS系统玩转自主移动机器人(5)-- ROS系统建模

注:本篇博文全部源码下载地址为:Git Repo传送门. 1. 下载到本地后解压到当前文件夹然后运行:catkin_make 编译. 2. 源码是在 Ubuntu14.04 + Indigo 环境下编写. 前面博文已经介绍了机器人平台的机械结构设计.嵌入式硬件平台的搭建等内容,从本片开始介绍本开源机器人平台ROS系统的相关程序,主要有: ROS系统建模: Gazebo仿真: ROS系统机器人SLAM框架: SLAM中Gmapping和地图构建: SLAM中AMCL算法: 机器人正逆运动学: 路径

ROS系统玩转自主移动机器人(3)-- 开源机器人结构介绍

本机器人机械结构设计相关的所有设计文件下载地址为:传送门  其中包含:三维造型设计文件(所有零件+装配效果)(tips:基于Solidworks 2015 绘制) 非标加工的零件图纸(PDF格式+Dwg格式) 本开源机器人项目首要目的是让感兴趣的朋友花很少的钱就能玩转功能简单的机器人,了解机器人的搭建过程并学习ROS系统(如机器人SLAM),因此结构设计的目标和原则很明确:设计一款轮式机器人,满足功能要求的基础上尽量做到成本低廉,总之花小钱多办事. 例如,最终笔者在非标准金属加工件的的总投入是1

ROS 学习系列 -- 使用urdf创建机器人模型在Rviz中3D观察 之一 joint 使用

我们接着上文  ROS 学习系列 -- 使用urdf创建机器人模型在Rviz中3D观察 之一 link使用继续完成创建带四个可以转动轮子的双层小车. 一 建立可以转动的joint <span style="font-size:18px;"><?xml version="1.0"?> <robot name="sp1s"> <link name="base_link"> <v

【探索之路】机器人篇-ROS系统并创建工作空间和项目

在ROS官网,已经给出了详细的教程.下面我就般一下砖,把相应的操作写到这里.官方网址:http://wiki.ros.org/cn/ 安装ROS系统 indigo在ubuntu上的安装教程.官网:http://wiki.ros.org/cn/indigo/Installation/Ubuntu 1. 添加sources.list 配置你的电脑使其能够安装来自 packages.ros.org的软件. ROS Indigo 仅 支持 Saucy (13.10) 和 Trusty (14.04).

ROS机器人程序设计(原书第2版)补充资料 (贰) 第二章 ROS系统架构及概念

由于工作事物繁忙,更新有些慢,抱歉. 已经完成的各章节补充说明,会依据反馈意见持续更新,希望大家多提宝贵意见,非常感谢. 在完成了第一章的学习实现之后,基本已经掌握了ROS系统的安装,那么如何使用ROS,理解系统架构和概念,这是第二章的内容.hydro-indigo-kinetic通用概念不做区分. 如果使用IDEs进行ROS开发环境构建,推荐:http://wiki.ros.org/IDEs RoboWare Studio:http://www.roboware.me 补充参考:http://

机器人ROS系统学习随笔-&gt;2《ROS机器人系统设计Gazeb模型建立》

什么是机器人 机器人的组成: 控制系统 系统实现 外部传感器 系统构建--摄像头的实现 参数的设置: kinet链接 lunch文件: 激光雷达的连接 注意想要显示在rviz中要在命令行输入: 1 roslaunch rplidar_ros view_rplider.launch 系统架构完整示例 URDF机器人建模 <link>标签 <joint>标签 <roboot>标签 功能包创建 launch文件配置 在做自己模型的时候基本是只需要修改第一行. 机器人创建一 机

完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三

手把手叫你玩转网络编程系列之三    完毕port(Completion Port)具体解释                                                              ----- By PiggyXP(小猪) 前 言 本系列里完毕port的代码在两年前就已经写好了,可是因为许久没有写东西了,不知该怎样提笔,所以这篇文档总是在酝酿之中--酝酿了两年之后,最终决定開始动笔了,但愿还不算晚-.. 这篇文档我很具体而且图文并茂的介绍了关于网络编程模型中完毕

玩转大数据系列之Apache Pig高级技能之函数编程(六)

原创不易,转载请务必注明,原创地址,谢谢配合! http://qindongliang.iteye.com/ Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Apache Pig如何自定义UDF函数? Apache Pig5行代码怎么实现Hadoop的WordCount? Apache Pig入门学习文档(一) Apache Pig学习笔记(二) Apache Pig学习笔记之内置函数(三) 玩转大数据系列之Apache Pig如何与Apache Lucen