Skip to main content
Builds and installs the patched Stereolabs zed-gstreamer source plugins (zedxonesrc mono / zedsrc stereo) that the GPU-resident camera pipeline (almond_axol.video.gst_zed) uses for teleop --cameras and collect-data. This is the companion to gst.install: gst.install sets up the host GStreamer support and PyGObject, while gst.build-zed provides the ZED source elements themselves.
It exists rather than relying on a stock plugin install for two reasons:
  • A fresh Jetson has no zed-gstreamer plugins at all. Without them the GPU-resident camera path silently falls back to the slower ZED SDK grab; building them makes the fast path available.
  • The stock zedxonesrc / zedsrc stamp each frame’s PTS at host-receive time (a software clock sampled right after grab() returns), which lags the true sensor exposure by the camera delivery latency. The vendored patch instead stamps the PTS at the sensor-exposure instant (TIME_REFERENCE::IMAGE), so a frame lines up with the joint sample taken on the same exposure clock as the SDK ZedCamera path. Without it, collected datasets pair each image with proprioception that is ~delivery-latency too new — and that offset differs from inference (which uses the SDK), i.e. a train/inference mismatch.
The command clones upstream at a pinned commit (the exact ref the patch was generated against), applies the patch, and builds + installs with CMake. It installs the required compiler/linker packages first, including libblas-dev required by the ZED SDK’s CMake package. The one-command install runs it for you once, right after gst.install.
Requires an NVIDIA Jetson/L4T host and the ZED SDK at /usr/local/zed. Idempotent (a root-owned manifest recording the pinned ref, patch digest, installed plugin bytes, and the ZED SDK version they were built against skips a rebuild when the patched plugins are already installed) and best-effort: it cleanly skips on non-Jetson hosts and machines without the SDK / toolchain — the camera path then uses the ZED SDK fallback. Installing packages and the system GStreamer plugin needs root: run as root, or you’ll be prompted for sudo once.

After a ZED SDK upgrade

The plugins link the SDK’s libsl_zed.so directly, so upgrading the SDK in place (running a new Stereolabs .run installer) leaves plugins that GStreamer still lists but can no longer load (undefined symbol: _ZN2sl9CameraOne8isOpenedEv…). Teleop and collect-data detect this at startup, log a warning naming this command, and fall back to the SDK camera path rather than failing. Re-run axol gst.build-zed (or axol provision, which the axol serve self-updater runs) to restore the GPU path: it notices the SDK version changed — or that a plugin no longer loads — and rebuilds against the installed SDK. Run zed.install as well so pyzed matches the new SDK.