huaihailv/dora_realman

4

stars

3,452

commits

Rust

primary language

Apr 18, 2025

updated

README

Website | Python API | Rust API | Guide | Discord

dora-rs%2Fdora | Trendshift

Highlights

  • πŸš€ dora-rs is a framework to run realtime multi-AI and multi-hardware applications.
  • πŸ¦€ dora-rs internals are 100% Rust making it extremely fast compared to alternative such as being ⚑️ 10-17x faster than ros2.
  • ❇️ Includes a large set of pre-packaged nodes for fast prototyping which simplifies integration of hardware, algorithms, and AI models.

Latency benchmark with Python API for both framework, sending 40M of random bytes.

Latest News πŸŽ‰

2025

[04/05] Add support for dora-cotracker to track any point on a frame, dora-rav1e AV1 encoding up to 12bit and dora-dav1d AV1 decoding,

  • [03/05] Add support for dora async Python.
  • [03/05] Add support for Microsoft Phi4, Microsoft Magma.
  • [03/05] dora-rs has been accepted to GSoC 2025 πŸŽ‰, with the following idea list.
  • [03/04] Add support for Zenoh for distributed dataflow.
  • [03/04] Add support for Meta SAM2, Kokoro(TTS), Improved Qwen2.5 Performance using llama.cpp.
  • [02/25] Add support for Qwen2.5(LLM), Qwen2.5-VL(VLM), outetts(TTS)

Support Matrix

dora-rs
APIsPython >= 3.7 including sync β­βœ…
Rust βœ…
C/C++ πŸ†—
ROS2 >= Foxy πŸ†—
OSLinux: Arm 32 β­βœ… Arm 64 β­βœ… x64_86 β­βœ…
MacOS: Arm 64 β­βœ… x64_86 βœ…
Windows: x64_86 πŸ†—
Android: πŸ› οΈ (Blocked by: https://github.com/elast0ny/shared_memory/issues/32)
IOS: πŸ› οΈ
Message FormatArrow βœ…
Standard Specification πŸ› οΈ
Local CommunicationShared Memory βœ…
Cuda IPC πŸ“
Remote CommunicationZenoh πŸ“
Metrics, Tracing, and LoggingOpentelemetry πŸ“
ConfigurationYAML βœ…
Package Managerpip: Python Node βœ… Rust Node βœ… C/C++ Node πŸ› οΈ
cargo: Rust Node βœ…
  • ⭐ = Recommended
  • βœ… = First Class Support
  • πŸ†— = Best Effort Support
  • πŸ“ = Experimental and looking for contributions
  • πŸ› οΈ = Unsupported but hoped for through contributions

Everything is open for contributions πŸ™‹

Node Hub

Feel free to modify this README with your own nodes so that it benefits the community.

TypeTitleSupportDescriptionDownloadsLicense
CameraPyOrbbeckSDKπŸ“Image and depth from Orbbeck CameraDownloadsLicense
CameraPyRealsenseLinuxπŸ†—
MacπŸ› οΈ
Image and depth from RealsenseDownloadsLicense
CameraOpenCV Video Captureβœ…Image stream from OpenCV CameraDownloadsLicense
PeripheralKeyboardβœ…Keyboard char listenerDownloadsLicense
PeripheralMicrophoneβœ…Audio from microphoneDownloadsLicense
PeripheralPyAudio(Speaker)βœ…Output audio from speakerDownloadsLicense
ActuatorFeetechπŸ“Feetech Client
ActuatorDynamixelπŸ“Dynamixel Client
ChassisAgilex - UGVπŸ†—Robomaster ClientDownloadsLicense
ChassisDJI - Robomaster S1πŸ“Robomaster Client
ChassisDora Kit CarπŸ†—Open Source ChassisDownloadsLicense
ArmAlex Koch - Low Cost RobotπŸ“Alex Koch - Low Cost Robot Client
ArmLebai - LM3πŸ“Lebai client
ArmAgilex - PiperπŸ†—Agilex arm clientDownloadsLicense
RobotPollen - Reachy 1πŸ“Reachy 1 Client
RobotPollen - Reachy 2πŸ†—Reachy 2 clientDownloadsLicense
RobotTrossen - AlohaπŸ“Aloha client
Voice Activity Detection(VAD)Silero VADβœ…Silero Voice activity detectionDownloadsLicense
Speech to Text(STT)Whisperβœ…Transcribe audio to textDownloadsLicense
Object DetectionYolov8βœ…Object detectionDownloadsLicense
SegmentationSAM2Cudaβœ…
MetalπŸ› οΈ
Segment AnythingDownloadsLicense
Large Language Model(LLM)Qwen2.5βœ…Large Language Model using QwenDownloadsLicense
Vision Language Model(VLM)Qwen2.5-vlβœ…Vision Language Model using Qwen2.5 VLDownloadsLicense
Vision Language Model(VLM)InternVLπŸ†—InternVL is a vision language modelDownloadsLicense
Vision Language Action(VLA)RDT-1BπŸ†—Infer policy using Robotic Diffusion TransformerDownloadsLicense
TranslationArgosTranslateπŸ†—Open Source translation engineDownloadsLicense
TranslationOpus MTπŸ†—Translate text between languageDownloadsLicense
Text to Speech(TTS)Kokoro TTSβœ…Efficient Text to SpeechDownloadsLicense
RecorderLlama Factory RecorderπŸ†—Record data to train LLM and VLMDownloadsLicense
RecorderLeRobot RecorderπŸ“LeRobot Recorder helper
VisualizationPlotβœ…Simple OpenCV plot visualizationDownloadsLicense
VisualizationRerunβœ…Visualization toolDownloadsLicense
SimulatorMujocoπŸ“Mujoco Simulator
SimulatorCarlaπŸ“Carla Simulator
SimulatorGymnasiumπŸ“Experimental OpenAI Gymnasium bridge

Examples

TypeTitleDescriptionLast Commit
AudioSpeech to Text(STT)Transform speech to text.License
AudioTranslationTranslate audio in real time.License
VisionVision Language Model(VLM)Use a VLM to understand images.License
VisionYOLOUse YOLO to detect object within image.License
VisionCameraSimple webcam plot exampleLicense
Model TrainingPiper RDTPiper RDT PipelineLicense
Model TrainingLeRobot - Alexander KochTraining Alexander Koch Low Cost Robot with LeRobotLicense
ROS2C++ ROS2 ExampleExample using C++ ROS2License
ROS2Rust ROS2 ExampleExample using Rust ROS2License
ROS2Python ROS2 ExampleExample using Python ROS2License
BenchmarkGPU BenchmarkGPU Benchmark of dora-rsLicense
BenchmarkCPU BenchmarkCPU Benchmark of dora-rsLicense
TutorialRust ExampleExample using RustLicense
TutorialPython ExampleExample using PythonLicense
TutorialCMake ExampleExample using CMakeLicense
TutorialC ExampleExample with C nodeLicense
TutorialCUDA ExampleExample using CUDA Zero CopyLicense
TutorialC++ ExampleExample with C++ nodeLicense

Getting Started

Installation

pip install dora-rs-cli
Additional installation methods

Install dora with our standalone installers, or from crates.io:

With cargo

cargo install dora-cli

With Github release for macOS and Linux

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/dora-rs/dora/releases/latest/download/dora-cli-installer.sh | sh

With Github release for Windows

powershell -ExecutionPolicy ByPass -c "irm https://github.com/dora-rs/dorareleases/latest/download/dora-cli-installer.ps1 | iex"

With Source

git clone https://github.com/dora-rs/dora.git
cd dora
cargo build --release -p dora-cli
PATH=$PATH:$(pwd)/target/release

Run

  • Run the yolo python example:
## Create a virtual environment
uv venv --seed -p 3.11

## Install nodes dependencies of a remote graph
dora build https://raw.githubusercontent.com/dora-rs/dora/refs/heads/main/examples/object-detection/yolo.yml --uv

## Run yolo graph
dora run yolo.yml --uv

Make sure to have a webcam

To stop your dataflow, you can use ctrl+c

  • To understand what is happening, you can look at the dataflow with:
cat yolo.yml
  • Resulting in:
nodes:
  - id: camera
    build: pip install opencv-video-capture
    path: opencv-video-capture
    inputs:
      tick: dora/timer/millis/20
    outputs:
      - image
    env:
      CAPTURE_PATH: 0
      IMAGE_WIDTH: 640
      IMAGE_HEIGHT: 480

  - id: object-detection
    build: pip install dora-yolo
    path: dora-yolo
    inputs:
      image: camera/image
    outputs:
      - bbox

  - id: plot
    build: pip install dora-rerun
    path: dora-rerun
    inputs:
      image: camera/image
      boxes2d: object-detection/bbox
  • In the above example, we can understand that the camera is sending image to both the rerun viewer as well as a yolo model that generates bounding box that is visualized within rerun.

Documentation

The full documentation is available on our website. A lot of guides are available on this section of our website.

What is Dora? And what features does Dora offer?

Dataflow-Oriented Robotic Architecture (dora-rs) is a framework that makes creation of robotic applications fast and simple.

dora-rs implements a declarative dataflow paradigm where tasks are split between nodes isolated as individual processes.

The dataflow paradigm has the advantage of creating an abstraction layer that makes robotic applications modular and easily configurable.

TCP Communication and Shared Memory

Communication between nodes is handled with shared memory on a same machine and TCP on distributed machines. Our shared memory implementation tracks messages across processes and discards them when obsolete. Shared memory slots are cached to avoid new memory allocation.

Arrow Message Format

Nodes communicate with Apache Arrow Data Format.

Apache Arrow is a universal memory format for flat and hierarchical data. The Arrow memory format supports zero-copy reads for lightning-fast data access without serialization overhead. It defines a C data interface without any build-time or link-time dependency requirement, that means that dora-rs has no compilation step beyond the native compiler of your favourite language.

Opentelemetry

dora-rs uses Opentelemetry to record all your logs, metrics and traces. This means that the data and telemetry can be linked using a shared abstraction.

Opentelemetry is an open source observability standard that makes dora-rs telemetry collectable by most backends such as elasticsearch, prometheus, Datadog...

Opentelemetry is language independent, backend agnostic, and easily collect distributed data, making it perfect for dora-rs applications.

ROS2 Bridge

Note: this feature is marked as unstable.

  • Compilation Free Message passing to ROS 2
  • Automatic conversion ROS 2 Message <-> Arrow Array
import pyarrow as pa

# Configuration Boilerplate...
turtle_twist_writer = ...

## Arrow Based ROS2 Twist Message
## which does not require ROS2 import
message = pa.array([{
            "linear": {
                "x": 1,
            },
            "angular": {
                "z": 1
            },
        }])

turtle_twist_writer.publish(message)

You might want to use ChatGPT to write the Arrow Formatting: https://chat.openai.com/share/4eec1c6d-dbd2-46dc-b6cd-310d2895ba15

Zenoh Integration for Distributed Dataflow (Experimental)

Zenoh is a high-performance pub/sub and query protocol that unifies data in motion and at rest. In dora-rs, Zenoh is used for remote communication between nodes running on different machines, enabling distributed dataflow across networks.

What is Zenoh?

  • Definition:
    Zenoh is an open-source communication middleware offering pub/sub and query capabilities.
  • Benefits in DORA:
    • Simplifies communication between distributed nodes.
    • Handles NAT traversal and inter-network communication.
    • Integrates with DORA to manage remote data exchange while local communication still uses efficient shared memory.

Enabling Zenoh Support

  1. Run a Zenoh Router (zenohd):
    Launch a Zenoh daemon to mediate communication. For example, using Docker:

    docker run -p 7447:7447 -p 8000:8000 --name zenoh-router eclipse/zenohd:latest
    
## Create a Zenoh Configuration File πŸŽ›οΈ

Create a file (e.g., `zenoh.json5`) with the router endpoint details:

```json5
{
  connect: {
    endpoints: ["tcp/203.0.113.10:7447"],
  },
}
```

Launch DORA Daemons with Zenoh Enabled πŸš€

On each machine, export the configuration and start the daemon:

export ZENOH_CONFIG=/path/to/zenoh.json5
dora daemon --coordinator-addr <COORD_IP> --machine-id <MACHINE_NAME>

Deploy Distributed Nodes via YAML πŸ“„

Mark nodes for remote deployment using the _unstable_deploy key:

nodes:
  - id: camera_node
    outputs: [image]

  - id: processing_node
    _unstable_deploy:
      machine: robot1
      path: /home/robot/dora-nodes/processing_node
    inputs:
      image: camera_node/image
    outputs: [result]

Start the Coordinator and Dataflow 🏁

Run the coordinator on a designated machine and start the dataflow:

dora coordinator
dora start dataflow.yml

YAML Example for Distributed Dataflow πŸ“˜

communication:
  zenoh: {}

nodes:
  - id: camera_node
    custom:
      run: ./camera_driver.py
    outputs:
      - image

  - id: processing_node
    _unstable_deploy:
      machine: robot1
      path: /home/robot/dora-nodes/processing_node
    inputs:
      image: camera_node/image
    outputs:
      - result

Contributing

We are passionate about supporting contributors of all levels of experience and would love to see you get involved in the project. See the contributing guide to get started.

Discussions

Our main communication channels are:

Feel free to reach out on any topic, issues or ideas.

We also have a contributing guide.

License

This project is licensed under Apache-2.0. Check out NOTICE.md for more information.


Further Resources πŸ“š

Contributors

(top 30 of 39)

haixuanTao

1,537 commits

phil-opp

1,402 commits

eduidl

138 commits

XxChang

44 commits

huaihailv/dora_realman

4

stars

3,452

commits

Rust

primary language

Apr 18, 2025

updated

README

Website | Python API | Rust API | Guide | Discord

dora-rs%2Fdora | Trendshift

Highlights

  • πŸš€ dora-rs is a framework to run realtime multi-AI and multi-hardware applications.
  • πŸ¦€ dora-rs internals are 100% Rust making it extremely fast compared to alternative such as being ⚑️ 10-17x faster than ros2.
  • ❇️ Includes a large set of pre-packaged nodes for fast prototyping which simplifies integration of hardware, algorithms, and AI models.

Latency benchmark with Python API for both framework, sending 40M of random bytes.

Latest News πŸŽ‰

2025

[04/05] Add support for dora-cotracker to track any point on a frame, dora-rav1e AV1 encoding up to 12bit and dora-dav1d AV1 decoding,

  • [03/05] Add support for dora async Python.
  • [03/05] Add support for Microsoft Phi4, Microsoft Magma.
  • [03/05] dora-rs has been accepted to GSoC 2025 πŸŽ‰, with the following idea list.
  • [03/04] Add support for Zenoh for distributed dataflow.
  • [03/04] Add support for Meta SAM2, Kokoro(TTS), Improved Qwen2.5 Performance using llama.cpp.
  • [02/25] Add support for Qwen2.5(LLM), Qwen2.5-VL(VLM), outetts(TTS)

Support Matrix

dora-rs
APIsPython >= 3.7 including sync β­βœ…
Rust βœ…
C/C++ πŸ†—
ROS2 >= Foxy πŸ†—
OSLinux: Arm 32 β­βœ… Arm 64 β­βœ… x64_86 β­βœ…
MacOS: Arm 64 β­βœ… x64_86 βœ…
Windows: x64_86 πŸ†—
Android: πŸ› οΈ (Blocked by: https://github.com/elast0ny/shared_memory/issues/32)
IOS: πŸ› οΈ
Message FormatArrow βœ…
Standard Specification πŸ› οΈ
Local CommunicationShared Memory βœ…
Cuda IPC πŸ“
Remote CommunicationZenoh πŸ“
Metrics, Tracing, and LoggingOpentelemetry πŸ“
ConfigurationYAML βœ…
Package Managerpip: Python Node βœ… Rust Node βœ… C/C++ Node πŸ› οΈ
cargo: Rust Node βœ…
  • ⭐ = Recommended
  • βœ… = First Class Support
  • πŸ†— = Best Effort Support
  • πŸ“ = Experimental and looking for contributions
  • πŸ› οΈ = Unsupported but hoped for through contributions

Everything is open for contributions πŸ™‹

Node Hub

Feel free to modify this README with your own nodes so that it benefits the community.

TypeTitleSupportDescriptionDownloadsLicense
CameraPyOrbbeckSDKπŸ“Image and depth from Orbbeck CameraDownloadsLicense
CameraPyRealsenseLinuxπŸ†—
MacπŸ› οΈ
Image and depth from RealsenseDownloadsLicense
CameraOpenCV Video Captureβœ…Image stream from OpenCV CameraDownloadsLicense
PeripheralKeyboardβœ…Keyboard char listenerDownloadsLicense
PeripheralMicrophoneβœ…Audio from microphoneDownloadsLicense
PeripheralPyAudio(Speaker)βœ…Output audio from speakerDownloadsLicense
ActuatorFeetechπŸ“Feetech Client
ActuatorDynamixelπŸ“Dynamixel Client
ChassisAgilex - UGVπŸ†—Robomaster ClientDownloadsLicense
ChassisDJI - Robomaster S1πŸ“Robomaster Client
ChassisDora Kit CarπŸ†—Open Source ChassisDownloadsLicense
ArmAlex Koch - Low Cost RobotπŸ“Alex Koch - Low Cost Robot Client
ArmLebai - LM3πŸ“Lebai client
ArmAgilex - PiperπŸ†—Agilex arm clientDownloadsLicense
RobotPollen - Reachy 1πŸ“Reachy 1 Client
RobotPollen - Reachy 2πŸ†—Reachy 2 clientDownloadsLicense
RobotTrossen - AlohaπŸ“Aloha client
Voice Activity Detection(VAD)Silero VADβœ…Silero Voice activity detectionDownloadsLicense
Speech to Text(STT)Whisperβœ…Transcribe audio to textDownloadsLicense
Object DetectionYolov8βœ…Object detectionDownloadsLicense
SegmentationSAM2Cudaβœ…
MetalπŸ› οΈ
Segment AnythingDownloadsLicense
Large Language Model(LLM)Qwen2.5βœ…Large Language Model using QwenDownloadsLicense
Vision Language Model(VLM)Qwen2.5-vlβœ…Vision Language Model using Qwen2.5 VLDownloadsLicense
Vision Language Model(VLM)InternVLπŸ†—InternVL is a vision language modelDownloadsLicense
Vision Language Action(VLA)RDT-1BπŸ†—Infer policy using Robotic Diffusion TransformerDownloadsLicense
TranslationArgosTranslateπŸ†—Open Source translation engineDownloadsLicense
TranslationOpus MTπŸ†—Translate text between languageDownloadsLicense
Text to Speech(TTS)Kokoro TTSβœ…Efficient Text to SpeechDownloadsLicense
RecorderLlama Factory RecorderπŸ†—Record data to train LLM and VLMDownloadsLicense
RecorderLeRobot RecorderπŸ“LeRobot Recorder helper
VisualizationPlotβœ…Simple OpenCV plot visualizationDownloadsLicense
VisualizationRerunβœ…Visualization toolDownloadsLicense
SimulatorMujocoπŸ“Mujoco Simulator
SimulatorCarlaπŸ“Carla Simulator
SimulatorGymnasiumπŸ“Experimental OpenAI Gymnasium bridge

Examples

TypeTitleDescriptionLast Commit
AudioSpeech to Text(STT)Transform speech to text.License
AudioTranslationTranslate audio in real time.License
VisionVision Language Model(VLM)Use a VLM to understand images.License
VisionYOLOUse YOLO to detect object within image.License
VisionCameraSimple webcam plot exampleLicense
Model TrainingPiper RDTPiper RDT PipelineLicense
Model TrainingLeRobot - Alexander KochTraining Alexander Koch Low Cost Robot with LeRobotLicense
ROS2C++ ROS2 ExampleExample using C++ ROS2License
ROS2Rust ROS2 ExampleExample using Rust ROS2License
ROS2Python ROS2 ExampleExample using Python ROS2License
BenchmarkGPU BenchmarkGPU Benchmark of dora-rsLicense
BenchmarkCPU BenchmarkCPU Benchmark of dora-rsLicense
TutorialRust ExampleExample using RustLicense
TutorialPython ExampleExample using PythonLicense
TutorialCMake ExampleExample using CMakeLicense
TutorialC ExampleExample with C nodeLicense
TutorialCUDA ExampleExample using CUDA Zero CopyLicense
TutorialC++ ExampleExample with C++ nodeLicense

Getting Started

Installation

pip install dora-rs-cli
Additional installation methods

Install dora with our standalone installers, or from crates.io:

With cargo

cargo install dora-cli

With Github release for macOS and Linux

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/dora-rs/dora/releases/latest/download/dora-cli-installer.sh | sh

With Github release for Windows

powershell -ExecutionPolicy ByPass -c "irm https://github.com/dora-rs/dorareleases/latest/download/dora-cli-installer.ps1 | iex"

With Source

git clone https://github.com/dora-rs/dora.git
cd dora
cargo build --release -p dora-cli
PATH=$PATH:$(pwd)/target/release

Run

  • Run the yolo python example:
## Create a virtual environment
uv venv --seed -p 3.11

## Install nodes dependencies of a remote graph
dora build https://raw.githubusercontent.com/dora-rs/dora/refs/heads/main/examples/object-detection/yolo.yml --uv

## Run yolo graph
dora run yolo.yml --uv

Make sure to have a webcam

To stop your dataflow, you can use ctrl+c

  • To understand what is happening, you can look at the dataflow with:
cat yolo.yml
  • Resulting in:
nodes:
  - id: camera
    build: pip install opencv-video-capture
    path: opencv-video-capture
    inputs:
      tick: dora/timer/millis/20
    outputs:
      - image
    env:
      CAPTURE_PATH: 0
      IMAGE_WIDTH: 640
      IMAGE_HEIGHT: 480

  - id: object-detection
    build: pip install dora-yolo
    path: dora-yolo
    inputs:
      image: camera/image
    outputs:
      - bbox

  - id: plot
    build: pip install dora-rerun
    path: dora-rerun
    inputs:
      image: camera/image
      boxes2d: object-detection/bbox
  • In the above example, we can understand that the camera is sending image to both the rerun viewer as well as a yolo model that generates bounding box that is visualized within rerun.

Documentation

The full documentation is available on our website. A lot of guides are available on this section of our website.

What is Dora? And what features does Dora offer?

Dataflow-Oriented Robotic Architecture (dora-rs) is a framework that makes creation of robotic applications fast and simple.

dora-rs implements a declarative dataflow paradigm where tasks are split between nodes isolated as individual processes.

The dataflow paradigm has the advantage of creating an abstraction layer that makes robotic applications modular and easily configurable.

TCP Communication and Shared Memory

Communication between nodes is handled with shared memory on a same machine and TCP on distributed machines. Our shared memory implementation tracks messages across processes and discards them when obsolete. Shared memory slots are cached to avoid new memory allocation.

Arrow Message Format

Nodes communicate with Apache Arrow Data Format.

Apache Arrow is a universal memory format for flat and hierarchical data. The Arrow memory format supports zero-copy reads for lightning-fast data access without serialization overhead. It defines a C data interface without any build-time or link-time dependency requirement, that means that dora-rs has no compilation step beyond the native compiler of your favourite language.

Opentelemetry

dora-rs uses Opentelemetry to record all your logs, metrics and traces. This means that the data and telemetry can be linked using a shared abstraction.

Opentelemetry is an open source observability standard that makes dora-rs telemetry collectable by most backends such as elasticsearch, prometheus, Datadog...

Opentelemetry is language independent, backend agnostic, and easily collect distributed data, making it perfect for dora-rs applications.

ROS2 Bridge

Note: this feature is marked as unstable.

  • Compilation Free Message passing to ROS 2
  • Automatic conversion ROS 2 Message <-> Arrow Array
import pyarrow as pa

# Configuration Boilerplate...
turtle_twist_writer = ...

## Arrow Based ROS2 Twist Message
## which does not require ROS2 import
message = pa.array([{
            "linear": {
                "x": 1,
            },
            "angular": {
                "z": 1
            },
        }])

turtle_twist_writer.publish(message)

You might want to use ChatGPT to write the Arrow Formatting: https://chat.openai.com/share/4eec1c6d-dbd2-46dc-b6cd-310d2895ba15

Zenoh Integration for Distributed Dataflow (Experimental)

Zenoh is a high-performance pub/sub and query protocol that unifies data in motion and at rest. In dora-rs, Zenoh is used for remote communication between nodes running on different machines, enabling distributed dataflow across networks.

What is Zenoh?

  • Definition:
    Zenoh is an open-source communication middleware offering pub/sub and query capabilities.
  • Benefits in DORA:
    • Simplifies communication between distributed nodes.
    • Handles NAT traversal and inter-network communication.
    • Integrates with DORA to manage remote data exchange while local communication still uses efficient shared memory.

Enabling Zenoh Support

  1. Run a Zenoh Router (zenohd):
    Launch a Zenoh daemon to mediate communication. For example, using Docker:

    docker run -p 7447:7447 -p 8000:8000 --name zenoh-router eclipse/zenohd:latest
    
## Create a Zenoh Configuration File πŸŽ›οΈ

Create a file (e.g., `zenoh.json5`) with the router endpoint details:

```json5
{
  connect: {
    endpoints: ["tcp/203.0.113.10:7447"],
  },
}
```

Launch DORA Daemons with Zenoh Enabled πŸš€

On each machine, export the configuration and start the daemon:

export ZENOH_CONFIG=/path/to/zenoh.json5
dora daemon --coordinator-addr <COORD_IP> --machine-id <MACHINE_NAME>

Deploy Distributed Nodes via YAML πŸ“„

Mark nodes for remote deployment using the _unstable_deploy key:

nodes:
  - id: camera_node
    outputs: [image]

  - id: processing_node
    _unstable_deploy:
      machine: robot1
      path: /home/robot/dora-nodes/processing_node
    inputs:
      image: camera_node/image
    outputs: [result]

Start the Coordinator and Dataflow 🏁

Run the coordinator on a designated machine and start the dataflow:

dora coordinator
dora start dataflow.yml

YAML Example for Distributed Dataflow πŸ“˜

communication:
  zenoh: {}

nodes:
  - id: camera_node
    custom:
      run: ./camera_driver.py
    outputs:
      - image

  - id: processing_node
    _unstable_deploy:
      machine: robot1
      path: /home/robot/dora-nodes/processing_node
    inputs:
      image: camera_node/image
    outputs:
      - result

Contributing

We are passionate about supporting contributors of all levels of experience and would love to see you get involved in the project. See the contributing guide to get started.

Discussions

Our main communication channels are:

Feel free to reach out on any topic, issues or ideas.

We also have a contributing guide.

License

This project is licensed under Apache-2.0. Check out NOTICE.md for more information.


Further Resources πŸ“š

Contributors

(top 30 of 39)

haixuanTao

1,537 commits

phil-opp

1,402 commits

eduidl

138 commits

XxChang

44 commits

Languages

Rust

71.9%

Python

26.1%