A field guide + glossary for ROS 2 data in underwater vehicles, and a worked read of a real bag

I’ve been working through how AUV/ROV mission data is actually structured in ROS 2, and ended up writing two things that might be useful to others coming at marine robotics from the data side rather than the controls side.

A field guide to the data patterns — five structural patterns in how untethered vehicles record sonar, navigation and telemetry, with each term explained three ways (technical, plain English, what it’s used for): ROS 2 Data Patterns in Underwater Robotics — An Animated Field Guide

A 34-term glossary, each entry with a diagram: Glossary — Underwater Robotics & ROS 2 Mission Data

A worked example on real data — I profiled the Girona Underwater Caves bag (661,327 messages, 12 topics, 32.6 min) with rosbags in pure Python, no ROS install, and plotted depth, track, DVL beams and IMU attitude: Reading a Real AUV Mission Recording — 661,327 Messages from a Cave Survey

Four things in that bag surprised me, and I’d be interested to know whether they’re typical:

  1. /odometry publishes pose but twist.twist.linear.x is zero for all 21,843 messages — the field is there and never populated. Speed has to come from the DVL.
  2. The Linkquest DVL reports altitude = -2.0 as a no-bottom-lock sentinel (6 of 5,564 pings). Averaging that column naively gives a quietly wrong answer.
  3. Per-beam dataGood flags show only 86.2% of pings have all four beams good, even though individual beams are 94.9–98.0%. Roughly one ping in seven is degraded.
  4. Quaternion sign flips in the IMU orientation look like the vehicle inverting; anything that interpolates or differentiates across them produces fictional rotation.

Also: the dual-topic pattern is real and it bit me. Every vendor sensor in that bag is published twice, once as a custom type and once as a sensor_msgs twin. My first IMU plot came back completely blank because I read the vendor type, whose fields are gx/ax/roll rather than the standard nested vectors.

Corrections welcome — particularly on the DVL conventions, where I could only find convergence across packages rather than an actual standard.

Data set citation is required and is on the article page: Mallios, Vidal, Campos, Carreras, “Underwater caves sonar data set,” IJRR 2017, doi:10.1177/0278364917732838.