搞了好久,一直卡在相關問題上,原來是因為搞不懂這幾個文件的關系,還是寫個帖子記錄一下:
- 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>