# dora-zed Dora node for ZED stereo cameras. Publishes BGR images, point clouds and camera intrinsics. ## Usage Add to your dataflow: ```yaml nodes: - id: zed-camera git: ssh://git@gitea.liria.cl:5001/liria/dora-zed.git tag: v0.2.0 build: scripts/build.sh path: bin/dora_zed inputs: tick: dora/timer/millis/100 outputs: - image_bgr - point_cloud - camera_info ``` See [`dataflow.yml`](dataflow.yml) for a complete runnable example with a camera display node. ## Dependencies | Dependency | Version | Notes | |---|---|---| | [dora-rs](https://github.com/dora-rs/dora) | 1.0+ | Verified against `dora-cli 1.0.1`; the C++ bindings are built from source at configure time | | [CMake](https://cmake.org/download/) | 3.21+ | | | [ZED SDK](https://www.stereolabs.com/developers/release) | 5.x | Bundles OpenCV; default path `/usr/local/zed` | | [CUDA Toolkit](https://developer.nvidia.com/cuda-downloads) | — | Required by ZED SDK | | [Rust toolchain](https://rustup.rs) | stable | Builds dora-rs C++ bindings | ### Installation scripts | Platform | Script | |---|---| | Ubuntu 24.04 x86_64 | `sudo scripts/install_linux_x64.sh` | | NVIDIA Jetson (ARM64) | `sudo scripts/install_linux_arm.sh` | | Windows x64 (PowerShell admin) | `scripts/install_windows.ps1` | > **Windows:** Install the ZED SDK manually from [stereolabs.com](https://www.stereolabs.com/developers/release). ## Local build ```bash git clone ssh://git@gitea.liria.cl:5001/liria/dora-zed.git cd dora-zed scripts/build.sh ``` Binary installed to `bin/dora_zed`. `scripts/build.sh` is also the `build:` command in the dataflow. dora 1.0 runs build commands directly rather than through a shell, so `cd`, `&&` and command substitution are not available there; keeping the sequence in one script is what makes the dataflow build work. It configures a `Release` build, which is also what links the optimized dora bindings. ### Containerized build [`Dockerfile`](Dockerfile) provides the full toolchain — CUDA, ZED SDK and Rust — on Ubuntu 24.04, the newest release Stereolabs ships a ZED SDK for. No camera is needed. ```bash docker build -t dora-zed-build . docker run --rm --gpus all --user "$(id -u):$(id -g)" \ -v "$PWD:/src" -v dora-zed-cargo:/usr/local/cargo/registry dora-zed-build ``` The container runs the same `scripts/build.sh`. The first run clones dora-rs and compiles it with Cargo; the named volume keeps that cache across runs. `--user` keeps `build/` and `bin/` owned by you rather than root. x86-64 only. On Jetson, run [`scripts/install_linux_arm.sh`](scripts/install_linux_arm.sh) on the device and build natively — there is no ARM64 image here. Needs an NVIDIA driver and the [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) on the host, as the ZED SDK does anyway. The image sets `NVIDIA_DRIVER_CAPABILITIES=compute,utility,video`: `libsl_zed.so` links against NVDEC (`libnvcuvid`) and NVENC (`libnvidia-encode`), which the container runtime mounts from the host only when `video` is in the capability list. ## Configuration All behavior is controlled via environment variables. ### Camera | Variable | Default | Description | |---|---|---| | `ZED_RESOLUTION` | `720` | `720`, `1080`, or `2000` | | `ZED_FPS` | `15` | Frame rate | | `ZED_DEPTH_MODE` | `NEURAL` | `PERFORMANCE`, `QUALITY`, `NEURAL`, or `NONE` | | `ZED_DEPTH_MIN_MM` | `10` | Minimum depth (mm) | | `ZED_DEPTH_MAX_MM` | `500` | Maximum depth (mm) | | `ZED_DEPTH_FILL` | `false` | Enable depth fill mode | | `ZED_FLIP` | `ON` | `ON` or `OFF` | | `ZED_WARMUP_FRAMES` | `30` | Frames to discard on startup | | `ZED_RETRY_INTERVAL_SECONDS` | `5` | Reconnection interval (s) | ### Point cloud | `ZED_PC_MODE` | Shape | Description | |---|---|---| | `FULL` (default) | `[H, W, 4]` | Full resolution grid (~14.7 MB/frame at 720p) | | `HALF` | `[H/2, W/2, 4]` | Stride-2 downsample (~4× smaller) | ## Inputs | Input | Description | |---|---| | `tick` | Triggers a camera grab. Connect to `dora/timer/millis/N`. | ## Outputs | Output | Type | Description | |---|---|---| | `image_bgr` | `uint8 [H, W, 3]` | BGR image. Metadata: `shape`, `encoding=bgr8`, intrinsics, `timestamp_ns`. | | `point_cloud` | `float32 [*, 4]` | XYZRGBA point cloud. Shape depends on `ZED_PC_MODE`. Metadata: `units=mm`, intrinsics. | | `camera_info` | `float32 [4]` | `[fx, fy, cx, cy]`. Metadata: `distortion` coefficients. |