diff --git a/Cargo.lock b/Cargo.lock index 46cd95322..e8644be9f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1082,7 +1082,7 @@ dependencies = [ [[package]] name = "benchmark-example-node" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-node-api", "eyre", @@ -1095,7 +1095,7 @@ dependencies = [ [[package]] name = "benchmark-example-sink" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-node-api", "eyre", @@ -1758,7 +1758,7 @@ dependencies = [ [[package]] name = "communication-layer-pub-sub" -version = "0.3.5" +version = "0.3.6" dependencies = [ "flume 0.10.14", "zenoh", @@ -1766,7 +1766,7 @@ dependencies = [ [[package]] name = "communication-layer-request-reply" -version = "0.3.5" +version = "0.3.6" [[package]] name = "concurrent-queue" @@ -2266,7 +2266,7 @@ dependencies = [ [[package]] name = "dora-arrow-convert" -version = "0.3.5" +version = "0.3.6" dependencies = [ "arrow", "eyre", @@ -2274,7 +2274,7 @@ dependencies = [ [[package]] name = "dora-cli" -version = "0.3.5" +version = "0.3.6" dependencies = [ "bat", "clap 4.5.16", @@ -2310,7 +2310,7 @@ dependencies = [ [[package]] name = "dora-coordinator" -version = "0.3.5" +version = "0.3.6" dependencies = [ "ctrlc", "dora-core", @@ -2330,7 +2330,7 @@ dependencies = [ [[package]] name = "dora-core" -version = "0.3.5" +version = "0.3.6" dependencies = [ "eyre", "log", @@ -2349,7 +2349,7 @@ dependencies = [ [[package]] name = "dora-daemon" -version = "0.3.5" +version = "0.3.6" dependencies = [ "aligned-vec", "async-trait", @@ -2381,7 +2381,7 @@ dependencies = [ [[package]] name = "dora-download" -version = "0.3.5" +version = "0.3.6" dependencies = [ "eyre", "reqwest", @@ -2426,7 +2426,7 @@ dependencies = [ [[package]] name = "dora-metrics" -version = "0.3.5" +version = "0.3.6" dependencies = [ "eyre", "opentelemetry 0.22.0", @@ -2437,7 +2437,7 @@ dependencies = [ [[package]] name = "dora-node-api" -version = "0.3.5" +version = "0.3.6" dependencies = [ "aligned-vec", "arrow", @@ -2461,7 +2461,7 @@ dependencies = [ [[package]] name = "dora-node-api-c" -version = "0.3.5" +version = "0.3.6" dependencies = [ "arrow-array", "dora-node-api", @@ -2471,7 +2471,7 @@ dependencies = [ [[package]] name = "dora-node-api-cxx" -version = "0.3.5" +version = "0.3.6" dependencies = [ "cxx", "cxx-build", @@ -2488,7 +2488,7 @@ dependencies = [ [[package]] name = "dora-node-api-python" -version = "0.3.5" +version = "0.3.6" dependencies = [ "arrow", "dora-node-api", @@ -2507,7 +2507,7 @@ dependencies = [ [[package]] name = "dora-operator-api" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-arrow-convert", "dora-operator-api-macros", @@ -2516,14 +2516,14 @@ dependencies = [ [[package]] name = "dora-operator-api-c" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-operator-api-types", ] [[package]] name = "dora-operator-api-cxx" -version = "0.3.5" +version = "0.3.6" dependencies = [ "cxx", "cxx-build", @@ -2532,7 +2532,7 @@ dependencies = [ [[package]] name = "dora-operator-api-macros" -version = "0.3.5" +version = "0.3.6" dependencies = [ "proc-macro2", "quote", @@ -2541,7 +2541,7 @@ dependencies = [ [[package]] name = "dora-operator-api-python" -version = "0.3.5" +version = "0.3.6" dependencies = [ "aligned-vec", "arrow", @@ -2557,7 +2557,7 @@ dependencies = [ [[package]] name = "dora-operator-api-types" -version = "0.3.5" +version = "0.3.6" dependencies = [ "arrow", "dora-arrow-convert", @@ -2566,7 +2566,7 @@ dependencies = [ [[package]] name = "dora-record" -version = "0.3.5" +version = "0.3.6" dependencies = [ "chrono", "dora-node-api", @@ -2578,7 +2578,7 @@ dependencies = [ [[package]] name = "dora-rerun" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-node-api", "eyre", @@ -2644,7 +2644,7 @@ dependencies = [ [[package]] name = "dora-runtime" -version = "0.3.5" +version = "0.3.6" dependencies = [ "aligned-vec", "arrow", @@ -2672,7 +2672,7 @@ dependencies = [ [[package]] name = "dora-tracing" -version = "0.3.5" +version = "0.3.6" dependencies = [ "eyre", "opentelemetry 0.18.0", @@ -5006,7 +5006,7 @@ dependencies = [ [[package]] name = "multiple-daemons-example-node" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-node-api", "eyre", @@ -5017,14 +5017,14 @@ dependencies = [ [[package]] name = "multiple-daemons-example-operator" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-operator-api", ] [[package]] name = "multiple-daemons-example-sink" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-node-api", "eyre", @@ -8222,7 +8222,7 @@ dependencies = [ [[package]] name = "rust-dataflow-example-node" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-node-api", "eyre", @@ -8233,7 +8233,7 @@ dependencies = [ [[package]] name = "rust-dataflow-example-sink" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-node-api", "eyre", @@ -8241,7 +8241,7 @@ dependencies = [ [[package]] name = "rust-dataflow-example-sink-dynamic" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-node-api", "eyre", @@ -8249,7 +8249,7 @@ dependencies = [ [[package]] name = "rust-dataflow-example-status-node" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-node-api", "eyre", @@ -8268,7 +8268,7 @@ dependencies = [ [[package]] name = "rust-ros2-dataflow-example-node" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-node-api", "dora-ros2-bridge", @@ -8789,7 +8789,7 @@ dependencies = [ [[package]] name = "shared-memory-server" -version = "0.3.5" +version = "0.3.6" dependencies = [ "bincode", "eyre", @@ -9362,7 +9362,7 @@ dependencies = [ [[package]] name = "terminal-print" -version = "0.3.5" +version = "0.3.6" dependencies = [ "dora-node-api", "eyre", diff --git a/Cargo.toml b/Cargo.toml index 9bf66e7b0..ab2948a4d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,31 +40,31 @@ members = [ [workspace.package] # Make sure to also bump `apis/node/python/__init__.py` version. -version = "0.3.5" +version = "0.3.6" description = "`dora` goal is to be a low latency, composable, and distributed data flow." documentation = "https://dora.carsmos.ai" license = "Apache-2.0" repository = "https://github.com/dora-rs/dora/" [workspace.dependencies] -dora-node-api = { version = "0.3.5", path = "apis/rust/node", default-features = false } -dora-node-api-python = { version = "0.3.5", path = "apis/python/node", default-features = false } -dora-operator-api = { version = "0.3.5", path = "apis/rust/operator", default-features = false } -dora-operator-api-macros = { version = "0.3.5", path = "apis/rust/operator/macros" } -dora-operator-api-types = { version = "0.3.5", path = "apis/rust/operator/types" } -dora-operator-api-python = { version = "0.3.5", path = "apis/python/operator" } -dora-operator-api-c = { version = "0.3.5", path = "apis/c/operator" } -dora-node-api-c = { version = "0.3.5", path = "apis/c/node" } -dora-core = { version = "0.3.5", path = "libraries/core" } -dora-arrow-convert = { version = "0.3.5", path = "libraries/arrow-convert" } -dora-tracing = { version = "0.3.5", path = "libraries/extensions/telemetry/tracing" } -dora-metrics = { version = "0.3.5", path = "libraries/extensions/telemetry/metrics" } -dora-download = { version = "0.3.5", path = "libraries/extensions/download" } -shared-memory-server = { version = "0.3.5", path = "libraries/shared-memory-server" } -communication-layer-request-reply = { version = "0.3.5", path = "libraries/communication-layer/request-reply" } -dora-runtime = { version = "0.3.5", path = "binaries/runtime" } -dora-daemon = { version = "0.3.5", path = "binaries/daemon" } -dora-coordinator = { version = "0.3.5", path = "binaries/coordinator" } +dora-node-api = { version = "0.3.6", path = "apis/rust/node", default-features = false } +dora-node-api-python = { version = "0.3.6", path = "apis/python/node", default-features = false } +dora-operator-api = { version = "0.3.6", path = "apis/rust/operator", default-features = false } +dora-operator-api-macros = { version = "0.3.6", path = "apis/rust/operator/macros" } +dora-operator-api-types = { version = "0.3.6", path = "apis/rust/operator/types" } +dora-operator-api-python = { version = "0.3.6", path = "apis/python/operator" } +dora-operator-api-c = { version = "0.3.6", path = "apis/c/operator" } +dora-node-api-c = { version = "0.3.6", path = "apis/c/node" } +dora-core = { version = "0.3.6", path = "libraries/core" } +dora-arrow-convert = { version = "0.3.6", path = "libraries/arrow-convert" } +dora-tracing = { version = "0.3.6", path = "libraries/extensions/telemetry/tracing" } +dora-metrics = { version = "0.3.6", path = "libraries/extensions/telemetry/metrics" } +dora-download = { version = "0.3.6", path = "libraries/extensions/download" } +shared-memory-server = { version = "0.3.6", path = "libraries/shared-memory-server" } +communication-layer-request-reply = { version = "0.3.6", path = "libraries/communication-layer/request-reply" } +dora-runtime = { version = "0.3.6", path = "binaries/runtime" } +dora-daemon = { version = "0.3.6", path = "binaries/daemon" } +dora-coordinator = { version = "0.3.6", path = "binaries/coordinator" } dora-ros2-bridge = { path = "libraries/extensions/ros2-bridge" } dora-ros2-bridge-msg-gen = { path = "libraries/extensions/ros2-bridge/msg-gen" } dora-ros2-bridge-python = { path = "libraries/extensions/ros2-bridge/python" } diff --git a/Changelog.md b/Changelog.md index 1c14716b1..2d72e1993 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,34 @@ # Changelog +## v0.3.6 (2024-08-17) + +## What's Changed + +- Update dependencies by @renovate in https://github.com/dora-rs/dora/pull/579 +- Don't wait for non-started dynamic nodes on stop by @phil-opp in https://github.com/dora-rs/dora/pull/583 +- add a comment on read_dora_input_id by @XxChang in https://github.com/dora-rs/dora/pull/580 +- Update dependencies by @renovate in https://github.com/dora-rs/dora/pull/584 +- Update dependencies by @renovate in https://github.com/dora-rs/dora/pull/585 +- Add domain unix socket supports by @XxChang in https://github.com/dora-rs/dora/pull/594 +- Check build for cross-compiled targets on CI by @phil-opp in https://github.com/dora-rs/dora/pull/597 +- Test pip release creation as part of normal CI by @phil-opp in https://github.com/dora-rs/dora/pull/596 +- Add-armv7-musleabihf-prebuilt-release by @haixuanTao in https://github.com/dora-rs/dora/pull/578 +- Update dependencies by @renovate in https://github.com/dora-rs/dora/pull/602 +- Delay dropping of `DoraNode` in Python until all event data is freed by @phil-opp in https://github.com/dora-rs/dora/pull/601 +- Add install script by @haixuanTao in https://github.com/dora-rs/dora/pull/600 +- Nodes hub to store and reuse commonly used node by @haixuanTao in https://github.com/dora-rs/dora/pull/569 +- Ros2-bridge action attempt by @starlitxiling in https://github.com/dora-rs/dora/pull/567 +- Update dependencies by @renovate in https://github.com/dora-rs/dora/pull/605 +- Add a CI/CD for the node-hub by @haixuanTao in https://github.com/dora-rs/dora/pull/604 +- Update dependencies by @renovate in https://github.com/dora-rs/dora/pull/608 +- Remove dynamic node from pending nodes before starting a dataflow by @haixuanTao in https://github.com/dora-rs/dora/pull/606 +- Fix alignment of atomics in shared memory communication channel by @phil-opp in https://github.com/dora-rs/dora/pull/612 +- Update dependencies by @renovate in https://github.com/dora-rs/dora/pull/622 +- Refactor: Move message definitions to `dora-message` crate by @phil-opp in https://github.com/dora-rs/dora/pull/613 +- Update README.md by @heyong4725 in https://github.com/dora-rs/dora/pull/623 +- Update Rust crate serde to v1.0.207 by @renovate in https://github.com/dora-rs/dora/pull/624 +- fix clippy warnings by @Michael-J-Ward in https://github.com/dora-rs/dora/pull/626 + ## v0.3.5 (2024-07-03) ## What's Changed diff --git a/README.md b/README.md index 94e7c2796..571c2c832 100644 --- a/README.md +++ b/README.md @@ -60,35 +60,40 @@ Each node defines its inputs and outputs to connect with other nodes. ```yaml nodes: - - id: webcam - custom: - source: webcam.py - inputs: - tick: dora/timer/millis/50 - outputs: - - image - - - id: object_detection - custom: - source: object_detection.py - inputs: - image: webcam/image - outputs: - - bbox + - id: camera + build: pip install ../../node-hub/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 ../../node-hub/ultralytics-yolo + path: ultralytics-yolo + inputs: + image: + source: camera/image + queue_size: 1 + outputs: + - bbox + env: + MODEL: yolov8n.pt - id: plot - custom: - source: plot.py - inputs: - image: webcam/image - bbox: object_detection/bbox + build: pip install ../../node-hub/opencv-plot + path: opencv-plot + inputs: + image: + source: camera/image + queue_size: 1 + bbox: object-detection/bbox ``` -Nodes can either be: - -- custom nodes where dora-rs is embedded as a native libraries. -- runtime nodes where dora-rs takes care of the main loop and run user-defined operators. This makes dora-rs featureful as we can run features like `hot-reloading`. - The dataflow paradigm has the advantage of creating an abstraction layer that makes robotic applications modular and easily configurable. @@ -148,7 +153,6 @@ Quickest way: ```bash cargo install dora-cli --locked -pip install dora-rs # For Python API dora --help ``` @@ -157,27 +161,19 @@ For more info on installation, check out [our guide](https://www.dora-rs.ai/docs ## Getting Started -1. Install the example python dependencies: +1. Run the example: ```bash -pip install -r https://raw.githubusercontent.com/dora-rs/dora/v0.3.5/examples/python-operator-dataflow/requirements.txt +git clone https://github.com/dora-rs/dora +cd examples/python-dataflow +dora build dataflow.yml ``` 2. Get some example operators: -```bash -wget https://raw.githubusercontent.com/dora-rs/dora/v0.3.5/examples/python-operator-dataflow/webcam.py -wget https://raw.githubusercontent.com/dora-rs/dora/v0.3.5/examples/python-operator-dataflow/plot.py -wget https://raw.githubusercontent.com/dora-rs/dora/v0.3.5/examples/python-operator-dataflow/utils.py -wget https://raw.githubusercontent.com/dora-rs/dora/v0.3.5/examples/python-operator-dataflow/object_detection.py -wget https://raw.githubusercontent.com/dora-rs/dora/v0.3.5/examples/python-operator-dataflow/dataflow.yml -``` - -3. Start the dataflow - ```bash dora up -dora start dataflow.yml --attach --hot-reload +dora start dataflow.yml ``` > Make sure to have a webcam diff --git a/node-hub/dora-distil-whisper/pyproject.toml b/node-hub/dora-distil-whisper/pyproject.toml index 12ceebbc2..99ad19a2a 100644 --- a/node-hub/dora-distil-whisper/pyproject.toml +++ b/node-hub/dora-distil-whisper/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "dora-distil-whisper" -version = "0.3.5" +version = "0.3.6" authors = [ "Haixuan Xavier Tao ", "Enzo Le Van ", @@ -13,7 +13,7 @@ readme = "README.md" packages = [{ include = "dora_distil_whisper" }] [tool.poetry.dependencies] -dora-rs = "0.3.5" +dora-rs = "^0.3.6" numpy = "< 2.0.0" pyarrow = ">= 5.0.0" transformers = ">= 4.0.0" diff --git a/node-hub/dora-echo/pyproject.toml b/node-hub/dora-echo/pyproject.toml index f9d054c4f..071c36e0a 100644 --- a/node-hub/dora-echo/pyproject.toml +++ b/node-hub/dora-echo/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "dora-echo" -version = "0.3.5" +version = "0.3.6" authors = [ "Haixuan Xavier Tao ", "Enzo Le Van ", @@ -13,7 +13,7 @@ readme = "README.md" packages = [{ include = "dora_echo" }] [tool.poetry.dependencies] -dora-rs = "0.3.5" +dora-rs = "^0.3.6" numpy = "< 2.0.0" pyarrow = ">= 5.0.0" diff --git a/node-hub/dora-microphone/pyproject.toml b/node-hub/dora-microphone/pyproject.toml index 45aecb304..7b4b41182 100644 --- a/node-hub/dora-microphone/pyproject.toml +++ b/node-hub/dora-microphone/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "dora-microphone" -version = "0.3.5" +version = "0.3.6" authors = [ "Haixuan Xavier Tao ", "Enzo Le Van ", @@ -13,7 +13,7 @@ readme = "README.md" packages = [{ include = "dora_microphone" }] [tool.poetry.dependencies] -dora-rs = "0.3.5" +dora-rs = "^0.3.6" numpy = "< 2.0.0" pyarrow = ">= 5.0.0" sounddevice = "^0.4.6" diff --git a/node-hub/opencv-plot/pyproject.toml b/node-hub/opencv-plot/pyproject.toml index 795bba3b5..a0326072c 100644 --- a/node-hub/opencv-plot/pyproject.toml +++ b/node-hub/opencv-plot/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "opencv-plot" -version = "0.3.5" +version = "0.3.6" authors = [ "Haixuan Xavier Tao ", "Enzo Le Van ", @@ -11,7 +11,7 @@ readme = "README.md" packages = [{ include = "opencv_plot" }] [tool.poetry.dependencies] -dora-rs = "0.3.5" +dora-rs = "^0.3.6" numpy = "< 2.0.0" opencv-python = ">= 4.1.1" diff --git a/node-hub/opencv-video-capture/pyproject.toml b/node-hub/opencv-video-capture/pyproject.toml index 89ef578bc..2ffb49597 100644 --- a/node-hub/opencv-video-capture/pyproject.toml +++ b/node-hub/opencv-video-capture/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "opencv-video-capture" -version = "0.3.5" +version = "0.3.6" authors = [ "Haixuan Xavier Tao ", "Enzo Le Van ", @@ -11,7 +11,7 @@ readme = "README.md" packages = [{ include = "opencv_video_capture" }] [tool.poetry.dependencies] -dora-rs = "0.3.5" +dora-rs = "^0.3.6" numpy = "< 2.0.0" opencv-python = ">= 4.1.1" diff --git a/node-hub/pyarrow-assert/pyproject.toml b/node-hub/pyarrow-assert/pyproject.toml index 8df50e68b..abe11c79a 100644 --- a/node-hub/pyarrow-assert/pyproject.toml +++ b/node-hub/pyarrow-assert/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pyarrow-assert" -version = "0.3.5" +version = "0.3.6" authors = [ "Haixuan Xavier Tao ", "Enzo Le Van ", @@ -13,7 +13,7 @@ readme = "README.md" packages = [{ include = "pyarrow_assert" }] [tool.poetry.dependencies] -dora-rs = "0.3.5" +dora-rs = "^0.3.6" numpy = "< 2.0.0" pyarrow = ">= 5.0.0" diff --git a/node-hub/pyarrow-sender/pyproject.toml b/node-hub/pyarrow-sender/pyproject.toml index 8ac0241e9..5fe146db8 100644 --- a/node-hub/pyarrow-sender/pyproject.toml +++ b/node-hub/pyarrow-sender/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pyarrow-sender" -version = "0.3.5" +version = "0.3.6" authors = [ "Haixuan Xavier Tao ", "Enzo Le Van ", @@ -13,7 +13,7 @@ readme = "README.md" packages = [{ include = "pyarrow_sender" }] [tool.poetry.dependencies] -dora-rs = "0.3.5" +dora-rs = "^0.3.6" numpy = "< 2.0.0" pyarrow = ">= 5.0.0" diff --git a/node-hub/terminal-input/pyproject.toml b/node-hub/terminal-input/pyproject.toml index 6e35bc38e..9967d9305 100644 --- a/node-hub/terminal-input/pyproject.toml +++ b/node-hub/terminal-input/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "terminal-input" -version = "0.3.5" +version = "0.3.6" authors = [ "Haixuan Xavier Tao ", "Enzo Le Van ", @@ -13,7 +13,7 @@ readme = "README.md" packages = [{ include = "terminal_input" }] [tool.poetry.dependencies] -dora-rs = "0.3.5" +dora-rs = "^0.3.6" numpy = "< 2.0.0" pyarrow = ">= 5.0.0" diff --git a/node-hub/ultralytics-yolo/pyproject.toml b/node-hub/ultralytics-yolo/pyproject.toml index bcd469752..090dcc591 100644 --- a/node-hub/ultralytics-yolo/pyproject.toml +++ b/node-hub/ultralytics-yolo/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "ultralytics-yolo" -version = "0.3.5" +version = "0.3.6" authors = [ "Haixuan Xavier Tao ", "Enzo Le Van ", @@ -11,7 +11,7 @@ readme = "README.md" packages = [{ include = "ultralytics_yolo" }] [tool.poetry.dependencies] -dora-rs = "0.3.5" +dora-rs = "^0.3.6" numpy = "< 2.0.0" ultralytics = "<= 8.2.52"