Tools and workflows¶
The tools on this page are not marine-specific, but marine teams use them every day. Field time is short, so good logging and fast analysis tools pay for themselves on the first deployment.
Packages¶
| Project | What it does | ROS | Vehicles | Activity |
|---|---|---|---|---|
| rosbag2 ROS 2 tooling working group |
Record and replay ROS 2 data. MCAP is the default storage format in current ROS 2 releases. | ROS 2 | Any | Active Oct 2026 |
| MCAP Foxglove |
Open container format and libraries for timestamped multi-sensor logs (C++, Python, Go, Rust, and more). | ROS 2 Non-ROS | Any | Active Oct 2026 |
| rosbags Ternaris |
Pure Python library to read, write, and convert ROS 1 and ROS 2 bags without a ROS installation. Useful in data pipelines. | Non-ROS | Any | Active Oct 2026 |
| PlotJuggler Davide Faconti |
Time-series plotting for live topics and bag files. Fast for controller and EKF tuning. | ROS 2 ROS 1 | Any | Active Oct 2026 |
| RViz2 Open Robotics |
Standard 3D visualization for ROS 2 (TF, point clouds, markers, images). | ROS 2 | Any | Active Oct 2026 |
| Lichtblick Lichtblick Suite |
Open-source robotics visualization and log analysis app, forked from the last open-source Foxglove Studio release. | ROS 2 ROS 1 | Any | Active Oct 2026 |
| foxglove_bridge Foxglove |
WebSocket bridge that streams ROS topics to Foxglove and Lichtblick. Check the Foxglove SDK repository for newer development. | ROS 2 ROS 1 | Any | Low activity Oct 2025 |
| QGroundControl Dronecode Foundation |
Ground control station for MAVLink vehicles (ArduSub, ArduPilot Rover, PX4). Common as the topside pilot interface for the BlueROV2. | Non-ROS | ROV USV | Active Oct 2026 |
| Neptus LSTS (University of Porto) |
Command, control, and mission review software of the LSTS toolchain (IMC protocol). | Non-ROS | AUV USV | Active Oct 2026 |
| industrial_ci ROS-Industrial |
Ready-made CI scripts that build and test ROS packages on GitHub Actions, GitLab CI, and other services. | ROS 2 ROS 1 | Any | Active Jun 2026 |
| action-ros-ci ROS tooling working group |
GitHub Action that builds and tests a ROS 2 workspace with colcon. | ROS 2 | Any | Active May 2026 |
| awesome-maritime-robotics ROS Maritime Community Working Group |
The working group's earlier link list of open-source maritime robotics software. This catalog supersedes and extends it. | Non-ROS | Any | Active Nov 2025 |
| best-of-robot-simulators Kimberly McGuire and contributors |
Ranked, regularly updated list of robot simulators, including marine ones. Good for a wider survey. | Non-ROS | Any | Active Oct 2026 |
Logging¶
- Record everything raw. Raw sensor data lets you reprocess navigation and perception after the mission. Record the state estimate and the controller commands too.
- Use MCAP. It is the default rosbag2 storage format in current ROS 2 releases, and many tools (Lichtblick, Foxglove, PlotJuggler, the
mcapCLI) read it. - Split and compress. Use
--max-bag-durationor--max-bag-sizeso that a power loss destroys at most one file. The MCAP storage presets (zstd_fast,zstd_small,fastwrite) set the compression. - Do not log through slow links. Record on the vehicle and download after recovery.
# Record everything to MCAP with fast zstd chunk compression, in 5-minute files
ros2 bag record -a -s mcap --storage-preset-profile zstd_fast \
--max-bag-duration 300 -o dive_$(date +%Y%m%d_%H%M)
- Analyze without ROS. rosbags reads and writes ROS 1 and ROS 2 bags in pure Python, so data scientists do not need a ROS installation.
Visualization and tuning¶
| Tool | Use it for |
|---|---|
| RViz2 | TF trees, point clouds, markers, sonar and camera images, live |
| PlotJuggler | Time series: EKF innovations, controller errors, thruster commands. Live or from bags |
| Lichtblick | Open-source web and desktop app for multi-panel dashboards from MCAP files or a live bridge |
| QGroundControl | Pilot interface and parameters for ArduSub, ArduPilot Rover, and PX4 vehicles |
rqt_graph, ros2 doctor |
Check node connections and the environment |
Geodesy and coordinate tools¶
| Task | Tool |
|---|---|
| WGS 84 ↔ UTM in ROS | geodesy from geographic_info |
| Local ENU tangent plane, geoid heights | GeographicLib (LocalCartesian) |
| Any coordinate reference system, in Python | pyproj |
| Pressure to depth (TEOS-10) | GSW Python (gsw.z_from_p) |
| GNSS fixes into the EKF | navsat_transform_node in robot_localization |
See Frames and conventions for the rules.
Development environment¶
- Containers. Docker images make simulation and dependencies reproducible across a team. SUAVE and POSIM publish images; Blue and auv_controllers include development container setups. For GPU simulators, install the NVIDIA Container Toolkit.
- Workspaces. Use
vcs(vcstool) with a.reposfile to pin the repositories of a vehicle stack, androsdepfor system dependencies. - Target hardware. Many vehicles run on ARM computers (Raspberry Pi, NVIDIA Jetson). Build and test on ARM in CI, or cross-compile, before you go to the field.
Continuous integration¶
- Build and test each package on every pull request with action-ros-ci or industrial_ci.
- Add a headless simulation test: launch the vehicle in Gazebo or Stonefish, run a short mission, and check that it reaches the waypoints.
- Add unit tests for frame conversions and message parsing in drivers; these find the expensive bugs early.
- Release packages to the ROS build farm, so users can install them with
apt.
Field laptop checklist¶
- Offline copies of documentation, maps, and charts
- All dependencies installed; no internet needed to build
- Same software versions as the vehicle (container image tag or
.repospins) - Bag analysis tools installed (PlotJuggler, Lichtblick, rosbags)
- Enough disk space and a second drive for backups