FLIGHTOPS

← back to the bench

THE DOCTOR

One command. A finding your agent can act on.

The doctor reads your live graph and files a report for every problem: what is wrong, the evidence on both sides, why it fails without a word in the logs, the fix, and the official doc. Add --json and your coding agent reads the same report.

onscope doctor /scan · jazzy · domain 42ERROR · qos_incompatible

Finding

Publisher /lidar_driver and subscriber /obstacle_watch have incompatible QoS on /scan. They are not connected, and no message will ever be delivered between them.

Evidence

policypublishersubscriber
reliabilityBEST_EFFORTRELIABLE
durabilityVOLATILEVOLATILE
historyKEEP_LASTKEEP_LAST
depth510

Why

DDS links a subscription to a publisher only when what the subscriber requests is no stronger than what the publisher offers. Neither side logs anything. That silence is why this costs people a day.

Fix

Set the subscriber to BEST_EFFORT, which suits high-rate sensor streams, or set the publisher to RELIABLE. History and depth are never the cause. Confirm with ros2 topic info /scan --verbose.

Concept

QoS compatibility, request versus offer. Official ROS 2 docs

$ onscope doctor /scan --json

the same report for agents · bounded · deterministic · never publishes on your graph

$ onscope doctor target jetson-01

fingerprint a Jetson over SSH against a compatibility table

$ onscope doctor pair

two machines, one real multicast probe

unknown stays unknown

Sixteen failures on file

16 of 16 on file

ERRNo. 01QoS mismatchBoth profiles side by side, the guilty policy named.
ERRNo. 02Frozen sim time/clock has listeners and no publisher.
ERRNo. 03Topic with no publisherIt exists only because something subscribed.
ERRNo. 04Remap or namespace miss/robot1/scan versus /scan.
ERRNo. 05Namespaced TFA broadcaster where no listener will look.
ERRNo. 06Two TF parentsLookups jump between two poses.
WARNNo. 07Two clocksSim time and wall time in one graph.
WARNNo. 08Silent publisherMatched, subscribed, and nothing arrived.
ERRNo. 09Empty graphEvery discovery suspect, with real values.
ERRNo. 10Risky domain IDInside the ephemeral port range.
ERRNo. 11Wrong middlewareThe RMW you set is not the one loaded.
WARNNo. 12Discovery-range trapLooks right in env, restricts nothing.
WARNNo. 13Shared container graphDocker's bridge passes multicast.
ERRNo. 14Split Gazebo partitionA UID with no passwd entry hides the sim.
INFONo. 15Nobody listeningA publisher with no subscriber.
INFONo. 16Doubled namesA namespace or remap applied twice.

NEXT DRAWER