Skip to main content

alt text

License Python 3.11+

BabyROS

BabyROS is a mini version of ROS built on top of the Zenoh protocol. It provides a familiar pub/sub/client/server architecture for robotics and distributed systems without the heavy overhead of a full ROS installation.

Features

  • Powered by Zenoh: Ultra-low latency and high-throughput communication.
  • Minimalist: No complex middleware setup; just Python and Zenoh.
  • Familiar API: Designed for developers transitioning from ROS/ROS2.

Getting Started

1. Clone the Repository

git clone https://github.com/telekinesis-ai/babyros

Change directory

cd babyros

We recommend using Miniconda or Anaconda to manage your environment:

conda create -n babyros python=3.11

Activate your environment:

conda activate babyros

You can deactivate your environment:

conda deactivate babyros

3. Installation

Install the package in editable mode for development:

pip install -e .

(For Inter-Device Communication) Installation

Install the Zenoh router. Documentation available in: Zenoh Docs

Usage Example

To see BabyROS in action, you can run the provided example scripts.

Publisher

Open a terminal and run:

python examples/publisher_example.py

When testing is done, kill terminal with Ctrl+C.

Subscriber

In a second terminal (with the babyros environment active), run:

python examples/subscriber_example.py

When testing is done, kill terminal with Ctrl+C.

Open Issues

  • Datatype information
  • Safety checks

Zenoh Config Comparison Between Zenoh, BabyROS, and RMW Zenoh

Key BabyROS Zenoh RMW Zenoh
adminspace.enabled False False True
connect.endpoints [] [] ['tcp/localhost:7447']
connect.exit_on_failure None None —
connect.exit_on_failure.client — — True
connect.exit_on_failure.peer — — False
connect.exit_on_failure.router — — False
connect.retry None None —
connect.retry.period_increase_factor — — 2.0
connect.retry.period_init_ms — — 1000
connect.retry.period_max_ms — — 4000
connect.timeout_ms None None —
connect.timeout_ms.client — — 0
connect.timeout_ms.peer — — -1
connect.timeout_ms.router — — -1
listen.endpoints — — ['tcp/localhost:0']
listen.endpoints.peer ['tcp/[::]:0'] ['tcp/[::]:0'] —
listen.endpoints.router ['tcp/[::]:7447'] ['tcp/[::]:7447'] —
listen.exit_on_failure None None True
listen.retry None None —
listen.retry.period_increase_factor — — 2.0
listen.retry.period_init_ms — — 1000
listen.retry.period_max_ms — — 4000
listen.timeout_ms None None 0
mode None None peer
open.return_conditions.connect_scouted None None True
open.return_conditions.declares None None True
queries_default_timeout None None 600000
routing.interests.timeout None None 10000
routing.peer.mode None None peer_to_peer
routing.router.peers_failover_brokering None None True
scouting.delay None None 500
scouting.gossip.autoconnect None None —
scouting.gossip.autoconnect.peer — — ['router', 'peer']
scouting.gossip.autoconnect.router — — []
scouting.gossip.autoconnect_strategy None None —
scouting.gossip.autoconnect_strategy.peer.to_peer — — greater-zid
scouting.gossip.autoconnect_strategy.peer.to_router — — always
scouting.gossip.enabled None None True
scouting.gossip.multihop None None False
scouting.gossip.target None None —
scouting.gossip.target.peer — — ['router']
scouting.gossip.target.router — — ['router', 'peer']
scouting.multicast.address None None 224.0.0.224:7446
scouting.multicast.autoconnect None None —
scouting.multicast.autoconnect.client — — ['router']
scouting.multicast.autoconnect.peer — — ['router', 'peer']
scouting.multicast.autoconnect.router — — []
scouting.multicast.autoconnect_strategy None None —
scouting.multicast.autoconnect_strategy.peer.to_peer — — greater-zid
scouting.multicast.autoconnect_strategy.peer.to_router — — always
scouting.multicast.enabled None None False
scouting.multicast.interface None None auto
scouting.multicast.listen None None True
scouting.multicast.ttl None None 1
scouting.timeout None None 3000
timestamping.drop_future_timestamp None None False
timestamping.enabled None None —
timestamping.enabled.client — — True
timestamping.enabled.peer — — True
timestamping.enabled.router — — True
transport.link.tls.close_link_on_expiration None None False
transport.link.tls.enable_mtls None None False
transport.link.tls.verify_name_on_connect None None True
transport.link.tx.keep_alive 4 4 2
transport.link.tx.lease 10000 10000 60000
transport.link.tx.queue.congestion_control.block.wait_before_close 5000000 5000000 60000000
transport.shared_memory.enabled True True False
transport.shared_memory.transport_optimization.message_size_threshold 3072 3072 512
transport.shared_memory.transport_optimization.pool_size 16777216 16777216 50331648
transport.unicast.accept_pending 100 100 10000
transport.unicast.accept_timeout 10000 10000 60000
transport.unicast.max_sessions 1000 1000 10000
transport.unicast.open_timeout 10000 10000 60000

License

Distributed under the Apache-2.0 License. See LICENSE for more information.

Metadata

Release files for babyros 0.1.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for babyros 0.1.6
File Size Uploaded
babyros-0.1.6.tar.gz 20.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for babyros 0.1.6
File Interpreter ABI Platform
babyros-0.1.6-py3-none-any.whl Python 3 none any Details

Total release size: 38.3 kB

Release files / babyros-0.1.6.tar.gz

Download URL babyros-0.1.6.tar.gz
Size 20.7 kB
Tags Source
SHA-256 checksum
How to use checksums
0b9a63d72185aab4ec7ee7ade12d881edd2c4d4b5131011ff41db757f4597e4a
BLAKE2b-256 checksum
How to use checksums
7bbde38fc0112a2ec19e6064259bdf643f5071ed147af130be478b71b9af53a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 27, 2026.

Transparency log

Release files / babyros-0.1.6-py3-none-any.whl

Download URL babyros-0.1.6-py3-none-any.whl
Size 17.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7ae2f1a2529c2489a28c70fddca110df3bdf086ca0b7dcd6b3d31a3a24c205e0
BLAKE2b-256 checksum
How to use checksums
899ff18a21468f216415c71f7a6579ae3341f1326bbef2c455b0b4bcd26ffdbe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 27, 2026.

Transparency log

Release history Release notifications | RSS feed

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

This release

0.1.6 This release

2 release files

0.1.4

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page