Skip to main content
Version: 0.4

About the REPL Dataset

The ROSQL playground REPL queries a simulated 3-robot warehouse AMR fleet. All timestamps are relative to now, so queries like SINCE 45 min ago always return data — the simulation is perpetually in progress.

The Fleet

Robot IDFirmwareStatus
robot-amr-01v2.3.1Reliable — 3 successful missions this session
robot-amr-02v2.4.0Recently upgraded — 2 successes + 1 failure
robot-amr-03v2.3.0Aging hardware — 3 slow successes, gradual battery drain

The Investigation Story

The showcase queries follow a real diagnostic workflow:

  1. Trace the failurerobot-amr-02 aborted its third mission (trace-amr02-m3). Look at the Gantt chart: one span stands out immediately — /local_costmap_node/update took 8 seconds instead of its normal 0.5s.

  2. Find the root cause — Enrich the trace with logs: you'll see an ERROR from /local_costmap_node saying "costmap update timed out — /scan topic not publishing". This followed the v2.4.0 firmware upgrade.

  3. Check the blast radius — The fleet CPU time-series shows robot-amr-02 spiked to 92% CPU during the failure as it retried the costmap update in a loop.

  4. Confirm it's a regression — The anomaly detection query flags robot-amr-02 as anomalous (z-score ≈ 8) compared to last week's baseline, while the other two robots are within normal range.

  5. Inspect the ROS2 topology — The node graph shows the full Nav2 computation graph for robot-amr-02: the /scan path goes through /lidar_node → /local_costmap_node → /controller_server.

Tables in the Dataset

TableROSQL aliasContents
otel_tracestraces9 navigation missions × 4-6 spans + 7 topology spans. Timestamps: NOW()-60min to NOW()-8min
otel_logslogs~20 log entries correlated to traces. ERROR/WARN only on trace-amr02-m3
otel_metricsmetricssystem.cpu.utilization at 2-min intervals per robot for 45+ minutes
topic_messagestopics/odom, /plan, /battery_state. Battery readings for robot-amr-02 drop below 11.5V
mcap_metadatarecordings3 MCAP session records, one per robot
ros2_eventseventsFirmware deployment events for v2.3.0, v2.3.1, v2.4.0
(baseline)tracesHistorical trace data at NOW()-14d to NOW()-7d for ANOMALY queries

Timestamp Design

All data is inserted using DuckDB NOW() - INTERVAL expressions, evaluated each time the REPL loads. This means:

  • SINCE 45 min ago — always returns metric data (sampled at 2-min intervals back to NOW()-47min)
  • SINCE 90 min ago — captures all 9 mission traces
  • SINCE 2 h ago — includes battery readings below 11.5V for robot-amr-02
  • COMPARED TO last week — compares against baseline data at NOW()-14d to NOW()-7d

All 9 Showcase Queries

#LabelDemonstrates
1Trace a failed missionDistributed trace Gantt with span hierarchy
2Show logs for a failed traceENRICH WITH logs — cross-signal correlation
3CPU usage across fleetTIMESERIES 2 min FACET robot_id — stacked time-series
4Message flow for topic: /scanMESSAGE FLOW FROM TOPIC — causal span chain
5Slowest actions/spansSHOW SPAN SUMMARY — latency comparison bar chart
6Path deviationPATH DEVIATION — planned vs actual trajectory
7Which robot regressed?ANOMALY COMPARED TO last week — statistical anomaly detection
8Battery below 11.5VUnit-aware filter: fields['voltage'] < 11.5 V
9ROS2 node topologySHOW NODE GRAPH — full computation graph

Write Your Own Queries

The REPL accepts any valid ROSQL syntax. Try:

-- Error rate by robot
SELECT COUNT(*) FROM traces
WHERE status = 'ERROR'
FACET robot_id

-- Latest battery readings across fleet
FROM topics
WHERE topic_name = '/battery_state'
SINCE 2 h ago

-- Action success rate
SELECT ACTION_SUCCESS_RATE('/navigate_to_pose') FROM traces
SINCE 1 hour ago

-- Compare firmware versions
COMPARE TO VERSION 'v2.3.1'

See the syntax reference and command reference for all supported query forms.