<aside> π
POSIM β Platform for Ocean Simulation Β· documentation checked 2026-10-01
Target: ROS 2 Lyrical / Gazebo Jetty. Current source. Compatibility names such as dave_* are intentional. Start with POSIM Installation and POSIM Quickstart & Backend Support.
Source documentation and inherited illustrations do not certify every runtime configuration. Published Docker candidates, development main, and experimental WGPU are distinct states.
</aside>
Installed descriptors include rexrov, bluerov2, bluerov2_heavy, and bluerov2_heavy_multibeam_sonar. Slocum is covered in POSIM Glider Models. namespace selects a packaged descriptor; it is not an arbitrary rename in these launch entries.
Run in an environment already sourced using POSIM Native Installation or POSIM Docker Guide.
ros2 launch dave_demos dave_robot.launch.py \
namespace:=rexrov world_name:=dave_ocean_waves z:=-5 paused:=false \
gui:=false headless:=true use_teleop:=false use_web_joystick:=false
For the empty-world variant, select world_name:=empty.sdf z:=2.0. Check /model/rexrov/odometry and the world clock; stop with Ctrl+C and inspect process exit.
ros2 launch dave_demos dave_robot.launch.py \
namespace:=bluerov2 world_name:=dave_ocean_waves z:=-0.5 paused:=false \
gui:=false headless:=true use_teleop:=false use_web_joystick:=false \
open_qgc:=false open_virtual_joystick:=false
Select namespace:=bluerov2_heavy for the Heavy descriptor. The launch configuration supplies the ArduSub/MAVROS connection for these variants. Confirm the connection and data in your own run; a headless start alone is not a manual-control test.
For a configured display, use gui:=true headless:=false. Keyboard teleoperation requires an interactive TTY and use_teleop:=true. The keyboard mapping in the source is c arm, x disarm, w/s forward/back, a/d yaw, r/f ascend/descend, h ALT_HOLD, j STABILIZE and Space stop.
The browser joystick is included in the POSIM HTML source. Serve that file from the POSIM checkout instead of relying on the launch file's inherited hosted-page default. The example below is for a native Ubuntu installation with the simulator and browser on the same machine. It is a source-checked setup example, not an additional completed runtime test.
In one terminal, serve only the checkout's extras directory on loopback:
python3 -m http.server 8080 --bind 127.0.0.1 --directory "$HOME/posim_ws/src/dave/extras"
In a second terminal, source the native installation environment and run:
source /opt/ros/lyrical/setup.bash
source "$HOME/.ros_ardusub_env/env"
source ~/posim_ws/install/setup.bash
ros2 launch dave_demos dave_robot.launch.py \
namespace:=bluerov2 world_name:=dave_ocean_waves z:=-0.5 paused:=false \
gui:=true headless:=false use_teleop:=true use_web_joystick:=true \
joystick_ws_host:=127.0.0.1 joystick_ws_port:=8765 \
open_qgc:=false open_virtual_joystick:=true \
virtual_joystick_url:='<http://127.0.0.1:8080/virtual_joystick.html?host=127.0.0.1&port=8765>'
The browser page and the WebSocket bridge both use loopback here. Keep use_teleop:=true: the BlueROV configuration gates the whole teleoperation launch, including the WebSocket bridge, with that argument. Run it in an interactive terminal because the keyboard node is also started. If automatic browser opening is unavailable, open the shown URL manually on that same machine. Stop both the simulation and the HTTP server with Ctrl+C when finished. Docker and remote-browser deployments require their own network/display setup; do not expose the control endpoint publicly. See the launch source for the supported arguments.
QGroundControl is optional (open_qgc). Install it and make the executable discoverable before enabling it. GUI, joystick and QGroundControl were disabled in the candidate headless acceptance runs, so those results do not certify these options.