-
v0.2.0 — Pure camera source on dora 1.0
Stablevalidate / validate (push) Successful in 59m0sreleased this
2026-09-08 15:07:03 +00:00 | 5 commits to main since this releasedora-zed is now a pure camera source. Detection has left the node, depth is a first-class output, timestamps can be correlated across nodes, and the camera runs on its own thread so a disconnect never freezes the dataflow.
Requires dora 1.0+ (verified against
dora-cli 1.0.1) and no longer requires ONNX Runtime.Breaking changes
Upgrading from
v0.1.0needs dataflow and configuration changes:objectsoutput removed. Detection is gone from this node. Thenative(ZED SDK TensorRT) andyolo_onnxengines and theirsrc/engines/sources remain reachable at tagv0.1.0.zed_nativecannot be extracted — it binds to the live camera handle and cannot run in a node that receives images over a dataflow.git_checkout:is no longer valid. dora 1.0 pins a source with the mutually exclusivetag:,rev:orbranch:.- The build command changed to
scripts/build.sh. dora 1.0 runs build commands directly rather than through a shell, somkdir -p build && cd build && cmake .. && make installno longer works. - Environment variables removed:
ZED_ENGINE,ZED_DETECTION_MODEL,ZED_DETECTION_CONFIDENCE,ZED_DETECTION_TRACKING, allZED_ONNX_*, andZED_RETRY_INTERVAL_SECONDS(replaced by a backoff). ZED_PC_MODE=ROIremoved. It cropped the cloud to detected bounding boxes.FULLandHALFremain.point_cloudis now off by default. SetZED_POINT_CLOUDto publish it. Consumers needing 3D should back-projectdepthwith the published intrinsics instead — at 1080p a full cloud is ~14.7 MB per frame.camera_infois published once per camera session, not per frame: with the first frame after the camera opens, and again after a reconnection.timestamp_nsmetadata replaced bydevice_timestamp_nsandhost_timestamp_ns, both Unix-epoch nanoseconds as doratimestampparameters.- Defaults changed to match the reference driver perception was tuned against:
ZED_RESOLUTION720 → 1080,ZED_DEPTH_MIN_MM10 → 200,ZED_DEPTH_MAX_MM500 → 600.
New
depthoutput —float32 [H, W]in millimetres on every frame that carriesimage_bgr. Missing depth is0; the payload contains noinfornan.camera_stateoutput —opening/streaming/recovering, published on each change, so a downstream node can tell "no frame yet" from "camera lost".dora-node.ymlmanifest declaring a type for every port, plusstrict_types: truein the dataflow and adora validateCI gate that needs no camera and no ZED SDK.- All six depth modes reachable —
NEURAL,NEURAL_PLUS,NEURAL_LIGHT,PERFORMANCE,QUALITY,NONE. An unrecognised value is now a startup error listing the accepted values, instead of silently falling back toNEURAL. ZED_CONFIDENCE_THRESHOLD(60) andZED_TEXTURE_CONFIDENCE_THRESHOLD(100), which were previously never set.- Builds on Jetson: ONNX Runtime is no longer a configure-time requirement, and there is no official ARM64 GPU binary for it.
Fixed
- The camera no longer blocks the dora event loop. The ZED SDK can block indefinitely inside
grab()andopen()on a disconnected camera —InitParameters::async_grab_camera_recoverydoes not prevent this, measured on a ZED-M under SDK 5.3. The camera now runs on its own thread and the event loop only reads the newest frame, soStopstays answerable however long the SDK blocks. Recovery uses a 1/2/5/10 s backoff, escalating fromclose()tosl::Camera::reboot()(guarded to the ZED 2 and newer, where that call does anything). - Frame timestamps are comparable.
steady_clock's epoch is unspecified, so the old value could not be compared against another node, wall clock, or a recording — and recorded when the node processed the frame rather than when the camera captured it. - Blank frames are not published. A camera whose link has dropped can keep reporting successful grabs while handing back a uniform frame.
Verified
Built and run on a Jetson (aarch64) against a ZED-M, ZED SDK 5.3,
dora-cli 1.0.1:14:58:45 camera state: recovering <- cable pulled 14:59:11 camera delivered no usable frame for 30.0131s 14:59:11 attempt 1; next open in 1s → 2s → 5s → 10s (capped) 15:01:03 ZED camera opened (ZED-M, SN 18688272) <- cable replugged 15:01:05 camera recovered after 13 attempt(s) 15:01:05 camera state: streamingUnplugging leaves the node responsive, replugging resumes publishing without restarting the dataflow, and
dora stopwith the camera unplugged returns in 0.70 s with the capture thread joining gracefully.Known limitations
- Escalation to
sl::Camera::reboot()is untested on hardware: it is guarded to the ZED 2 and newer, and testing was done on a ZED-M where the call is deliberately skipped. - Blank-frame suppression was not exercised directly — the disconnected camera failed its grabs rather than returning uniform frames.
- The example
dataflow.ymlincludes a dora-hubplotnode whosepip installfails on hosts with PEP 668 (externally-managed-environment). That is the third-party node, not this one.
Downloads