gazebo的模型是用xml格式的文本文件来描述的。具体有三种形式:.urdf, .xacro, .sdf

urdf

urdf是老的gazebo模型格式,本身有一些缺陷,也缺一些功能。但是网上很多gazebo模型都是这个格式的。

urdf官方文档:

http://wiki.ros.org/urdf/XML

http://gazebosim.org/tutorials?tut=ros_urdf&cat=connect_ros#Links

http://wiki.ros.org/urdf/Tutorials/Using%20a%20URDF%20in%20Gazebo

roslaunch启动urdf模型方法如下

    <arg name="ID" value="3"/>
    <arg name="x" default="0"/>
    <arg name="y" default="0"/>
    <arg name="z" default="0"/>
    <arg name="R" default="0"/>
    <arg name="P" default="0"/>
    <arg name="Y" default="0"/>

    <arg name="vehicle" default="rover"/>
    <arg name="urdf" default="$(find uavros_gazebo)/models/$(arg vehicle)/$(arg vehicle).urdf"/>
    <param name="robot_description" textfile="$(arg urdf)" />
    <node name="$(arg vehicle)$(arg ID)_spawn" pkg="gazebo_ros" type="spawn_model" output="screen" args="-urdf -param robot_description -model $(arg vehicle)$(arg ID) -x $(arg x) -y $(arg y) -z $(arg z) -R $(arg R) -P $(arg P) -Y $(arg Y)"/>

这是用spawn_model节点启动gazebo模型,-param是从参数服务器中读取urdf文件,-model则是模型在gazebo中的名称,为了避免多个模型命名重复可以加上ID。

ps:roslaunch文件格式和其中param、arg、include、node等用法可以看ros wiki官方说明http://wiki.ros.org/roslaunch/XML,也可以在wiki中搜索。

xacro

xacro是urdf的一个升级版,文件也是.urdf.xacro命名。加入了xacro:macro模板等功能,使得模型文件编写更方便。书写格式也和urdf稍有不同,本质和urdf一样。

roslaunch启动xacro模型方法如下,本质也是先转化为sdf。

	<arg name="ID" value="3"/>
	<arg name="x_pos" default="0"/>
	<arg name="y_pos" default="0"/>
	<arg name="z_pos" default="0"/>
	<arg name="yaw" default="0"/>
	<!-- 在gazebo中加载机器人模型-->
	<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find uavros_gazebo)/models/racecar_description/urdf/racecar.urdf.xacro'"/> <!--do not name as 'robot_description_3".etc-->
    <node name="spawn_urdf_$(arg ID)" pkg="gazebo_ros" type="spawn_model" args="-urdf -model racecar$(arg ID) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -Y $(arg yaw) -param robot_description"/> 

sdf

sdf是最新的gazebo模型和世界文件格式,有很多新增功能,也是未来的大势所趋。

sdf 1.8的官方使用文档:http://sdformat.org/spec?ver=1.8&elem=sdf

sdf官方github仓库中也提供了urdf转换为sdf的工具。未来urdf肯定会被淘汰,因此官方不再给出sdf转化为urdf的工具,而且很多插件和新功能也没法用urdf表示。

但是民间还是有勉强能用的sdf转urdf的工具的:https://github.com/andreasBihlmaier/pysdf

使用说明:https://blog.csdn.net/weixin_44740368/article/details/88878685

roslaunch启动sdf模型方法如下,

    <arg name="ID" value="3"/>
    <arg name="x" default="0"/>
    <arg name="y" default="0"/>
    <arg name="z" default="0"/>
    <arg name="R" default="0"/>
    <arg name="P" default="0"/>
    <arg name="Y" default="0"/>

    <arg name="vehicle" default="rover"/>
    <arg name="sdf" default="$(find uavros_gazebo)/models/$(arg vehicle)/$(arg vehicle).sdf"/>
    <param name="robot_description_sdf" textfile="$(arg sdf)" />
    <node name="$(arg vehicle)$(arg ID)_spawn" pkg="gazebo_ros" type="spawn_model" output="screen" args="-sdf -param robot_description_sdf -model $(arg vehicle)$(arg ID) -x $(arg x) -y $(arg y) -z $(arg z) -R $(arg R) -P $(arg P) -Y $(arg Y)"/>

可以用上面这种-param参数服务器的方式,也可以直接用-file加载模型:(下面的例子也加载了gazebo世界)

    <!-- gazebo configs -->
    <arg name="gui" default="true"/>
    <arg name="debug" default="false"/>
    <arg name="verbose" default="false"/>
    <arg name="paused" default="false"/>
    <arg name="respawn_gazebo" default="false"/>
    <!-- vehicle pose -->
    <arg name="x" default="0"/>
    <arg name="y" default="0"/>
    <arg name="z" default="0"/>
    <arg name="R" default="0"/>
    <arg name="P" default="0"/>
    <arg name="Y" default="1.57"/>
    <!-- vehicle model and world -->
    <arg name="vehicle" default="iris"/>
    <arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/empty.world"/>
    <arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/$(arg vehicle)/$(arg vehicle).sdf"/>

    <!-- gazebo world -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch">
        <arg name="gui" value="$(arg gui)"/>
        <arg name="world_name" value="$(arg world)"/>
        <arg name="debug" value="$(arg debug)"/>
        <arg name="verbose" value="$(arg verbose)"/>
        <arg name="paused" value="$(arg paused)"/>
        <arg name="respawn_gazebo" value="$(arg respawn_gazebo)"/>
    </include>

    <!-- gazebo model -->
    <node name="$(anon vehicle_spawn)" pkg="gazebo_ros" type="spawn_model" output="screen" args="-sdf -file $(arg sdf) -model $(arg vehicle) -x $(arg x) -y $(arg y) -z $(arg z) -R $(arg R) -P $(arg P) -Y $(arg Y)"/>

Logo

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

更多推荐