ros2probe: Passive eBPF tool observes ROS 2 traffic without probe effect
Swap ros2 for rp and get zero subscriber overhead, exact loss reports, and up to 28x less memory.
ros2probe is a new open‑source observability tool for ROS 2 that eliminates the observer effect inherent in traditional monitoring. Developed by Sanghoon Lee at CSI DGIST, it works by passively capturing RTPS packets off the wire using eBPF, never creating a DataReader or joining the DDS domain. This means the publisher does not have to send an extra copy, bandwidth is not stolen from the real subscriber, and the loss/latency reported is exactly what the subscriber experienced (recall 1.0). The tool mirrors the standard ROS 2 CLI – simply swap ros2 for rp – so existing scripts and workflows keep working.
On real hardware (laptop, Jetson, Raspberry Pi) with Fast DDS and Cyclone DDS, ros2probe induces 0% loss even under near‑GbE workloads, whereas rosbag2 caused up to 75.5% loss. CPU usage is up to 7× lower, and memory drops 28× (1.7 MB vs ~47 MB). The tool reconstructs the full topic graph and per‑topic metrics in userspace, independent of the DDS vendor. Recordings are saved as MCAP and replayable with ros2 bag play. A GUI (rp gui) is also available for live visualization and recording. Shared‑memory transport is a structural limitation; for those topics, a short‑lived shadow subscriber is used, but network‑transported topics keep the full benefit. Zenoh support is planned, and RViz integration is on the roadmap.
- Passive eBPF wire tap reads RTPS packets without joining the DDS domain – no extra subscriber, no perturbation.
- On near‑GbE workloads, ros2probe induces 0% loss vs up to 75.5% with rosbag2; CPU usage up to 7× lower, memory 28× lower (1.7 MB vs 47 MB).
- Drop‑in CLI: just replace ros2 with rp (e.g., rp topic hz /scan). GUI (rp gui) provides live ROS graph and MCAP recording.
Why It Matters
Enables accurate, low‑overhead debugging for roboticists, preventing observer‑induced performance degradation in production ROS 2 systems.