关于urdf/xacro/sdf, world/launch文件
搞了好久,一直卡在相关问题上,原来是因为搞不懂这几个文件的关系,还是写个帖子记录一下:
- urdf和sdf都是模型文件,也都能在Gazebo中加载;
- urdf只能表示单个机器人,而sdf则可以表达整个环境以及多个机器人,所以Gazebo正在推sdf模型,但原来大部分工作都是基于urdf进行的;
- urdf不能定义变量,所以出现了xacro可以通过宏定义,定义一些“属性”;
- sdf文件通常在一个文件夹里,其下一般还有一个model.config文件(模型名字在这里配置)、meshes文件夹、materials文件夹等。参考~/.gazebo/models/gas_station/;
- urdf和xacro文件中都是以<robot>标签表示一个机器人的,而sdf文件则是用<model>标签,里面的其他标签也不尽相同,他们之间或许有一些可以相互转化的,还没有深入了解,比如pysdf,参考这里;
- urdf是ROS中使用的概念,所以不能在world文件中引用添加到Gazebo中,但是能在launch文件中通过gazebo_ros包中的spawn_model方法添加;
<launch> ... <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find MYROBOR_description)/urdf/bus_mass.urdf -urdf -z 1 -model MYROBOT" /> </launch>
- sdf文件则可以直接在world文件中引用添加;
<?xml version="1.0" ?> <sdf version="1.4"> <world name="default"> <include> <uri>model://ground_plane</uri> </include> <include> <uri>model://sun</uri> </include> <include> <uri>model://bus</uri> <name>bus</name> <pose>-2.0 7.0 0.0 0 0 0</pose> </include> </world> </sdf>
- launch中引用xacro文件:
<launch> <param name="robot_description" command="$(find xacro)/xacro '$(find MYROBOT_description)/urdf/MYROBOT.xacro'"/> <node name="spawn_model" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" args="-urdf -x 0.0 -y 0.0 -z 0.0 -model ROBOT_NAME -param robot_description"/> </launch>