gazebo教程---在gazebo中使用URDF

一. 背景
虽然URDF在ROS中是一个非常有用的标准格式,但是它缺少很多特性并且不能满足机器人不断发展的需求。URDF只能单独指定一个单个机器人的运动学和动力学特性,但是它不能指定这个机器人自身在世界坐标里的姿态,并且它也缺少摩擦力等其他特性。除此之外,它不能描述一些东西,比如灯光,高度图等。
在实现方面,URDF大量使用XML属性打破了proper formatting,这恰恰使得URDF更加不灵活。同时URDF也没有向后兼容的机制。
为了解决这个问题,一个新的格式SDF被用在Gazebo以此解决URDF的不足。SDF对从世界到机器人都有完整的描述,使得添加和修改gazebo中的元素很容易。
二. 在gazebo中显示机器人
这里用RRBot机器人来演示,从gazebo_ros_demo中clone到自己工作空间的src文件夹中,然后重新编译工作空间:

cd ~/catkin_ws/src
git clone https://github.com/ros-simulation/gazebo_ros_demos.git
cd ..
catkin_make

(1)在Riz中显示

roslaunch rrbot_description rrbot_rviz.launch

运行结果如下:
gazebo教程---在gazebo中使用URDF_第1张图片
在另一个终端运行rqt_graph,结果如下:
在这里插入图片描述
现在回到rrbot_rviz.launch,内容如下:


  <param name="robot_description"
    command="$(find xacro)/xacro --inorder '$(find rrbot_description)/urdf/rrbot.xacro'" />

  <!-- send fake joint values -->
  "joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
    <param name="use_gui" value="true"/>
  </node>

  <!-- Combine joint values -->
  "robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/>

  <!-- Show in Rviz   -->
  "rviz" pkg="rviz" type="rviz" args="-d $(find rrbot_description)/launch/rrbot.rviz"/>

</launch>

首先加载机器人的模型文件rrbot.urdf,此处会调用xacro解析器,自动将xacro转为urdf,然后启动节点joint_state_publisher,同时use_gui=true表示打开joint_state_publisher用户界面,随后启动robot_state_publisher和rviz。在启动rviz时,会传入rrbot.rviz配置文件,这个配置文件里保存的有用户设置,比如rviz界面中左侧的一些displays设置。
在rrbot.xacro中,里面主要是一些< link >和< joint>,同时也包含两个文件:

  • rrbot.gazebo:gazebo下的颜色指定,以及一些控制器插件
  • materials.xacro:rviz下的颜色指定

rviz下指定的颜色并不能在gazebo中显示,因为gazebo接受OGRE的材料脚本

(2)在gazebo中显示

roslaunch rrbot_gazebo rrbot_world.launch

效果如下图:
gazebo教程---在gazebo中使用URDF_第2张图片
在rrbot_world.launch文件中主要是加载world以及启动节点spawn_model,这个节点是向gazebo_ros请求生成一个机器人,加载该节点内容如下:

  <!-- Run a python script to the send a service call to gazebo_ros to spawn a URDF robot -->
  "urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
    args="-urdf -model rrbot -param robot_description"/>

respawn=“false”表示节点挂掉不再重启;args里面的内容:-urdf表示加载的是urdf文件,-model rrbot表示加载的模型的名字是rrbot,这个对应rrbot.xacro中的robot name:

"rrbot" xmlns:xacro="http://www.ros.org/wiki/xacro">

-param robot_description表示加载的urdf模型是从参数服务器的robot_description中获取。
在安装好gazebo后,有一个工具来检查你的URDF是否可以转换成SDF,只需运行下面命令:

  # gazebo2 and below
  gzsdf print MODEL.urdf
  # gazebo3 and above
  gz sdf -p MODEL.urdf

参考:
http://gazebosim.org/tutorials/?tut=ros_urdf

你可能感兴趣的:(gazebo)