Skip to content

dora-rs/node-hub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

27 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Dora Node Hub

This hub contains useful pre-built nodes for Dora.

Packages

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

Type Title Description Support Downloads License
Camera Kornia GST Capture Video Capture using Gstreamer βœ… License
Camera Kornia V4L Capture Video stream for Linux Cameras βœ… License
Camera PyOrbbeckSDK Image and depth from Orbbeck Camera πŸ“ Downloads License
Camera PyRealsense Image and depth from Realsense LinuxπŸ†—
MacπŸ› οΈ
Downloads License
Camera OpenCV Video Capture Image stream from OpenCV Camera βœ… Downloads License
Peripheral Keyboard Keyboard char listener βœ… Downloads License
Peripheral Microphone Audio from microphone βœ… Downloads License
Peripheral PyAudio(Speaker) Output audio from speaker βœ… Downloads License
Actuator Feetech Feetech Client πŸ“
Actuator Dynamixel Dynamixel Client πŸ“
Chassis Agilex - UGV Robomaster Client πŸ†— Downloads License
Chassis Dora Kit Car Open Source Chassis πŸ†— Downloads License
Chassis DJI - Robomaster S1 Robomaster Client πŸ“
Arm Alex Koch - Low Cost Robot Alex Koch - Low Cost Robot Client πŸ“
Arm Agilex - Piper Agilex arm client πŸ†— Downloads License
Arm Lebai - LM3 Lebai client πŸ“
Robot Trossen - Aloha Aloha client πŸ“
Robot Pollen - Reachy 1 Reachy 1 Client πŸ“
Robot Pollen - Reachy 2 Reachy 2 client πŸ†— Downloads License
Voice Activity Detection(VAD) Silero VAD Silero Voice activity detection βœ… Downloads License
Speech to Text(STT) Whisper Transcribe audio to text βœ… Downloads License
Object Detection Yolov8 Object detection βœ… Downloads License
Segmentation SAM2 Segment Anything Cudaβœ…
MetalπŸ› οΈ
Downloads License
Large Language Model(LLM) Qwen2.5 Large Language Model using Qwen βœ… Downloads License
Vision Language Model(VLM) InternVL InternVL is a vision language model πŸ†— Downloads License
Vision Language Model(VLM) Qwen2.5-vl Vision Language Model using Qwen2.5 VL βœ… Downloads License
Vision Language Action(VLA) RDT-1B Infer policy using Robotic Diffusion Transformer πŸ†— Downloads License
Translation Opus MT Translate text between language πŸ†— Downloads License
Translation ArgosTranslate Open Source translation engine πŸ†— Downloads License
Text to Speech(TTS) Kokoro TTS Efficient Text to Speech βœ… Downloads License
Recorder Llama Factory Recorder Record data to train LLM and VLM πŸ†— Downloads License
Recorder LeRobot Recorder LeRobot Recorder helper πŸ“
Visualization Plot Simple OpenCV plot visualization βœ… Downloads License
Visualization Rerun Visualization tool βœ… Downloads License
Simulator Mujoco Mujoco Simulator πŸ“
Simulator Gymnasium Experimental OpenAI Gymnasium bridge πŸ“
Simulator Carla Carla Simulator πŸ“
nan Kornia Sobel Operator Kornia image processing Sobel operator βœ… License

Examples

Type Title Description Last Commit
Audio Speech to Text(STT) Transform speech to text. License
Audio Translation Translate audio in real time. License
Vision Vision Language Model(VLM) Use a VLM to understand images. License
Vision YOLO Use YOLO to detect object within image. License
Vision Camera Simple webcam plot example License
Model Training Piper RDT Piper RDT Pipeline License
Model Training LeRobot - Alexander Koch Training Alexander Koch Low Cost Robot with LeRobot License
ROS2 C++ ROS2 Example Example using C++ ROS2 License
ROS2 Rust ROS2 Example Example using Rust ROS2 License
ROS2 Python ROS2 Example Example using Python ROS2 License
Benchmark GPU Benchmark GPU Benchmark of dora-rs License
Benchmark CPU Benchmark CPU Benchmark of dora-rs License
Tutorial Rust Example Example using Rust License
Tutorial Python Example Example using Python License
Tutorial CMake Example Example using CMake License
Tutorial C Example Example with C node License
Tutorial CUDA Example Example using CUDA Zero Copy License
Tutorial C++ Example Example with C++ node License

Python

Add a new python node

  • To work on a new node, start by:
cd node-hub
dora new your-node-name --lang python --kind node
cd ./your-node-name
uv venv --seed -p 3.11
uv pip install -e . # Install
uv run ruff check . --fix # Format
uv run ruff check . # Lint
uv run pytest . # Test
  • To add a python dependency just do:
uv add numpy # for example

The package is then added to your pyproject.toml

  • Modify the code within main.py in your liking.

  • Create a PR and let the CI/CD run test on it πŸ™‹

Structure

The structure of the node hub is as follows (please use the same structure if you need to add a new node):

node-hub/
└── your-node/
    β”œβ”€β”€ README.md
    β”œβ”€β”€ your-node
    β”‚   β”œβ”€β”€ __init__.py
    β”‚   β”œβ”€β”€ __main__.py
    β”‚   └── main.py
    β”œβ”€β”€ pyproject.toml
    └── tests
        └── test_<your-node>.py

The idea is to make a pyproject.toml file that will install the required dependencies for the node and attach main function of the node inside a callable script in your environment.

To do so, you will need to add a main function inside the main.py file.

def main():
    pass

And then you will need to adapt the following pyproject.toml file:

[project]
name = "[name of the node e.g. video-encoder, with '-' to replace spaces]"
version = "0.1"
authors = [{ name = "[Pseudo/Name]", email = "[email]" }]
description = "Dora Node for []"
readme = "README.md"
license = { text = "MIT" }

dependencies = [
    "dora-rs >= 0.3.8",
]

[project.scripts]
[name of the node with '-' to replace spaces] = "[name of the node with '_' to replace spaces].main:main"

[tool.ruff.lint]
extend-select = [
  "D",    # pydocstyle
  "UP",   # Ruff's UP rule
  "PERF", # Ruff's PERF rule
  "RET",  # Ruff's RET rule
  "RSE",  # Ruff's RSE rule
  "NPY",  # Ruff's NPY rule
  "N",    # Ruff's N rule
  "I",    # Ruff's I rule
]

Finally, the README.md file should explicit all inputs/outputs of the node and how to configure it in the YAML file.

Example

[project]
name = "opencv-plot"
version = "0.1"
authors = [
    "Haixuan Xavier Tao <[email protected]>",
    "Enzo Le Van <[email protected]>"
]
description = "Dora Node for plotting data with OpenCV"
readme = "README.md"
license = { text = "MIT" }
requires-python = ">=3.7"

dependencies = [
    "dora-rs >= 0.3.8",
]
[dependency-groups]
dev = ["pytest >=8.1.1", "ruff >=0.9.1"]

[project.scripts]
opencv-plot = "opencv_plot.main:main"

[tool.ruff.lint]
extend-select = [
  "D",    # pydocstyle
  "UP",   # Ruff's UP rule
  "PERF", # Ruff's PERF rule
  "RET",  # Ruff's RET rule
  "RSE",  # Ruff's RSE rule
  "NPY",  # Ruff's NPY rule
  "N",    # Ruff's N rule
  "I",    # Ruff's I rule
]

Adding git dependency

  • If a git repository is added as submodule. Proper path should be added in pyproject.toml inorder to make sure that linting and testing are exempted for that dependency.
  • A very good example of how this can be done is as follows

Correct approach:

[tool.ruff]
exclude = ["dora_magma/Magma"]

[tool.black]
extend.exclude = "dora_magma/Magma"

Incorrect Approach:

[tool.ruff]
exclude = ["dora-magma/dora_magma/Magma"]

[tool.black]
extend.exclude = "dora_magma/Magma"
Note:
  • dora-magma is root folder of the node.

Rust

Add a new rust node

cd node-hub
dora new your-node-name --lang rust --kind node
cd ./your-node-name

Steps Before Building

  • Before building the node, make sure to add your node to the workspace members list in the root Cargo.toml file:
[workspace]
members = [
...
"node-hub/your-node-name"
]
  • Also change the Cargo.toml file in your node to use the workspace version of dora-node-api:
[dependencies]
dora-node-api = { workspace = true }

Structure

The structure of the node hub for Rust is as follows (please use the same structure if you need to add a new node):

node-hub/
└── your-node/
    β”œβ”€β”€ Cargo.toml
    β”œβ”€β”€ README.md
    └── src/
           └── main.rs

The README.md file should explicit all inputs/outputs of the node and how to configure it in the YAML file.

License

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •