urdf和sdf都是模型文件,也都能在Gazebo中加载;
urdf只能表示单个机器人,而sdf则可以表达整个环境以及多个机器人,所以Gazebo在推sdf模型,但原来大部分工作都是基于urdf进行的;
sdf文件和urdf文件、xacro文件都可以加载dae等三维模型文件;
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>
来源:关于urdf/xacro/sdf, world/launch文件