Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ros_tap-0.1.0.tar.gz (16.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ros_tap-0.1.0-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

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

Hashes for ros_tap-0.1.0.tar.gz
Algorithm Hash digest
SHA256 57d09ed3b514e4bff20de0bec00dc533f4e0a01c92dee1bd61547be301d6144a
MD5 23a8fb3183485a789ff69eca64bbeee8
BLAKE2b-256 a4df502ea1c70ecea077633e0ed6dda75bf6c36c219aa455adf65bee0be8134f

See more details on using hashes here.

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

Hashes for ros_tap-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3774835d822b6e8b547daef4a586681ba29bc09095a59171971c529d5e7f0709
MD5 4e206849252cb7ebfbf6f9198394523a
BLAKE2b-256 2773863467779373519e2ee4c317ce7a122e499292c9d57d30b9097225332929

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page