add typed Arrow payloads and a dora-image-view dataflow

dora-image-view takes std/media/v1/Image, and dora's compatibility graph
has no edge from std/core/v1/UInt8 to it, so wiring the two failed
`dora validate` whatever the node actually sent. Its flat-buffer fallback
would not have decoded these frames either: it reads width/height
metadata, and this node only published shape.

image and depth now go out as the Image struct, camera_info and
point_cloud as Float32 arrays and camera_state as a string, all built
against the Arrow C data interface in src/arrow so the node still links
no Arrow C++. Shape, dtype and encoding metadata are dropped where the
payload describes itself; intrinsics, frame_id and both timestamps are
unchanged. tests/run.sh covers the packing without a camera or the SDK,
round-tripping each array through pyarrow and rebuilding it under the
sanitizers.

Breaking: image_bgr is renamed to image and every payload changes shape.
dataflow_plot.yml is replaced by dataflow_view.yml, which wires the
viewer from a tag and repeats its contract in input_types so validate
checks both sides of the wiring.
This commit is contained in:
2026-09-15 10:52:08 -05:00
parent d4c9f153c1
commit c1a7d70ba6
13 changed files with 648 additions and 86 deletions
+19 -5
View File
@@ -1,5 +1,6 @@
# Checks both dataflows against the typed contract in dora-node.yml. This runs
# no node, so it needs neither a camera nor the ZED SDK.
# Two gates, neither of which needs a camera, the ZED SDK or CUDA: the dataflows
# are checked against the typed contract in dora-node.yml without running the
# node, and the payload packing is compiled and tested on its own.
name: validate
on: [push, pull_request]
@@ -28,9 +29,22 @@ jobs:
# strict_types: true in each dataflow turns a type warning into a
# non-zero exit, so a mismatched annotation fails here rather than at
# runtime. The plot file is checked too: it wires the same outputs, and a
# rename that breaks only the viewer should still fail the build.
# runtime. The viewer file is checked too: it wires the same outputs, and
# a rename that breaks only the consumer should still fail the build.
- name: Validate the dataflows
run: |
dora validate dataflow.yml
dora validate dataflow_plot.yml
dora validate dataflow_view.yml
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install uv
run: |
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
- name: Test the payload packing
run: tests/run.sh