BabyROS: baby version of ROS built on Zenoh
Project description
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad95bf549e48d094f5afc70b3f973d95fd0b6081e5fd0d631dc300f2b4e2cf5f
|
|
| MD5 |
3d02f2a72adf55bb54d072e4e1b77eb1
|
|
| BLAKE2b-256 |
fb3f29076ef683997ffc7683af9b558369928c7394f88d1a15fe9f3e7a2a7f18
|
Provenance
The following attestation bundles were made for babyros-0.1.1.tar.gz:
Publisher:
release.yml on telekinesis-ai/babyros
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
babyros-0.1.1.tar.gz -
Subject digest:
ad95bf549e48d094f5afc70b3f973d95fd0b6081e5fd0d631dc300f2b4e2cf5f - Sigstore transparency entry: 1329157577
- Sigstore integration time:
-
Permalink:
telekinesis-ai/babyros@5b310bded18f69aaa12999290f1fe0e2ed29afe4 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/telekinesis-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5b310bded18f69aaa12999290f1fe0e2ed29afe4 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d1c015156b7352b8eb4ae49bb1eb284973cba2f6adea4d7ca13043c911cbda3
|
|
| MD5 |
1def6d00a73e59f507819046ce1b7d73
|
|
| BLAKE2b-256 |
c94e378e8f5b0a537001ce60835f9858eefcabfe82b8530e71cc75e9523839a9
|
Provenance
The following attestation bundles were made for babyros-0.1.1-py3-none-any.whl:
Publisher:
release.yml on telekinesis-ai/babyros
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
babyros-0.1.1-py3-none-any.whl -
Subject digest:
8d1c015156b7352b8eb4ae49bb1eb284973cba2f6adea4d7ca13043c911cbda3 - Sigstore transparency entry: 1329157805
- Sigstore integration time:
-
Permalink:
telekinesis-ai/babyros@5b310bded18f69aaa12999290f1fe0e2ed29afe4 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/telekinesis-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5b310bded18f69aaa12999290f1fe0e2ed29afe4 -
Trigger Event:
push
-
Statement type: