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文件

附加:xacro 中mesh_模块化生成SDF模型: xacro4sdf

Gazebo中sdf文件和urdf和xacro文件的区别

gazebo模型之间的转换:xacro>urdf>sdf

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐