flightopsDocumentation
Guides

Inspect a recording without ROS

2 min readdocs/RECORDING-QUICKSTART.md (source repository)

This example reads the two sample Nav2 recordings that ship with Flightops and makes an HTML results page. It needs the installed beta on an activated device. It does not need ROS 2, Docker, or a robot.

The sample recordings

The samples are two short Gazebo and Nav2 simulation runs. Each one is a rosbag2 directory with one MCAP file:

RunWhat happened
workingThe robot reached its navigation goal. 17.4 s, 6090 messages.
lidar_topicA deliberate fault: AMCL listens on /lidar/scan, which nothing publishes, so AMCL never publishes a pose. No navigation goal was sent. 25.9 s, 9554 messages.

They are installed next to the offline documentation. flightops docs prints the path of the documentation's index.html; the samples are in ../samples/nav2 from that folder.

1. Compare the two recordings

bash
samples="$(dirname "$(flightops docs)")/../samples/nav2"
splashdown stats "$samples/working/bag/bag_0.mcap"
splashdown stats "$samples/lidar_topic/bag/bag_0.mcap"

Expected: both list the same nine topics. In the working run, /amcl_pose, /plan and /cmd_vel have messages (5, 5 and 104). In the lidar_topic run those three topics have count: 0: AMCL never published a pose, and with no goal there is no plan or velocity command. /scan, /odom and /tf have messages in both runs, so the lidar itself was publishing on /scan.

2. Save a bounded query as evidence

Query the velocity commands in a two-second window of the working run:

bash
demo_dir=$(mktemp -d /tmp/flightops-recording-XXXXXX)
splashdown query bag_0.mcap --root "$samples/working/bag" \
  --topic /cmd_vel \
  --start-ns 1792304635000000000 --end-ns 1792304637000000000 \
  --field linear.x --reduction mean --unit m/s --max-samples 20 \
  > "$demo_dir/window.json"
flightops results "$demo_dir/window.json" -o "$demo_dir/results.html" --open

Expected: window.json shows outcome: observed, complete: true, and measurements.message_count: 32. The two timestamps select a two-second window in the recording's log-time clock. flightops results prints the report path and asks your browser to open it; if no browser opens, open the printed file.

3. Read it again later

bash
flightops-tui --plain "$demo_dir/window.json"

This prints the same evidence as text: Observed 32 messages in the requested window. Both commands read the saved JSON; neither checks a live robot. Keep window.json if you need the exact evidence.

To replay the two runs side by side in a desktop window, run flightops workbench --sample; see the Scene Workbench guide. See bounded evidence windows for clock, completeness, and query limits.