赞
踩
一. 背景
虽然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
运行结果如下:
在另一个终端运行rqt_graph,结果如下:
现在回到rrbot_rviz.launch,内容如下:
<launch> <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find rrbot_description)/urdf/rrbot.xacro'" /> <!-- send fake joint values --> <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"> <param name="use_gui" value="true"/> </node> <!-- Combine joint values --> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/> <!-- Show in Rviz --> <node name="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>,同时也包含两个文件:
rviz下指定的颜色并不能在gazebo中显示,因为gazebo接受OGRE的材料脚本
(2)在gazebo中显示
roslaunch rrbot_gazebo rrbot_world.launch
效果如下图:
在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 -->
<node name="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:
<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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。