Dataflow Oriented Robotic Architecture ⚡

--- `dora` goal is to be a low latency, composable, and distributed data flow. This project is in early development, and many features have yet to be implemented with breaking changes. Please don't take for granted the current design. `dora` primary support is with `Linux` as it is the primary OS for both Cloud and small computers. If you wish to use `dora` with another OS, please compile from source. --- ## 📖 Documentation The documentation can be found here: [https://dora-rs.github.io/dora/](https://dora-rs.github.io/dora/) --- ## Getting started 1. Install `dora` binaries from GitHub releases For linux ```bash wget https://github.com/dora-rs/dora/releases/download//dora--x86_64-Linux.zip unzip dora--x86_64-Linux.zip python3 -m pip install dora-rs== PATH=$PATH:$(pwd):$(pwd)/iceoryx dora --help ``` > This is `x86_64` only for the moment. 2. Create a new dataflow ```bash dora new abc_project --lang python cd abc_project ``` This creates the following `abc_project` directory ```bash . ├── dataflow.yml ├── node_1 │ └── node_1.py ├── op_1 │ └── op_1.py └── op_2 └── op_2.py ``` 3. Start `dora-coordinator` in a separate terminal window ```bash # New terminal window dora up ``` 4. Start your dataflow ```bash # Other window dora start dataflow.yml # Output: c95d118b-cded-4531-a0e4-cd85b7c3916c ``` The output is the unique ID of the dataflow instance, which can be used to control it through the `dora` CLI. 5. You will see in your `dora-coordinator` window operators receiving ticks. ```bash Received input tick, with data: b'' Received input tick, with data: b'' Received input tick, with data: b'' ... ``` 6. Stop your dataflow ```bash dora stop c95d118b-cded-4531-a0e4-cd85b7c3916c ``` (Pass the ID returned by `dora start` here.) 7. You can then add or modify operators or nodes. For adding nodes easily, you can use the `dora` CLI again: - Run `dora new --kind operator --lang Rust ` to create a new Rust operator named ``. - Run `dora new --kind custom-node --lang Rust ` to create a new custom node named ``. You need to add the created operators/nodes to your dataflow YAML file. 8. You can also download already implemented operators by putting links in the dataflow. This example will launch a webcam plot stream. ```yaml communication: zenoh: prefix: /abc_project nodes: - id: op_1 operator: python: https://raw.githubusercontent.com/dora-rs/dora-drives/main/operators/webcam_op.py inputs: tick: dora/timer/millis/100 outputs: - image - id: op_2 operator: python: https://raw.githubusercontent.com/dora-rs/dora-drives/main/physicals/plot.py inputs: image: op_1/image ``` > Make sure to have a webcam and cv2 install via: `pip install opencv-python` --- ## ✨ Features Composability as: - [x] `YAML` declarative programming - [x] language-agnostic: - [x] Rust - [x] C - [x] C++ - [x] Python - [x] Isolated operators and custom nodes that can be reused. Low latency as: - [x] written in ...Cough...blazingly fast ...Cough... Rust. - [x] PubSub communication with [`iceoryx`](https://iceoryx.io/v1.0.1/) Distributed as: - [x] PubSub communication with [`zenoh`](https://github.com/eclipse-zenoh/zenoh) - [x] Distributed telemetry with [`opentelemetry`](https://github.com/open-telemetry/opentelemetry-rust) --- ## 🏁 Further reading - Check out [dora-drives](https://github.com/dora-rs/dora-drives) for a template of an autonomous vehicle within a simulation. ## ⚖️ LICENSE This project is licensed under Apache-2.0. Check out [NOTICE.md](NOTICE.md) for more information.