《鸿蒙机器人编程》7-仿真工具Gazebo及URDF-教案_第1页
《鸿蒙机器人编程》7-仿真工具Gazebo及URDF-教案_第2页
《鸿蒙机器人编程》7-仿真工具Gazebo及URDF-教案_第3页
《鸿蒙机器人编程》7-仿真工具Gazebo及URDF-教案_第4页
《鸿蒙机器人编程》7-仿真工具Gazebo及URDF-教案_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

仿真工具Gazebo与URDFurdf介绍urdf(unifiedrobotdescriptionformat)是ROS中描述机器人的一种语言,在ROS开发中占据了非常重要的地位。urdf主要用途在于标识机器人物理模型有哪些部件、每个部件的尺寸、部件间以何种关节连接、关节限制等,可容易实现关节空间坐标与笛卡尔坐标的转换,如配合robot_state_publisher包使用,可根据关节的值确定出部件的位置和姿态。urdf定义了一系列XML标签来描述机器人模型,最核心的两个标签为:<link>——机器人部件/连杆/刚体,<joint>——机器人关节/运动副。<robot>标签为根标签,是其它标签的容器,其作用类似于launch文件中的launch标签。它有一个属性name,用来设置机器人的名字。如下如所示:<link>标签用于描述机器人某个部件(也即刚体部分)的外观和物理属性。机器人底座、轮子、激光雷达、摄像头等,每个部件都对应一个link。在link标签内,可以设计该部件的形状、尺寸、颜色、惯性矩阵、碰撞参数等一系列属性。属性name用于设置部件名字。下图为一些子标签具体设置:<joint>标签用于描述机器人关节的运动学和动力学属性,还可以指定关节运动的安全极限。机器人的两个部件(parentlink与childlink)以"关节"的形式相连接,不同的关节有不同的运动形式:旋转、滑动、固定、旋转速度、旋转角度限制。属性name,设置关节的名字;属性type,设置关节类型。以下是一些Joint类:Revolute:转动关节,但是有转动范围,必须要求之后的limit参数中必须含有上下界才合法。Continuous:连续转动关节,没有转动范围。Prismatic:平动关节,也需要上下界的定义。Fixed:完全固定,连接的两个link幷没有可动关系,可以理解为纯粹为了标识固定传感器相对位置与姿态而设立的。Floating:允许link与link之间有完全6个自由度的转换,跟fixed一样,一般是标识一些环境物体或者无人机在全局位置姿态的。Planar:与floating类似,用于标识地面机器人在地面上的位置姿态。Gearbox:描述了齿轮传动的转动关系。Ball:球关节,两个转动自由度的合成。Screw:类似于螺丝的运动,单个自由度,但转动与平动位移的合成。取消了floating与planar。下图为一些子标签具体设置:urdf本身设计有一些缺陷。整个joint与link成树状描述,而机器人存在一些的物理模型例如并联机构,环状机构等就无法表示。一些标签设置也不是非常合理,还有整个xml语法上也不是非常灵活。这些问题的存在使urdf在一些情况中显得非常鸡肋,但是对于大部分移动机器人与机械臂,urdf已经够用,关键是已经有大量现成工具,使得urdf在ROS中的地位还是不可撼动。XACRO宏介绍复杂的机器人常常有多达十几个joint和link,许多joint或link非常相似,整个urdf文件显得非常冗长、复杂,urdf文件中还经常存在一些值计算依赖。XACRO是ROS中简化大型xml文件的写法、增加结构性与扩展性的XML宏语言,提供了属性定义,数学运算,条件判断和宏定义等功能。使用宏能极大增加urdf文件的层次感与可读性,在各个机器人公开的ROSurdfpackage中,基本都是用XACRO工具进行组织。需要注意:必须在robot标签中加入xmlns:xacro="/wiki/xacro"属性。属性:使用<xacro:property>标签定义,用${属性名称}来调用该参数。如下图所示:数学运算:在变量的大括号中可以使用基本的数学运算,可以使用Python数学模块中的函数和常量。如下图所示:条件判断:表达式中的结果必须是0、1、true或false,在<expression>中任何结果为布尔值的Python表达式都是可以的。如下图所示:宏定义:使用xacro:macro来定义一个宏,参数用空格分割,参数可以用:=来添加默认值。如下图所示:仿真简述仿真/模拟(Simulation),泛指基于实验或训练的目的,将原本的系统、事务或流程,建立一个模型以表征其关键特性(keycharacteristics)或者行为/功能,予以系统化与公式化,以便进行可对关键特征做出模拟。当所研究的系统造价昂贵、实验的危险性大或需要很长的时间才能了解系统参数变化所引起的后果时,仿真是一种特别有效的研究手段。它广泛应用于电气、机械、化工、水力、热力、社会、经济、生态、管理等领域。重要工具就是计算机。ROS中的仿真软件有gazebo、stage、matlab等。Gazebo仿真工具gazebo是一款开源免费、功能强大的三维物理仿真平台,具备强大的物理引擎,高质量的图形渲染,方便的编程与图形接口。其典型应用场景包括测试机器人算法、机器人的设计、现实情景下的回溯测试等等。gazebo能够支持多种的物理引擎,例如ODE、bullet等等。它是一个3D图形的仿真平台,支持传感器的模拟等很多插件,还提供了很多知名的机器人模型。它的传输协议是tcpip,非常便于编程。他还有一个云的仿真平台,同时支持命令行工具。gazebo的架构分成两部分:gzserver和gzclient。gzserver负责产生传感器数据、更新物理参数,可以运行在云端;gzclient基于QT的用户界面,控制仿真特性,可同时运行多个人机界面。下图为架构示意图:gazebo的运行界面分为五个区域,分别为最大的3D视图区,上方的工具栏区,模型列表区,模型属性项区以及时间显示区。Gazebo与ROS的接口为了实现ros和Gazebo的通信,我们定义了以下的接口:gazebo_ros主要用于gazebo接口封装、gazebo服务端和客户端的启动、URDF模型生成等。gazebo_msgs是gazebo的Msg和Srv数据结构。gazebo_plugins-用于gazebo的通用传感器插件。gazebo_ros_api_plugin和gazebo_ros_path_plugin这两个Gazebo的插件实现接口封装。安装启动如果你已经成功安装了桌面完整版的ROS,可以直接跳过这一步骤,否则,请使用如下命令进行安装:sudoapt-getinstallros-indigo-gazebo-ros-pkgsros-indigo-gazebo-ros-control我们可以通过命令启动:roscorerosrungazebo_rosgazebo也可以通过launch文件启动:roslaunchgazebo_rosempty_world.launch这个launch文件实际上主要启动了两个node节点一个node节点就是gazeboserver,另一个node节点就是gazeboclient。这里面设置了一些参数:paused-以暂停状态启动Gazebo,默认为false。use_sim_time-ROS的node是否使用Gazebo通过/clocktopic发布的仿真时间,默认为true。gui-启用Gazebo的用户交互接口来控制视图,默认为true。headless-禁用仿真渲染组件的功能,当gui:=true时,不能使能此参数,默认为false。debug-在gdb中启动gzserver(GazeboServer)以用于调试,默认为false。world_name以相对路径指定了world模型的定义文件,绝对路径由GAZEBO_RESOURCE_PATH这个环境变量决定。默认为/usr/share/gazebo-x.x,对indigo版本来说为/usr/share/gazebo-2.2。建议:为保证模型顺利加载,请提前将模型文件下载并放置到本地路径下。(/osrf/gazebo_models/downloads/)创建仿真环境模型库加载完后,就可以直接添加环境模型,如下图所示。我们还可以通过buildingeditor这个页面自己去创建。修改机器人模型Gazebo使用SDF仿真描述格式定义仿真环境和模型,而ROS使用URDF通用机器人描述格式来定义机器人模型,且此格式定义的文件不能直接用于Gazebo,使用中需加以转换,添加用于描述仿真定义的标签。必须步骤:

(1)在每一个<link>内添加<inertia>标签。(2)向URDF文件中的joint添加<transmission>标签。代码如下:向URDF文件中添加ros_control插件,并添加相应插件的controller配置文件。ros_control是为用户提供的应用与机器人之间的中间件,包含一系列控制器接口、传动装置接口、硬件接口、控制器工具箱等等,可以帮助机器人应用快速落地,提高开发效率。对不同类型的控制器(底盘、机械臂等),ros_control可以提供多种类型的控制器。但是这些控制器的接口各不相同,为了提高代码的复用率,ros_control还提供一个硬件的抽象层。它的构成有以下几个部分:ControllerManager:机器人可能有多个controller,管理器提供一种通用的接口来管理不同的controller。Controller:完成每个joint的控制,请求下层的硬件资源,提供了PID控制器,读取硬件资源状态,在发布控制命令。HardwareRescource:为上下两层提供硬件资源的接口。RobotHW:硬件抽象层和硬件直接打交道,通过write和read方法来完成硬件的操作。RealRobot:要有自己的嵌入式控制器。可选步骤

:(1)在每一个<link>内添加<gazebo>标签。将外观颜色转换成Gazebo格式;将stl文件转换成dae文件,获得更好的渲染效果;添加传感器插件。(2)在每一个<joint>内添加<gazebo>标签。设置适当的阻尼动力系数;添加执行器控制插件。(3)在<robot>标签内添加<gazebo>。模型加载接下来,我们要把模型加载到gazebo里。一种方式是用gazebo_ros功能包下名为spawn_model的python脚本,通过封装接口向Gazebo发起服务调用,请求加载指定的URDF文件。rosrungazebo_rosspawn_model-file`rospackfindbaxter_description`/urdf/baxter.urdf-urdf-z1-modelbaxter我们也可以通过launch文件完成加载。对于xacro格

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论