urdf和xacro是ROS里面对机器人模型搭建的两种格式,其中urdf文件是可以由xacro文件产生的,可以说,xacro文件是urdf文件的高级升级版。接下来以gazebo_plugins包里的tricycle_drive文件夹来介绍一下macro文件
该文件在gazebo_plugins/test/tricycle_drive/xacro/tricycle文件夹内,是搭建三轮车模型的描述文件,其代码为:
第一行
代表使用的xml版本是1.0
第二行
机器人的名字叫做"tricycle",其使用的格式为在"http://www.ros.org/wiki/xacro"中定义的xacro格式
第三第四行
第三行是注释,这里代表下一步要载入Rviz color的定义文件
第四行表示,需要的文件是 gazebo_plugins包内/test/tricycle_drive/xacro文件夹下的materials.xacro文件
第五六七行
第五行还是注释,表明接下来要载入的是robot的定义文件
第六行表示,载入的文件是 gazebo_plugins包内/test/tricycle_drive/xacro/tricycle文件夹下的tricycle_body.xacro文件
第七行表示,tricycle_body的父环节是base_link,使用的碰撞网格文件是package://gazebo_plugins/test/tricycle_drive/meshes/tricycle
最后一行
表示机器人的定义结束。
从上文中可以看出,xacro在定义robot的过程中载入了另外两个xacro文件,从而实现了模块化的代码复用,这样当我们在一个robot中重复使用一些组件时,就不用多次编写代码,减少了工作量。
接下来详细解释
这两行的作用跟tricycle.xacro中一致
这三行,定义了参数PI=3.1415926,驱动轮半径radius_actuated_wheel=0.135,编码器轮半径radius_encoder_wheel=0.135
这五行,载入了五个文件,分别是力有关的文件inertia_tensors.xacro,机器人地盘的描述文件tricycle_chassis.xacro,轮子的描述文件wheel.xacro,驱动轮的描述文件wheel_actuated.xacro,跟三轮车插件有关的文件tricycle_plugins.xacro
这一行代表接下来的代码用于描述名为tricycle_body的macro(宏),使用的参数为parent meshes。
环节名称是${parent}运算得到的结果。
底盘模型是tricycle_chassis(前面载入的文件),名字叫chassis,上一级环节是${parent}计算得到的结果,坐标{0 0 0},初始旋转角度{ 0 0 0 },网格是${meshes}计算得到的结果。
有三个轮子,其中两个是wheel类型,由wheel.xacro文件描述,名称分别为left和right,父环节为${parent}计算得到的结果,规定初始坐标,规定半径,规定长度,规定网格。
还有一个轮子是wheel_actuated类型,由wheel_actuated.xacro文件描述,名称为front,父环节为${parent}计算得到的结果,坐标为[1.14 0 0],规定初始旋转角度,规定半径,规定长度,规定网格。
motor插件,为tricycle_drive类型,(由前面载入的tricycle_plugin.xacro文件描述)
macro(宏)定义结束
robot定义结束
具体解释
同上
定义了四个参数:M_PI,DX,DY,DZ
定义了一种名为tricycle_chassis宏,参数包括name,parent,xyz,rpy,meshes
定义了一个连接父环节和子环节的关节
定义了一个子环节,是一个立方体
gazebo的设置,具体不是很明白。
结束宏定义
结束robot定义
是用于计算惯性距的文件,这里可以先不管他
看不懂......
注意:xacro:后面自定义的是宏的名称,宏是在其他文件中定义的,例如在tricycle_body.xacro中有
...