教程 添加课程元素
https://github.com/osrf/vrx/wiki/customizing_vrx_tutorials
vrx_gazebo 包有一个基本的 RobotX 课程,包括水、天空、海岸线和一些固定位置的挑战。 您可以轻松创建自己的静态课程,甚至可以在运行模拟中添加新挑战。
创建世界文件
世界文件定义凉亭开始的初始环境,包括光照、天空、地面和模型。 让我们从 vrx_gazebo 中复制一个示例作为我们世界文件的起点:
$ mkdir example_vrx_package
$ cd example_vrx_package/
$ roscp vrx_gazebo example_course.world.xacro .
现在你应该有一个看起来像这样的文件:
cat example_course.world.xacro
<?xml version="1.0" ?>
<!-- World containing sydneyregatta model and some course challenges -->
<sdf version="1.6" xmlns:xacro="http://ros.org/wiki/xacro">
<world name="robotx_example_course">
<xacro:include filename="$(find vrx_gazebo)/worlds/sydneyregatta.xacro" />
<xacro:sydneyregatta />
<!--Waves-->
<xacro:include filename="$(find wave_gazebo)/world_models/ocean_waves/model.xacro"/>
<xacro:ocean_waves scale="2.5"/>
<xacro:include filename="$(find vrx_gazebo)/worlds/xacros/usv_wind_plugin.xacro"/>
<xacro:usv_wind_gazebo>
<wind_objs>
<wind_obj>
<name>wamv</name>
<link_name>base_link</link_name>
<coeff_vector>.5 .5 .33</coeff_vector>
</wind_obj>
</wind_objs>
</xacro:usv_wind_gazebo>
</world>
</sdf>
请注意,这是一个 .xacro 文件。 如果您不熟悉 xacro 文件,则应先熟悉语法。
让我们浏览这个文件并进行一些更改其中的下两行 标签 :
<xacro:include filename="$(find vrx_gazebo)/worlds/sydneyregatta.xacro" />
<xacro:sydneyregatta />
第一行导入 sydneyregatta 中定义 第二行调用 sydneyregatta宏,它设置了一个空的悉尼帆船赛环境(只有水、天空和海岸线)。 除非您正在模拟悉尼帆船赛以外的位置,否则您可能希望将这些行包含在您的世界文件中。
文件的其余部分只是添加不同的环境元素,例如波浪和风。
让我们在世界上添加一些浮标来避开一些障碍。 将这些行放在 标记之前:
<include>
<!-- Small buoy found in vrx_gazebo -->
<uri>model://polyform_a3</uri>
<!-- X Y Z roll pitch yaw, relative to center of gazebo world (a point out in the water) -->
<pose>-10 2 0 0 0 0</pose>
</include>
<include>
<uri>model://polyform_a7</uri>
<pose>-15 8 0 0 0 0</pose>
</include>
<include>
<uri>model://mb_marker_buoy_red</uri>
<pose>-12.5 -3 0 0 0 0</pose>
</include>
使用自定义世界运行 vrx_gazebo
现在您已经创建了一个新的世界文件,您可以使用这个世界再次启动模拟:
首先,使用以下命令从 xacro 文件生成已编译的 XML:
rosrun xacro xacro example_course.world.xacro > my_world.world
接下来,使用自定义世界参数运行模拟:
roslaunch vrx_gazebo sydneyregatta.launch world:=`pwd`/my_world.world
如果一切顺利,您应该会看到 Gazebo 中添加了三个新对象: