Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/jackvice/RoboTerrain/llms.txt

Use this file to discover all available pages before exploring further.

RoboTerrain includes a diverse collection of Gazebo Fortress simulation worlds designed to challenge mobile robots across a range of unstructured and semi-structured terrains. All world files live under ros2_ws/src/roverrobotics_ros2/roverrobotics_gazebo/worlds/ and are selected at launch time via the world argument in the respective launch file. Mars terrain models from the Leo Rover simulator package are located separately under ros2_ws/src/leo_simulator-ros2/leo_gz_worlds/worlds/.

Available Worlds

Inspection Worlds

Industrial inspection environments filled with boxes and obstacles for navigation benchmarking.

Maze Worlds

Structured corridor environments for evaluating path planning and obstacle avoidance.

Outdoor Terrain Worlds

Natural and extreme off-road terrain for testing terrain traversal and VORT metrics.

MarsYard Worlds

Photorealistic Mars analog terrain models for planetary robotics research.

Inspection Worlds

FileDescription
inspection_simple.worldA sparse open inspection area with minimal clutter — ideal for baseline navigation runs and rapid iteration.
inspection_boxes.worldInspection site with a standard box layout.
inspection_boxes_v3.worldDense box configuration used for Active Vision research.
inspection_boxes_v4.worldIndustrial inspection site with a balanced obstacle density — the default world for Leo_rover_fisheye.launch.py.
inspection_boxes_x10.worldHigh-density box variant (10×) for stress-testing social navigation.
inspection_boxes_x10_v2.worldRevised high-density variant used for the MDPI social navigation publication.
inspection.worldClassic inspection environment.

Maze Worlds

FileDescription
maze_simple.sdfA clean, rectangular maze with wide corridors — a good starting point for evaluating global planners.
maze_pillars.sdfA maze variant with pillar obstacles instead of walls, creating a partially occluded navigation challenge.
maze_clean.sdfA streamlined maze without visual noise, intended for pure planning benchmarks.
maze_empty.sdfEmpty maze shell with no internal obstacles.
maze.sdfStandard maze layout.
maze_and_person.sdfMaze with a static person actor pre-placed.

Outdoor Terrain Worlds

FileDescription
island.sdfAn outdoor terrain island with varied elevation and natural ground features. This is the current default world for 4wd_rover_gazebo.launch.py.
rubicon.sdfExtreme off-road rocky terrain modelled after the Rubicon Trail. Use this world to stress-test VORT (Velocity Over Rough Terrain) and terrain-crossing performance.
simplecave3.sdfNarrow cave-like passage — useful for confined-space navigation research.
pillars.sdfOpen area with scattered pillar obstacles.
depot.sdfWarehouse depot layout.
fortress.sdfFortress-style walled environment.
office_cpr_construction.sdfClearpath Robotics CPR construction site in SDF format. Requires the Clearpath model assets (see IGN_GAZEBO_RESOURCE_PATH in the launch file).
office_cpr_construction.worldLegacy .world format of the CPR construction site.

Legacy and Experimental Worlds

FileDescription
agriculture.worldAgricultural field setting.
yosemite.worldYosemite terrain model.
simple_40m2.worldMinimal 40 m² open area — useful for quick integration tests.
inspection_simple_ode.worldODE physics engine variant of the inspection simple world.
inspection_simple_odev2.worldSecond ODE variant with updated solver settings.
inspection_simple_backup.worldBackup snapshot of the inspection simple world.

MarsYard Worlds

These worlds are provided by the leo_gz_worlds package at ros2_ws/src/leo_simulator-ros2/leo_gz_worlds/worlds/.
FileDescription
leo_empty.sdfMinimal empty Leo Rover world with Ignition physics and sensor plugins configured.
marsyard2020.sdfMarsYard 2020 photorealistic analog terrain model.
marsyard2021.sdfUpdated 2021 MarsYard terrain with revised surface topology.
marsyard2022.sdfLatest MarsYard 2022 terrain — highest fidelity, recommended for planetary navigation studies.
The default_value='island.sdf' is currently active in 4wd_rover_gazebo.launch.py. All other world lines are commented out and can be enabled by following the steps below.

Switching Worlds

The active world is controlled by the DeclareLaunchArgument block near the top of the launch file. Only one default_value line should be uncommented at a time.
1

Open the launch file

nano ros2_ws/src/roverrobotics_ros2/roverrobotics_gazebo/launch/4wd_rover_gazebo.launch.py
2

Uncomment the desired world

Locate the declare_world_cmd block and comment out the active line, then uncomment the world you want:
declare_world_cmd = DeclareLaunchArgument(
    'world',
    #default_value='inspection_simple.world',
    #default_value='office_cpr_construction.world',
    default_value='island.sdf',      # <-- currently active

    #default_value='simplecave3.sdf,',
    #default_value='maze_simple.sdf',
    #default_value='maze_pillars.sdf',
    #default_value='inspection.world',
    #default_value='simple_40m2.world',
    #default_value='maze_clean.sdf',
    #default_value='maze_empty.sdf',
    description='World file to use in Gazebo')
For example, to switch to the Rubicon world:
declare_world_cmd = DeclareLaunchArgument(
    'world',
    #default_value='island.sdf',
    default_value='rubicon.sdf',     # <-- now active
    description='World file to use in Gazebo')
3

Rebuild the workspace

cd ros2_ws
colcon build
source install/setup.bash
4

Launch the simulation

ros2 launch roverrobotics_gazebo 4wd_rover_gazebo.launch.py
During RL training runs, pass headless:=true to suppress the Gazebo GUI and reduce CPU/GPU load significantly:
ros2 launch roverrobotics_gazebo Leo_rover_fisheye.launch.py headless:=true
Headless mode runs only the Gazebo server (ign gazebo -s -r), which is sufficient for physics simulation and sensor data generation.

Leo Rover Worlds

Leo_rover_fisheye.launch.py uses its own DeclareLaunchArgument block and defaults to inspection_boxes_v4.world. The available worlds for the Leo Rover pipeline include the inspection, construction, and island environments.
1

Open the Leo Rover fisheye launch file

nano ros2_ws/src/roverrobotics_ros2/roverrobotics_gazebo/launch/Leo_rover_fisheye.launch.py
2

Select the desired world

declare_world_cmd = DeclareLaunchArgument(
    'world',
    #default_value='inspection_boxes_x10.world',
    #default_value='inspection_boxes_x10_v2.world',  # social nav testing (MDPI publication)
    #default_value='inspection_boxes_v3.world',       # dense boxes for Active Vision
    default_value='inspection_boxes_v4.world',        # <-- current default (Active Vision)
    #default_value='office_cpr_construction.world',
    #default_value='island.sdf',
    #default_value='inspection_simple.world',
    #default_value='rubicon.sdf',
    #default_value='simplecave3.sdf',
    #default_value='maze_simple.sdf',
    #default_value='maze_pillars.sdf',
    #default_value='inspection.world',
    #default_value='simple_40m2.world',
    #default_value='maze_clean.sdf',
    #default_value='maze_empty.sdf',
    description='World file to use in Gazebo')
3

Rebuild and relaunch

cd ros2_ws
colcon build
source install/setup.bash
ros2 launch roverrobotics_gazebo Leo_rover_fisheye.launch.py
The world_name variable inside Leo_rover_fisheye.launch.py is hardcoded to 'inspect' (used for the dynamic pose bridge topic /world/inspect/dynamic_pose/info and actor topics). If you switch to the construction or island world, update world_name in the launch file to match, or the ros_gz_bridge dynamic pose topic will not resolve correctly.

Build docs developers (and LLMs) love