Zero config telemetry tap for any ROS 1 or ROS 2 robot on your network. Discover, subscribe, stream. No ROS install required.
Project description
ros_tap
Zero config telemetry tap for any ROS robot on your network.
██████╗ ██████╗ ███████╗ ████████╗ █████╗ ██████╗
██╔══██╗██╔═══██╗██╔════╝ ╚══██╔══╝██╔══██╗██╔══██╗
██████╔╝██║ ██║███████╗ ██║ ███████║██████╔╝
██╔══██╗██║ ██║╚════██║ ██║ ██╔══██║██╔═══╝
██║ ██║╚██████╔╝███████║ ██║ ██║ ██║██║
╚═╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝
ros_tap discovers ROS 1 and ROS 2 robots on your network, subscribes to their topics, and streams telemetry wherever you want. No ROS install required. It's just a tap. You decide where the data goes.
Install
pip install ros_tap # ROS 2 support (via CycloneDDS)
pip install 'ros_tap[s3]' # + S3 output
pip install 'ros_tap[all]' # everything
Usage
Scan: see what's on the network
ros_tap scan # rich terminal dashboard
ros_tap scan --json # machine readable output
ros_tap scan --domain 42 # specific ROS 2 domain
ros_tap scan --ros1-uri http://robot:11311 # specific ROS 1 master
Record: stream telemetry
ros_tap record # stream to stdout as JSONL
ros_tap record -o ./data # write to local directory
ros_tap record -o s3://my-bucket/robots # upload to S3
ros_tap record -c power,actuators # filter by category
ros_tap record -t /battery,/joint_states # filter by topic name
ros_tap record | jq '.data' # pipe to anything
ros_tap record -o ./data -c power,imu,lidar # local, filtered
Info: check your setup
ros_tap info # shows installed backends, env vars, version
How it works
ROS 2: Joins the DDS network as a passive participant using CycloneDDS. Discovers all nodes, topics, and types via DDS multicast. No ROS 2 install needed.
ROS 1: Queries the ROS Master's XML RPC API at ROS_MASTER_URI. Gets the full node/topic graph in one call.
Auto detect: ros_tap tries both and merges results. Works in mixed ROS 1 + ROS 2 environments with ros1_bridge.
Adding a subscriber does not interfere with any existing software on the robot. DDS pub/sub is like tuning into a radio station. Other listeners and the broadcaster are unaffected.
Output formats
All sinks write JSONL (one JSON object per line):
{"ts": 1718000000.0, "node": "/turtlebot", "topic": "/battery_state", "type": "sensor_msgs/BatteryState", "ros": 2, "data": {...}}
| Sink | Flag | Notes |
|---|---|---|
| stdout | -o - (default) |
Pipe to jq, grep, curl, whatever |
| Local | -o ./path |
Auto rotating JSONL files (50 MB default) |
| S3 | -o s3://bucket/prefix |
Buffered uploads, NDJSON content type |
Auto detected categories
ros_tap classifies topics into categories for filtering:
| Category | Example topics |
|---|---|
power |
/battery_state, /battery |
actuators |
/joint_states, /motor_states |
diagnostics |
/diagnostics |
odometry |
/odom |
imu |
/imu |
lidar |
/scan |
camera |
/camera/image_raw |
command |
/cmd_vel |
thermal |
/temperature |
system |
/cpu_monitor, /memory_monitor |
Why not ros2 doctor?
ros2 doctor checks if your ROS 2 installation is healthy. ros_tap checks if your robot is healthy. Different things entirely.
ros2 doctor |
ros_tap |
|
|---|---|---|
| Checks | ROS 2 install, DDS config, QoS | Live robot telemetry |
| Requires ROS 2 | Yes | No |
| ROS 1 support | No | Yes |
| Output | Text report | JSONL stream |
| Use case | "Is my dev env broken?" | "Is my robot alive?" |
License
Apache 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ros_tap-0.1.0.tar.gz.
File metadata
- Download URL: ros_tap-0.1.0.tar.gz
- Upload date:
- Size: 16.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57d09ed3b514e4bff20de0bec00dc533f4e0a01c92dee1bd61547be301d6144a
|
|
| MD5 |
23a8fb3183485a789ff69eca64bbeee8
|
|
| BLAKE2b-256 |
a4df502ea1c70ecea077633e0ed6dda75bf6c36c219aa455adf65bee0be8134f
|
File details
Details for the file ros_tap-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ros_tap-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3774835d822b6e8b547daef4a586681ba29bc09095a59171971c529d5e7f0709
|
|
| MD5 |
4e206849252cb7ebfbf6f9198394523a
|
|
| BLAKE2b-256 |
2773863467779373519e2ee4c317ce7a122e499292c9d57d30b9097225332929
|