关于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>

 

posted @ 2020-04-14 10:41  临界稳定  阅读(1573)  评论(0编辑  收藏  举报