ROS introspection & diagnostics
Launch, inspect topics and diagnose failures in ROS systems.
20 project-authored proposals · taxonomy v1.1 · 0 new benchmark runs. Verifiers and partial-credit rules below are designs, not executed results.
- Typical applications
- ROS 2 CLI · rqt
- Class GUI-need label
CL· CLI-sufficient
Task proposals · 20
Expand to inspect the complete original wording and proposed checks. Original proposal text remains English in both interfaces.
R07.09.01.05-T01 List topics with publishers but no subscribers in a running system
Original instruction
Launch fixtures/warehouse_bot/bringup.launch.py (ROS 2 Jazzy, sim time). After 20 s, list every topic that has at least one publisher and zero subscribers, excluding /rosout and /parameter_events, and write them sorted to output/orphans.txt.
- Platforms
lin· Linux- Applications
- ROS 2 CLI
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP12· Answer/decision- Conditions
- None declared
- Proposed difficulty
- 2 / 5
Proposed verifier
Grader computes the orphan set from a graph snapshot of the same launch (deterministic node set); file must match exactly.
Proposed partial credit
90% scaled by Jaccard of reported vs true orphan set; 10% set exactly correct.
R07.09.01.05-T02 Fix a QoS mismatch that stops cmd_vel from reaching the base
Original instruction
In fixtures/diffbot_ws, teleop commands on /cmd_vel do not move the simulated robot. Diagnose with ros2 topic info --verbose, fix the QoS incompatibility through the base controller's parameter/QoS override in the launch file (do not edit teleop), and show the robot drives 1 m forward.
- Platforms
lin· Linux- Applications
- ROS 2 CLI · Gazebo
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Grader relaunches: no incompatible QoS events, teleop node unchanged (hash), scripted 1 m forward command moves odom 1.0+/-0.05 m. output/diagnosis.txt must name reliability as the mismatched policy.
Proposed partial credit
25% cause identified; 35% fix in correct place; 40% robot moves as commanded.
R07.09.01.05-T03 Find and fix a camera topic running below its rated frequency
Original instruction
fixtures/perception.launch.py publishes 4 camera streams that should each run at 30 Hz. Measure rates with ros2 topic hz, identify the stream below 25 Hz and its cause in node parameters (e.g., compression level or throttle), fix the parameter in the YAML and confirm 30+/-1 Hz.
- Platforms
lin· Linux- Applications
- ROS 2 CLI
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Grader relaunches with the edited YAML: all 4 topics 30+/-1 Hz over 20 s; diff limited to the one faulty parameter; output/answer.txt names the topic and parameter.
Proposed partial credit
30% slow topic and cause identified; 30% minimal fix; 40% all rates in spec.
R07.09.01.05-T04 Repair a broken TF tree between base_link and the lidar
Original instruction
Navigation in fixtures/rover_ws fails with 'Could not transform laser to base_link'. Use tf2 tools (view_frames, tf2_echo) to find the break, add the missing transform with the offsets from the URDF in input/rover.urdf.xacro in the correct launch file, and verify scans appear in the map frame.
- Platforms
lin· Linux- Applications
- ROS 2 CLI · tf2_tools
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
Grader relaunches: tf lookup map->laser succeeds; laser->base_link transform equals URDF values within 1 mm/0.1 deg; no duplicate publishers for that edge; costmap receives scans.
Proposed partial credit
30% break located (output/diagnosis.txt); 40% correct transform values; 30% downstream nav receives scans.
R07.09.01.05-T05 Find a mis-remapped namespace in a large graph with rqt_graph
Original instruction
fixtures/fleet_sim launches 40 nodes for 3 robots. Robot r2's planner never receives a map. Use rqt_graph (nodes/topics, namespace grouping) to find the wrong remap, fix it in the launch file, and save a screenshot of the corrected graph region to output/graph.png.
- Platforms
lin· Linux- Applications
- rqt · ROS 2 CLI
- Interfaces
desk· Desktop GUIterm· Terminal- GUI need · task setting
HY· Hybrid- GUI need · ordinary access
G2· GUI-essential- Interaction primitives
click· Point & clicknav· Pan/zoom/scrollvis· Visual judgmentcode· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Grader relaunches: /r2/map has the map server publisher and r2 planner subscriber; only the faulty remap line changed; graph.png exists (not graded beyond presence and size).
Proposed partial credit
40% faulty remap identified; 40% fixed graph connectivity; 20% minimal diff.
R07.09.01.05-T06 Find when the battery fell below 20% and the nav state at that time
Original instruction
From the rosbag2 recording fixtures/run_0412 (mcap), find the first timestamp at which /battery_state percentage drops below 0.20, and the most recent /nav_status message at that time. Write output/answer.json with the timestamp (ns), percentage and nav state.
- Platforms
lin· Linux- Applications
- ROS 2 CLI · rosbag2 · Python
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP12· Answer/decision- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Grader computes from the bag: timestamp exact (message stamp), percentage within 1e-4, nav state string exact.
Proposed partial credit
40% timestamp; 20% percentage; 40% nav state.
R07.09.01.05-T07 Measure odometry drift and wheel-slip onset in PlotJuggler
Original instruction
Load fixtures/slip_test.mcap in PlotJuggler, plot /odom and /ground_truth XY and their position error, and find the first time the error exceeds 0.2 m. Report the time (s from bag start, 0.1 s resolution) and the error at the end in output/answer.json; save the layout as output/slip.xml.
- Platforms
lin· Linux- Applications
- PlotJuggler
- Interfaces
desk· Desktop GUI- GUI need · task setting
HY· Hybrid- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clickdrag· Drag & dropvis· Visual judgment- Work product
WP12· Answer/decision- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
Grader computes the error series from the bag: onset time within 0.1 s and final error within 0.02 m; layout XML includes both topics and a custom error series.
Proposed partial credit
50% onset time; 30% final error; 20% layout saved.
R07.09.01.05-T08 Audit use_sim_time across all running nodes
Original instruction
With fixtures/sim_stack.launch.py running, dump the parameters of all nodes to output/params/*.yaml and list in output/sim_time_off.txt every node whose use_sim_time is false.
- Platforms
lin· Linux- Applications
- ROS 2 CLI
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP02· Records/table- Conditions
- None declared
- Proposed difficulty
- 2 / 5
Proposed verifier
Grader snapshots the parameters of the same launch: one YAML per node, and the false-node list must match exactly (3 planted nodes).
Proposed partial credit
40% dumps complete; 60% exact list of offending nodes.
R07.09.01.05-T09 Fix three planted faults so Nav2 reaches all goals
Original instruction
In fixtures/nav2_house (Gazebo headless + Nav2), the robot fails to reach goals. Find and fix the 3 planted faults (a costmap parameter, a sensor frame_id, a lifecycle node that never activates) with ROS 2 CLI tools and logs, then send the 3 goals in input/goals.yaml and confirm arrival.
- Platforms
lin· Linux- Applications
- ROS 2 CLI · Nav2 · Gazebo
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
long· Long-horizon- Proposed difficulty
- 5 / 5
Proposed verifier
Grader relaunches the fixed workspace and sends the goals: all reached within 0.25 m in 120 s; diff touches only the 3 faulty items; output/faults.md names all 3.
Proposed partial credit
60% planted faults fixed (20 pts each); 30% all goals reached; 10% faults documented.
R07.09.01.05-T10 Trace the first error behind a node crash in rqt_console
Original instruction
fixtures/arm_bringup crashes after ~30 s. Using rqt_console, filter by severity and node to find the first ERROR message that precedes the crash chain, and record node name, message text and timestamp in output/answer.json.
- Platforms
lin· Linux- Applications
- rqt
- Interfaces
desk· Desktop GUI- GUI need · task setting
HY· Hybrid- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clicktype· Text & formsvis· Visual judgment- Work product
WP12· Answer/decision- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Grader compares with the deterministic log of the fixture: node and message exact, timestamp within 1 ms.
Proposed partial credit
40% node; 40% message; 20% timestamp.
R07.09.01.05-T11 Restore discovery between two ROS 2 hosts with a discovery server
Original instruction
Two containers (robot, base_station) run fixtures/multi_host. Topics from robot are invisible on base_station. Diagnose (domain ID, multicast disabled), configure a Fast DDS discovery server on base_station and the client env on both, and show /robot/odom echoes on base_station.
- Platforms
lin· Linux- Applications
- ROS 2 CLI · Fast DDS
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP08· App/system state- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
Grader restarts both containers with the submitted env/config: ros2 topic list on base_station shows robot topics within 10 s, /robot/odom receives >=9 Hz; diagnosis.txt names both causes.
Proposed partial credit
30% causes identified; 40% discovery server config; 30% topics flow across hosts.
R07.09.01.05-T12 Tune a joint PID live with rqt_reconfigure to meet a step spec
Original instruction
The simulated joint controller in fixtures/joint_tuning exposes p, i, d as dynamic parameters. Using rqt (Dynamic Reconfigure / Parameter Reconfigure) and rqt_plot of the step test, tune gains for <5% overshoot and <0.5 s 2% settling on a 0.5 rad step. Save final gains to output/gains.yaml.
- Platforms
lin· Linux- Applications
- rqt
- Interfaces
desk· Desktop GUI- GUI need · task setting
HY· Hybrid- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
drag· Drag & droptype· Text & formsvis· Visual judgment- Work product
WP08· App/system state- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Grader applies gains.yaml and runs 3 step tests: overshoot <5% and settling <0.5 s in all; parameter-change events must come from the rqt node (graph introspection).
Proposed partial credit
20% gains saved; 40% overshoot spec; 40% settling spec.
R07.09.01.05-T13 Locate the node adding latency in a perception pipeline
Original instruction
In fixtures/detect_pipeline (camera -> rectify -> detector -> tracker), end-to-end latency to /tracks exceeds 120 ms. Measure per-stage latency using header stamps (ros2 topic delay or a small script), identify the stage adding >50 ms and write output/latency.csv with mean and p95 per stage.
- Platforms
lin· Linux- Applications
- ROS 2 CLI · Python
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP02· Records/table- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
Grader measures the same deterministic pipeline: per-stage means within 5 ms, p95 within 10 ms, slow stage identified correctly in output/answer.txt.
Proposed partial credit
40% slow stage correct; 40% per-stage means; 20% p95.
R07.09.01.05-T14 Bring up lifecycle nodes and fix one that fails to configure
Original instruction
fixtures/lifecycle_demo has 4 managed nodes that must be configured and activated in order: map_server, amcl, planner, controller. One fails on configure. Use ros2 lifecycle commands and logs to find why, fix its parameter file reference, and leave all 4 active.
- Platforms
lin· Linux- Applications
- ROS 2 CLI
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP08· App/system state- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Grader queries ros2 lifecycle get for all 4: active; transition event log shows the required order; launch diff limited to the parameter file path.
Proposed partial credit
30% cause identified; 30% fix; 40% all active in correct order.
R07.09.01.05-T15 Correlate motor driver warnings with current spikes in Foxglove
Original instruction
Open fixtures/agv_shift.mcap in Foxglove Studio. Build a layout with a 3D panel, a plot of /motor/current, an image panel and a diagnostics panel. Find each time window where /diagnostics reports WARN for 'motor_driver' and the peak current within it. Export the layout JSON and output/windows.csv.
- Platforms
lin· Linuxmac· macOSwin· Windows- Applications
- Foxglove Studio
- Interfaces
desk· Desktop GUI- GUI need · task setting
HY· Hybrid- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
click· Point & clickdrag· Drag & dropnav· Pan/zoom/scrollvis· Visual judgment- Work product
WP02· Records/table- Conditions
- None declared
- Proposed difficulty
- 5 / 5
Proposed verifier
Grader computes WARN windows and peak currents from the bag: window starts/ends within 0.2 s and peaks within 0.1 A; layout JSON includes the 4 panel types bound to the right topics.
Proposed partial credit
20% layout; 40% window boundaries; 40% peak currents.
R07.09.01.05-T16 Configure a diagnostic aggregator with grouped analyzers
Original instruction
Write output/analyzers.yaml for diagnostic_aggregator in fixtures/mobile_base so /diagnostics_agg groups status into Motors, Sensors (Lidar, IMU, Cameras) and Power, matching names in input/diag_spec.md; launch it and confirm Sensors/Cameras rolls up to the worst child level.
- Platforms
lin· Linux- Applications
- ROS 2 CLI · diagnostics
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP08· App/system state- Conditions
- None declared
- Proposed difficulty
- 4 / 5
Proposed verifier
Grader launches with the YAML: /diagnostics_agg contains exactly the specified groups with correct membership; injected camera ERROR propagates to /Sensors/Cameras and /Sensors.
Proposed partial credit
50% group membership; 30% roll-up behavior; 20% YAML valid and loads.
R07.09.01.05-T17 Repair a Python launch file so all six nodes start
Original instruction
ros2 launch fixtures/inspection_bot/launch/inspect.launch.py exits immediately. Fix the errors (a wrong package share path substitution and a remap that points to a non-existent topic) so all 6 nodes start and /inspection/report is published.
- Platforms
lin· Linux- Applications
- ROS 2 CLI
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Grader launches the fixed file: all 6 nodes in ros2 node list within 15 s, /inspection/report publishes; diff limited to the two faulty expressions.
Proposed partial credit
40% path fix; 30% remap fix; 30% full bring-up.
R07.09.01.05-T18 Record a filtered, split and compressed rosbag
Original instruction
While fixtures/survey_run.launch.py plays a 60 s scripted mission, record only /scan, /odom, /tf and /tf_static into output/survey_bag using mcap storage, zstd file compression and 100 MB splits. Then write ros2 bag info output to output/info.txt.
- Platforms
lin· Linux- Applications
- ROS 2 CLI · rosbag2
- Interfaces
term· Terminal- GUI need · task setting
CL· CLI-sufficient- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP09· Files & folders- Conditions
- None declared
- Proposed difficulty
- 2 / 5
Proposed verifier
Grader reads metadata.yaml: exactly the 4 topics, mcap storage, zstd compression, split size setting, duration >=58 s and message counts within 2% of the publisher counts.
Proposed partial credit
40% topic filter; 30% storage/compression/split; 30% completeness.
R07.09.01.05-T19 Find and fix intermittent joint_states dropouts
Original instruction
In fixtures/arm_driver_ws, /joint_states drops for ~200 ms roughly every 45 s. Use ros2 topic hz/delay and ros2_tracing (LTTng) to find the blocking callback in the driver node, fix it by moving that work to a separate callback group with a MultiThreadedExecutor, and show 10 min without gaps >30 ms.
- Platforms
lin· Linux- Applications
- ROS 2 CLI · ros2_tracing · C++
- Interfaces
term· Terminal- GUI need · task setting
HY· Hybrid- GUI need · ordinary access
CL· CLI-sufficient- Interaction primitives
code· Code & commands- Work product
WP06· Code/engineering- Conditions
long· Long-horizon- Proposed difficulty
- 5 / 5
Proposed verifier
Grader rebuilds and runs 10 min: max inter-message gap <30 ms; the trace-identified callback is in a separate callback group; output/analysis.md cites the trace evidence (callback name and duration).
Proposed partial credit
30% root cause with trace evidence; 40% fix compiles and is structurally right; 30% no gaps over 10 min.
R07.09.01.05-T20 Spot the flipped camera stream and correct its parameter
Original instruction
Four cameras in fixtures/quad_cam publish /cam_front, /cam_rear, /cam_left, /cam_right. One is mounted upside down but its flip parameter is wrong. View the streams in rqt_image_view against the scene layout in input/layout.png, identify the flipped one and set its 'flip_vertical' parameter in the YAML.
- Platforms
lin· Linux- Applications
- rqt
- Interfaces
desk· Desktop GUI- GUI need · task setting
G2· GUI-essential- GUI need · ordinary access
G2· GUI-essential- Interaction primitives
click· Point & clickvis· Visual judgment- Work product
WP06· Code/engineering- Conditions
- None declared
- Proposed difficulty
- 3 / 5
Proposed verifier
Grader relaunches: the planted camera now renders with sky up (template match >0.9 vs reference frame); only that camera's flip parameter changed. Agent has no terminal, ROS 2 CLI or Python, so streams can only be inspected in rqt_image_view; topic subscriptions from non-rqt nodes are detected by graph introspection and fail.
Proposed partial credit
40% correct camera identified; 40% image orientation fixed; 20% no other changes.
Mapped research references
No benchmark reference is assigned to this class in the current mapping.