ROS 2 Foxy Simulation, Control, and Reinforcement Learning for Underwater Robotics
Nerites Underwater Simulator is a complete ROS 2 Foxy port and extension
of the original UUV Simulator framework:
https://github.com/uuvsimulator/uuv_simulator
The project focuses on:
- Full ROS 1 to ROS 2 Foxy migration of underwater simulation tools
- Support for realistic AUV and ROV vehicle models
- Reinforcement learning for underwater control
- Underwater manipulation with Oberon robotic arms
- Multi-vehicle, sensor-rich simulation environments
- RexROV -- Work-class ROV
- ECA A9 -- Torpedo-style AUV
- GRAALTech X300 -- Hybrid AUV/ROV
- Oberon4 and Oberon7 manipulators
- Gym-compatible RL framework with Soft Actor--Critic (SAC) training pipelines
Nerites ports and extends the original UUV Simulator environments to ROS 2:
- Ocean environments
- Pool and tank setups
- Hydrodynamic and buoyancy models
- Current, turbidity, and noise plugins
- Structured benchmarking environments
| Vehicle | Description |
|---|---|
| RexROV | Work-class ROV with full thruster configuration |
| ECA A9 AUV | Torpedo-style autonomous underwater vehicle |
| GRAALTech X300 | Hybrid AUV/ROV with hovering and profiling capability |
| RexROV + Oberon4 | ROV with 4-DOF manipulator |
| RexROV + Oberon7 | ROV with 7-DOF serial arm |
| RexROV + Dual Arms | ROV with both Oberon4 and Oberon7 |
Overview of underwater vehicles: Top left: RexROV; Top middle: ECA A9 AUV; Top right: GRAALTech X300; Bottom left: RexROV + Oberon4; Bottom middle: RexROV + Oberon7; Bottom right: RexROV + Dual Arms (Oberon4 and Oberon7);
| Arm | DOF | Description |
|---|---|---|
| Oberon4 | 4 | ROV-mounted arm with jaw gripper |
| Oberon7 | 7 | Serial arm with wrist and parallel gripper |
| Dual-arm setup | 11 | Combined Oberon4 and Oberon7 on RexROV |
- gazebo_ros2_control integration
- joint_state_broadcaster
- Position and effort controllers
- Gripper control (jaw and parallel)
- Forward and inverse kinematics services
The GRAALTech X300 is a compact torpedo-shaped hybrid AUV/ROV designed for:
- Long-range autonomous navigation
- Precision hovering and station-keeping
- Environmental monitoring and inspection
In Nerites, X300 is fully modeled in ROS 2 with:
- Thruster allocation
- Hydrodynamic modeling
- Sensor integration
- A dedicated SAC RL training environment (x300_env.py)
- Two rear main thrusters for surge
- Four vertical tunnel thrusters for heave
- Four horizontal tunnel thrusters for yaw and lateral motion
Launch Gazebo world:
ros2 launch uuv_gazebo_worlds auv_underwater_world.launch.pyLaunch RexROV:
ros2 launch uuv_descriptions upload_rexrov_default.launch.pyAvailable controllers:
ros2 launch uuv_trajectory_control rov_pid_controller.launch.py uuv_name:=rexrov
ros2 launch uuv_trajectory_control rov_mb_fl_controller.launch.py uuv_name:=rexrov
ros2 launch uuv_trajectory_control rov_mb_sm_controller.launch.py uuv_name:=rexrov
ros2 launch uuv_trajectory_control rov_nl_pid_controller.launch.py uuv_name:=rexrov model_name:=rexrov
ros2 launch uuv_trajectory_control rov_pd_grav_compensation_controller.launch.py uuv_name:=rexrov model_name:=rexrov
ros2 launch uuv_trajectory_control rov_sf_controller.launch.py uuv_name:=rexrov
ros2 launch uuv_trajectory_control rov_ua_pid_controller.launch.py uuv_name:=rexrov
ros2 launch uuv_trajectory_control rov_nmb_sm_controller.launch.py uuv_name:=rexrov model_name:=rexrovSend a waypoint file:
ros2 launch uuv_control_utils send_waypoints_file.launch.py uuv_name:=rexrovros2 launch uuv_tutorial_disturbances tutorial_disturbance_manager.launch.py
ros2 launch uuv_tutorial_disturbances tutorial_body_wrench.launch.py
ros2 launch uuv_tutorial_disturbances tutorial_thruster_efficiency.launch.py
ros2 launch uuv_tutorial_disturbances tutorial_thruster_state.launch.py
ros2 launch uuv_tutorial_disturbances tutorial_timed_current.launch.pyBase environment: - base_env.py
- reset() and step() API
- Continuous action spaces
- Rich observation spaces
Vehicle-specific environments:
- RexROV → rexrov_env.py
- ECA A9 → eca_a9_env.py
- X300 → x300_env.py
A custom Soft Actor--Critic (SAC) implementation is included for full-DOF control training.
1. Select target vehicle: rexrov, eca_a9, or x300
2. Set configuration path in:
SETTINGS_PATH = "settings/settings_rexrov.txt"
SETTINGS_PATH = "settings/settings_eca_a9.txt"
SETTINGS_PATH = "settings/settings_x300.txt"3. Configure:
- Episode length
- Steps per episode
- Observation and action scaling
- SAC hyperparameters
4. Run training:
python3 custom_algorithms/my_sac_train.py- ROS 2 Foxy
- Gazebo Classic 11
- Python 3.8 or newer
- Colcon build tools
- kdl_parser_py
git clone <your-repo-url> ~/nerites_sim_ws
cd ~/nerites_sim_ws/src
rosdep update
rosdep install --from-paths . --ignore-src -y
cd ~/nerites_sim_ws
colcon build
source install/setup.bashContributions are welcome in:
- New vehicle models
- Sonar and sensor simulation
- Manipulation and dual-arm coordination
- Reinforcement learning benchmarks
- Documentation and tutorials
To be announced.
- ROS2 X300 single Vehicle Implementation: (https://bitbucket.org/isme_robotics/auv_core_ros2/src/main/)
- UUV Simulator: (https://github.com/uuvsimulator/uuv_simulator)
- Plankton Simulator: (https://github.com/Liquid-ai/Plankton)
- Eca A9 vehicle: (https://github.com/GSO-soslab/eca_a9_plankton)
- UUV manipulators: (https://github.com/uuvsimulator/uuv_manipulators)






