ROS 2 reference
Fault-class glossary
This is a quick index of the recurring fault classes the Botopsy labs are built around. Each row pairs a one-line tell with the usual cause, so when a robot misbehaves you can name the class, jump to the reference page that covers it, and start bounding the bug instead of guessing.
Frames and geometry
These are transform-tree bugs. The data is usually fine and the frame lies. See Frames & tf2 for the tree model and the commands that expose a broken graph.
- Sensor data appears rotated, mirrored, or on the wrong side
- A static transform with the wrong rotation, or a frame_id that does not match the URDF.
- Robot drives the opposite direction you commanded
- A reversed sign: an encoder counting backwards, or a swapped left/right wheel mapping.
- Odometry drifts or jumps
- A wheel calibration constant wrong, or two nodes fighting over odom->base_link.
Messaging and QoS
The graph looks connected but no data crosses it. See QoS & DDS for why identical-looking endpoints never talk.
- Topic and both endpoints exist, but no data flows
- Incompatible QoS. Reliability or durability mismatch between publisher and subscriber.
- A late subscriber misses a latched message
- Publisher is VOLATILE where the subscriber needs TRANSIENT_LOCAL.
- High-rate sensor stream stutters under load
- RELIABLE QoS forcing retransmits where BEST_EFFORT is wanted.
Node lifecycle
A managed node is running but not doing its job. See Lifecycle nodes for the states and transitions.
- Node is alive but publishes nothing
- Stuck in Unconfigured or Inactive; lifecycle publishers drop messages until Active.
- A stack will not finish starting up
- A lifecycle-managed node failed to activate and halted the manager.
Timing and configuration
No dedicated page for these. They are the environmental bugs that make a correct node behave wrongly, and they cut across every class above.
- Every transform lookup fails on time
- use_sim_time mismatch: one node on wall clock, another on the sim /clock.
- A parameter change has no effect
- Edited the wrong file, wrong namespace, or the node reads the value only at configure time.
- Works in one launch, breaks in another
- A remap or namespace difference silently points a node at the wrong topic.
Reading order
If you landed here first, start with the failure-first method for the loop every case runs on, then go break something in the labs.