gazebo中urdf、xacro、sdf模型文件关系
gazebo的模型是用xml格式的文本文件来描述的。具体有三种形式:.urdf, .xacro, .sdf
urdf
urdf是老的gazebo模型格式,本身有一些缺陷,也缺一些功能。但是网上很多gazebo模型都是这个格式的。
urdf官方文档:
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)"/>
更多推荐
所有评论(0)