Simulating the Singapore AUV Challenge 2026 competition environment using Gazebo Sim 8 (Harmonic).
Using a model of the BlueROV2, including support for both the base and heavy configurations. It uses the BuoyancyPlugin, HydrodynamicsPlugin and ThrusterPlugin.
- Pool: 25m × 16m × 1.6m deep
- Water simulation: Buoyancy, underwater fog effects, and lighting
- World: Qualification Pool and Final Pool
- Starting Zone
- Gates: qualification gate and final gate
- Drums: blue, red, and pinger (pinger still in development)
- Flares: orange, yellow, red, blue
- BlueROV2: bluerov2, bluerov2_heavy, bluerov2_ping (heavy and ping still in development)
- Ball (still in development)
- Golf Ball (still in development)
Ensure the requirements below are completed before you install the project:
Install/Clone all these requirements. Ensure ArduSub is already built.
Clone this repository to your colcon workspace.
Add env to .bashrc or .zshrc:
export GZ_SIM_RESOURCE_PATH=~/<your-colcon-workspace>/src/bluerov2_gz/models:~/ros2_ws/src/bluerov2_gz/worlds
export GZ_SIM_SYSTEM_PLUGIN_PATH=~/ardupilot_gazebo/buildThen, source .bashrc or .zshrc.
Gazebo can be run with the commands below:
gz sim -v 3 -r <gazebo-world-file>where <gazebo-world-file> should be replaced with:
sauvc_qualification.worldfor the qualification arena.sauvc_final.worldfor the final arena.
Now launch ArduSub and ardupilot_gazebo:
cd ~/ardupilot
Tools/autotest/sim_vehicle.py -L RATBeach -v ArduSub -f vectored --model=JSON --out=udp:0.0.0.0:14550 --consoleUse MAVProxy to send commands to ArduSub:
arm throttle
mode alt_hold
rc 5 1550
disarmFor access camera topic:
gz topic -e -t /front_cameraIt will echo the camera’s image stream. If you want to view the camera directly in Gazebo, simply search for “Image Display” in the top bar of Gazebo.
For ROS 2 applications, you need to add a bridge between Gazebo and ROS 2.
Nevertheless, for ROS2 Humble, ros_gz_bridge does not function properly in the Harmonic version due to a known issue. Therefore, you should remove the source build of ros_gz and reinstall it using the ros-humble-ros-gzharmonic package.
cd ~/<your-colcon-workspace>
rm -rf src/ros_gz
rm -rf build/ros_gz*
rm -rf install/ros_gz*
sudo apt-get update
sudo apt-get install ros-humble-ros-gzharmonic
source /opt/ros/humble/setup.bashRun ROS camera bridge:
ros2 run ros_gz_bridge parameter_bridge '/front_camera@sensor_msgs/msg/Image@ignition.msgs.Image'Now you can view the image topic using rqt or RViz2:
ros2 run rqt_image_view rqt_image_view /front_camera
# or
rviz2To change camera resolution, edit values at bluerov2/model.sdf in line 455-456.
Launch MAVROS with the ArduSub connection:
ros2 launch mavros apm.launch fcu_url:=udp://:14550@localhost:14555- If the robot is teleporting, clean the gazebo cache and restart.
./scripts/clean_gazebo_cache.sh
