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.2.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.2-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: babyros-0.1.2.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.2.tar.gz
Algorithm Hash digest
SHA256 5fc01951ef9c5e2273e7239f0de1925d3a1c0be47a346b27ce5c631bce3ca26d
MD5 e89f609097b3ea0fe6c6bfe8ec9c1274
BLAKE2b-256 fd4a821143dca2750176abb353871b106c7b51920ca9034c520217824961f574

See more details on using hashes here.

Provenance

The following attestation bundles were made for babyros-0.1.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: babyros-0.1.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cd0fd5bc2f5271059ac17c3f64a903eed9d65cd1f1e10b64c06912d5710d0ef4
MD5 8b1acd9c71fb525e4a5ab13757ecdabc
BLAKE2b-256 5972cb098012b49166b5fe321bca3525adb0761835b2bb4aa6ee97ee776dac7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for babyros-0.1.2-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