Skip to main content

BabyROS: baby version of ROS built on Zenoh

Project description

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

2. Environment Setup (Recommended)

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.

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

babyros-0.1.1.tar.gz (16.8 kB view details)

Uploaded Source

Built Distribution

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

babyros-0.1.1-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file babyros-0.1.1.tar.gz.

File metadata

  • Download URL: babyros-0.1.1.tar.gz
  • Upload date:
  • Size: 16.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for babyros-0.1.1.tar.gz
Algorithm Hash digest
SHA256 ad95bf549e48d094f5afc70b3f973d95fd0b6081e5fd0d631dc300f2b4e2cf5f
MD5 3d02f2a72adf55bb54d072e4e1b77eb1
BLAKE2b-256 fb3f29076ef683997ffc7683af9b558369928c7394f88d1a15fe9f3e7a2a7f18

See more details on using hashes here.

Provenance

The following attestation bundles were made for babyros-0.1.1.tar.gz:

Publisher: release.yml on telekinesis-ai/babyros

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file babyros-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: babyros-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 15.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for babyros-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8d1c015156b7352b8eb4ae49bb1eb284973cba2f6adea4d7ca13043c911cbda3
MD5 1def6d00a73e59f507819046ce1b7d73
BLAKE2b-256 c94e378e8f5b0a537001ce60835f9858eefcabfe82b8530e71cc75e9523839a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for babyros-0.1.1-py3-none-any.whl:

Publisher: release.yml on telekinesis-ai/babyros

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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