Add engines::ZedNative class wrapping ZED SDK's TensorRT-optimized object detection. On every frame grab, detected objects (label, confidence, 3D position, 2D/3D bounding boxes) are serialized as a flat float32 array and sent as a new "objects" dora output with frame_id correlation to image_bgr. Extract shared env-var helpers into src/util/env.h and expose sl::Camera& via Camera::handle() for engine access. Closes #3
3.2 KiB
dora-zed
Dora C++ node for ZED stereo cameras. Captures frames and publishes BGR images, XYZRGBA point clouds, camera intrinsics, and 3D object detections.
Usage via git: in a dataflow
nodes:
- id: zed-camera
git: ssh://git@gitea.liria.cl:5001/liria/dora-zed.git
build: mkdir -p build && cd build && cmake .. && make install
path: bin/dora_zed
inputs:
tick: dora/timer/millis/100
outputs:
- image_bgr
- point_cloud
- camera_info
- objects
Then run:
dora build dataflow.yml
dora up
dora start dataflow.yml
Local build
git clone ssh://git@gitea.liria.cl:5001/liria/dora-zed.git
cd dora-zed
mkdir -p build && cd build
cmake ..
make install
The binary is installed to bin/dora_zed relative to the repository root.
Dependencies
| Dependency | Minimum version | Notes |
|---|---|---|
| CMake | 3.21 | |
| ZED SDK | 4.x | Default path: /usr/local/zed |
| CUDA Toolkit | Required by ZED SDK | |
| OpenCV | 4.x | |
| Rust toolchain | stable | Used to build dora-rs C++ bindings |
Environment variables
| Variable | Default | Description |
|---|---|---|
ZED_RESOLUTION |
720 |
Camera resolution: 720, 1080, or 2000 |
ZED_FPS |
15 |
Camera frame rate |
ZED_DEPTH_MODE |
NEURAL |
Depth mode: PERFORMANCE, QUALITY, NEURAL, or NONE |
ZED_DEPTH_MIN_MM |
10 |
Minimum depth distance in millimeters |
ZED_DEPTH_MAX_MM |
500 |
Maximum depth distance in millimeters |
ZED_DEPTH_FILL |
false |
Enable depth fill mode |
ZED_FLIP |
ON |
Image flip: ON or OFF |
ZED_WARMUP_FRAMES |
30 |
Number of warmup frames to discard |
ZED_RETRY_INTERVAL_SECONDS |
5 |
Seconds between reconnection attempts |
ZED_DETECTION_MODEL |
MULTI_CLASS_BOX_MEDIUM |
Detection model: MULTI_CLASS_BOX_FAST, MULTI_CLASS_BOX_MEDIUM, or MULTI_CLASS_BOX_ACCURATE |
ZED_DETECTION_CONFIDENCE |
40 |
Detection confidence threshold (0-100) |
ZED_DETECTION_TRACKING |
false |
Enable object tracking across frames (enables positional tracking) |
Outputs
image_bgr
BGR image as raw bytes. Metadata includes shape (HxWx3), encoding (bgr8), camera intrinsics (fx, fy, cx, cy), distortion, frame_id, and timestamp_ns.
point_cloud
XYZRGBA point cloud as float32 bytes. Metadata includes shape (HxWx4), units (mm), and camera intrinsics.
camera_info
Four float32 values: [fx, fy, cx, cy]. Metadata includes distortion coefficients.
objects
Detected objects as a flat float32 array with shape [num_objects, 37]. Each row contains 37 floats:
| Index | Field | Description |
|---|---|---|
| 0 | label_id |
Object class (0=PERSON, 1=VEHICLE, 2=BAG, 3=ANIMAL, 4=ELECTRONICS, 5=FRUIT_VEGETABLE, 6=SPORT) |
| 1 | confidence |
Detection confidence (0-100) |
| 2-4 | x, y, z |
3D center position in mm |
| 5-12 | bb2d_* |
2D bounding box: 4 corners × 2 pixel coords |
| 13-36 | bb3d_* |
3D bounding box: 8 corners × 3 world coords (mm) |
Metadata includes frame_id and timestamp_ns matching the corresponding image_bgr, plus image_width and image_height for interpreting 2D bounding box pixel coordinates. When no objects are detected, an empty array with shape [0, 37] is sent.