URDFhtml
为了制做咱们的模拟器,首先咱们得了解下什么是URDF编程
什么是URDF? Unified Robot Description Format——统一机器人描述格式。总以为这和Sensor支持才是ROS的精华所在,通讯frameworks的并不见得出彩。框架
可能大部分读者都像我这样穷<bi~背景声>没钱买ROS支持的机器人,不过ROS仍是很Nice的考虑到了这一群体,提供了模拟器支持。(明明是为了更快速的软件开发,喂!)工具
本想从ROS网站的培训教程开始http://wiki.ros.org/urdf/Tutorials开始的,不过本着实践为本的目的,咱们仍是以《Learning ROS for Robostic Programming》为基础吧。网站
参考文献spa
1. ROS urdf教程:http://wiki.ros.org/urdf/Tutorials.net
2. 《Learning ROS for Robostic Programming》设计
准备工做orm
安装urdf_tutorial包xml
执行
固然,没有运行roscore你的rviz也没法启动。不过若是错误显示你的rviz找不到执行文件的话,请参照http://wiki.ros.org/rviz
URDF基本语法
统一机器人描述格式URDF,其实就是为了可以抽象描述一个机器人的硬件。并且URDF是基于XML的,因此阅读起来应该很是容易。
笔者觉得要理解URDF用自顶向下的方式更快。即从为了解决一个怎样的问题开始。在这里咱们先用一个简单场景熟悉一下会用到的工具。
不得不说小车是最简单实用的机器人, 一个车身加四个轮子就组成了最基本的小车结构,并且具有必定载重能力的小车也不会太贵。
见以下图片。
(图一)
初版
在URDF语言中,机器人都会由各个部件(Link)经过关节(Joint)链接而成。而这里的关键就是描述部件和关节之间的关系。
在这个简单的小车模型中,一共有5个部件: 车身 + 4个轮子。 4个关节: 每一个轮子一个。
因而,咱们获得了最初了URDF版本 01_car_skeleton.urdf
很简单对吧?
用<link> tag描述各个部件,<joint> tag描述各个关节。用<parent>和<child>描述关节链接的部件。
只要描述了Link和Joint之间的关系,咱们很容易就能构建机器人的框架。
咱们能够用以下命令来检查urdf文件是否有语法问题。
只要获得以下结果就代表语法没问题。
但请注意这虽然描述了各个部件之间的关系,但还是一个不完整的URDF,没法在模拟器中显示。
第二版
<visual>tag用来描述模块的视觉效果。
<geometry>tag 用来描述模块的形状和大小。
<origin>tag用来描述模块的位置。
加上模块大小以后的小车文件以下所示。02_visual.urdf
如今经过以下命令,你就经过rviz查看你的小车模型啦。
第三步: 上色
Mmm,咱们的小车就快完成了,但全是红色总以为怪怪的并且很难辨认。
不过上色一样很简单。使用<material> tag而且设置<color> tag
咱们获得第三个版本:03_color.urdf
咱们能够看到rviz的结果,如图一所示。
这下咱们差很少完成了。咱们立刻就能够移动咱们的小车啦。
可是等等,在咱们的URDF文件中,内嵌了关于各个部件的大小参数以及位置。这些固然是咱们根据草图用计算器算出来的。
可是这样的扩展性也太差了吧?难道对每一个模型咱们都得这么计算吗?对于相同模型的不一样尺寸咱们还得从新计算一次?
第四步: Xacro
什么是Xacro? 咱们能够把它理解成为针对URDF的扩展性和配置性而设计的宏语言(macro language)。
有了Xacro,咱们就能够像编程同样来写URDF文件了。
首先咱们来看Xacro文件的变量定义:
只要定义了body_width,咱们就能够经过${body_width}来引用其值了。有了这个,至少咱们能够把须要配置的变量进行统一管理。
其次,咱们来看一下Xacro如何进行宏定义。
这里的宏和C语言的宏很像,在转换成URDF文件时编译器会将其展开。其基本语法为:
咱们来看下URDF文件中关于车身和车轮的大小描述。
<box size="0.2 .3 .1"/>
<origin rpy="0 0 0" xyz="0 0 0.05"/>
<cylinder length="0.05" radius="0.05"/>
<origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/>
这里涉及到的参数有:
车身的大小(body_size),车身中心的位置(body_pos)。
车轮半径(wheel_radius)和轮胎宽度(wheel_width),车轮圆心的位置(wheel1_pos, wheel2_pos, wheel3_pos, wheel4_pos)。
相应的在Xacro中定义参数的语法为:
而且每一个轮子和链接的代码也基本相同。
基于上述亮点,咱们能够获得如下xacro文件。04_xacro.xacro
验证该文件的正确性能够有两种方法。
1. 转换成URDF文件,使用check_urdf
2. 使用xacrodisplay.launch
咱们都会获得和图1同样的小车模型。这下咱们就能够用Xacro来构建机器人模型了。