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.0.tar.gz (16.9 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.0-py3-none-any.whl (15.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: babyros-0.1.0.tar.gz
  • Upload date:
  • Size: 16.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.4

File hashes

Hashes for babyros-0.1.0.tar.gz
Algorithm Hash digest
SHA256 34fb4a9a788f9fd977b69d25dee8dad11a7ef22affb196e107b8e0778264df18
MD5 802830895b77c059cc8453dceb944e3e
BLAKE2b-256 40998d0fad995d5e923e31e9d2453d89e4a740d67e8fdb88f6004bc34f3b48e9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: babyros-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.4

File hashes

Hashes for babyros-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d0927d20c0d3439bf03cd682442399e39b6dee215cc34ef2b8b8420e3ead1102
MD5 c9e33e6789d70d510e16d01067db3206
BLAKE2b-256 6c7b56376ba1d8915fd123efa3b2d8b28eaf250f78dc48f611eac04e58198d3d

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