Using roslaunch to start Gazebo, world files and URDF models
使用roslaunch 打开世界模型
roslaunch gazebo_ros empty_world.launch
Launching 其他的世界
roslaunch gazebo_ros mud_world.launch
Notice in mud_world.launch a simple jointed mechanism is launched. The launch file for mud_world.launch contains the following:
<launch>
<!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="worlds/mud.world"/> <!-- Note: the world_name is with respect to GAZEBO_RESOURCE_PATH environmental variable -->
<arg name="paused" value="false"/>
<arg name="use_sim_time" value="true"/>
<arg name="gui" value="true"/>
<arg name="recording" value="false"/>
<arg name="debug" value="false"/>
</include>
</launch>
在这个启动文件中,我们从empty_world.launch继承了大部分必需的功能。我们需要更改的唯一参数是world_name参数,用mud.world文件替换empty.world文件。其他参数仅设置为其默认值。
所以想要创建新世界只需要编写new.world,参考Build a world。new.launch文件中只需要用new.world文件替换empty.world文件
创建你自己的Gazebo_ROS包
根据ROS标准,与机器人型号和描述有关的所有内容都位于名为/MYROBOT_description的包中,与Gazebo一起使用的所有世界文件和启动文件都位于名为/MYROBOT_Gazebo的ROS包中。用小写字母替换“MYROBOT”。对于这两个包,您的层次结构应如下所示:
../catkin_ws/src
/MYROBOT_description
package.xml
CMakeLists.txt
/urdf
MYROBOT.urdf
/meshes
mesh1.dae
mesh2.dae
...
/materials
/cad
/MYROBOT_gazebo
/launch
MYROBOT.launch
/worlds
MYROBOT.world
/models
world_object1.dae
world_object2.stl
world_object3.urdf
/materials
/plugins
两个包都要用catkin_create_创建
创建自定义的世界
创建ROS包 MYROBOT_gazebo
在此包中,创建launch文件夹
在launch文件夹中,创建包含以下内容的YOUROBOT.launch文件(不包括默认参数):
<launch>
<!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find MYROBOT_gazebo)/worlds/MYROBOT.world"/>
<!-- more default parameters can be changed here -->
</include>
</launch>
在同一个包中,创建一个worlds文件夹,并创建一个包含以下内容的MYROBOT.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://gas_station</uri>
<name>gas_station</name>
<pose>-2.0 7.0 0 0 0 0</pose>
</include>
</world>
</sdf>
现在您应该可以使用以下命令将您的自定义世界(带有加油站)启动到gazebo:
. ~/catkin_ws/devel/setup.bash
roslaunch MYROBOT_gazebo MYROBOT.launch
可以将其他模型插入到robot的world文件中,并使用file->另存为命令将编辑后的世界导出回ROS包中。
使用roslaunch生成URDF机器人
有两种方法可以使用roslaunch将基于URDF的机器人launch到Gazebo:
1、ROS服务调用生成方法(推荐使用)
第一种方法可以使机器人的ROS包在计算机和存储库之间的交换更便捷。它允许您keep机器人相对于ROS包路径的位置,但也要求您使用一个python脚本进行ROS服务调用。
此方法使用一个名为spawn_model的小python脚本向gazebo_ros节点(在rostopic名称空间中简称为“gazebo”)发出服务调用请求,以向gazebo添加自定义URDF。spawn_mode脚本位于gazebo_ros包中。可以按以下方式使用此脚本:
rosrun gazebo_ros spawn_model -file `rospack find MYROBOT_description`/urdf/MYROBOT.urdf -urdf -x 0 -y 0 -z 1 -model MYROBOT
查看帮助rosrun gazebo_ros spawn_model -h
要将其直接集成到ROS launch文件中,请重新打开MYROBOT_gazebo/launch/YOUROBOT.launch文件,并在</launch>
标记前添加以下内容:
<!-- Spawn a robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find baxter_description)/urdf/baxter.urdf -urdf -z 1 -model baxter" />
启动此文件时,您将看到与使用rosrun时相同的结果。
如果URDF不是XML格式,而是XACRO格式,则可以对启动文件进行类似的修改。
将此添加到先前创建的启动文件中:
<!-- Convert an xacro and put on parameter server -->
<param name="robot_description" command="$(find xacro)/xacro.py $(find pr2_description)/robots/pr2.urdf.xacro" />
<!-- Spawn a robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model pr2" />
2、模型数据库方法(具体步骤参考tutorial,推荐第一种方法)
第二种方法允许您将您的机器人包含在.world文件中,这看起来更干净、更方便,但需要通过设置环境变量将您的机器人添加到Gazebo模型数据库中。