Skip to content

Adding course elements_tutorial

M1chaelM edited this page May 12, 2023 · 2 revisions

Overview

VRX has a basic set of worlds with water, sky, coastline, and some of the RobotX elements in fixed positions. It is easy to create your own static course or even add new elements into a running simulation.

Prerequisites

This guide assumes you already have installed ROS 2 and the vrx packages as covered in the setup instructions.


Creating a world file

A world file defines the initial environment Gazebo starts in, including lighting, sky, ground, and models. Let's copy one of the examples as a starting point for our world file:

$ mkdir example_vrx_package
$ cd example_vrx_package/
$ cp <YOUR_VRX_INSTALLATION>/src/vrx/vrx_gz/worlds/sydney_regatta.sdf sydney_regatta_custom.sdf

Notice that this is an .sdf file. If you aren't familiar with SDF files, you should read this tutorial first.

Let's go through this file and make some changes. Open sydney_regatta_custom with your favorite editor. First, notice the next two lines within the tag:

<include>
  <pose> 0 0 0.2 0 0 0 </pose>
  <uri>https://fuel.gazebosim.org/1.0/openrobotics/models/sydney_regatta</uri>
</include>

This block sets up an empty Sydney Regatta environment (only water, sky, and coastline) downloading it from Fuel .

The remainder of the file is simply adding different environmental elements, such as waves and wind.

Let's add a buoy into the world to make an obstacle to avoid. Put these lines before tag:

<include>
  <name>mb_round_buoy_orange_custom</name>
  <pose>-520 180 0 0 1.57 0</pose>
  <uri>https://fuel.gazebosim.org/1.0/openrobotics/models/mb_round_buoy_orange</uri>

  <plugin name="vrx::PolyhedraBuoyancyDrag"
          filename="libPolyhedraBuoyancyDrag.so">
    <fluid_density>1000</fluid_density>
    <fluid_level>0.0</fluid_level>
    <linear_drag>25.0</linear_drag>
    <angular_drag>2.0</angular_drag>
    <buoyancy name="collision_outer">
      <link_name>link</link_name>
      <pose>0 0 0 0 0 0</pose>
      <geometry>
        <sphere>
          <radius>0.25</radius>
      </sphere>
      </geometry>
    </buoyancy>
    <wavefield>
      <size>1000 1000</size>
      <cell_count>50 50></cell_count>
      <wave>
        <model>PMS</model>
        <period>5.0</period>
        <number>3</number>
        <scale>1.1</scale>
        <gain>0.3</gain>
        <direction>1 0</direction>
        <angle>0.4</angle>
        <tau>2.0</tau>
        <amplitude>0.0</amplitude>
        <steepness>0.0</steepness>
      </wave>
    </wavefield>
  </plugin>
</include>

Running vrx with a custom world

Now that you have created a new world file, you can launch the simulation again with this world:

First, update the GZ_SIM_RESOURCE_PATH environment variable to let Gazebo know that there's a new directory containing world files:

export GZ_SIM_RESOURCE_PATH=/home/caguero/example_vrx_package:$GZ_SIM_RESOURCE_PATH

Next, run the simulation with a custom world argument:

ros2 launch vrx_gz competition.launch.py world:=sydney_regatta_custom

If everything went well, you should see a new orange buoy added into Gazebo.

Back: Thruster Articulation Top: VRX Tutorials Next: Using the Acoustic Pinger
Clone this wiki locally