Hi everyone,
I run two ZED X Mini and two ZED X One UHD on one ZED Link Quad (Jetson AGX Orin), configured for synchronized acquisition exactly as in the (ZED Link Quad on AGX Orin | StereoLabs): sync_mode=1 plus a wire from J17 pin 13 to pin 16. The two Minis are perfectly synchronized with each other. The ZED X One pair, however, captures about 40 ms after the Minis, every frame. I’d like to know whether this is expected and how to get all four sensors to expose together.
Setup
- Jetson AGX Orin 64 GB devkit, L4T R36.5.0, MAXN
- ZED Link Quad driver 1.4.3-SL-MAX96712-L4T36.5.0, ZED SDK 5.4.0 (Python)
- Deserializer 9-0029: 2× ZED X Mini (port-index 4 and 6), HD1200 @ 15 FPS
- Deserializer 13-0029: 2× ZED X One UHD (port-index 0 and 2), HD4K @ 15 FPS, opened as one virtual stereo camera
- sync_mode=1 in zed_x_daemon.service, J17 pin 13 ↔ pin 16 wired
- Depth mode NEURAL on all stereo cameras
Measurements
1. A stopwatch filmed by all cameras A phone showing a millisecond stopwatch lay in the common field of view. I saved 25 sets of frames paired by nearest image timestamp. Both Minis always show the same time; the ZED X One always shows a later time:
| Set | ZED X Mini (both) | ZED X One | Difference |
|---|---|---|---|
| 0 | 31.700 | 31.750 | +50 ms |
| 1 | 32.851 | 32.876 | +25 ms |
| 3 | 35.026 | 35.076 | +50 ms |
| 4 | 36.175 | 36.200 | +25 ms |
| 5 | 37.251 | 37.276 | +25 ms |
| 6 | 38.301 | 38.401 | +100 ms |
| 7 | 39.501 | 39.551 | +50 ms |
| 8 | 40.576 | 40.625 | +49 ms |
| 9 | 41.701 | 41.731 | +30 ms |
| … | … | … | … |
The display updates in ~25 ms steps, so readings snap to +25 or +50 ms. 14 of 24 readings were +50 ms, which puts the true offset at ≈ 40 ms.
2. Image timestamps Each camera grabs continuously in its own thread. For every frame we read get_timestamp(TIME_REFERENCE.IMAGE) and TIME_REFERENCE.CURRENT. The offset is taken against the nearest ZED X Mini frame and wrapped to ±half a frame period (10 s window, 151 frames each):
| Camera | Opened as | Offset vs ZED X Mini 50976178 | p5–p95 spread | Frame period |
|---|---|---|---|---|
| ZED X Mini 53172763 | `sl.Camera` | +0.02 ms | 0.10 ms | 66.66 ms |
| ZED X One pair | `sl.Camera`, virtual stereo | **+17.29 ms** | 0.08 ms | 66.66 ms |
| ZED X One 312338504 | `sl.CameraOne` | **+17.29 ms** | 0.08 ms | 66.66 ms |
| ZED X One 317792740 | `sl.CameraOne` | **+17.29 ms** | 0.08 ms | 66.66 ms |
The frame periods are identical and the offset did not drift between measurements 5 hours apart, so the two groups are frequency-locked, but with a 17.29 ms phase offset. That is close to the 16.67 ms trigger pulse width that the GPIO triggering documentation lists for 15 FPS.
3. A moving object. We aligned the 3D trajectory of detected object moving through the common view across cameras. The Mini-vs-Mini control comes out at ≈ 0 ms. The ZED X One positions correspond to ~37 ms after the paired Mini frames, which agrees with the stopwatch.
What I checked
- The wire of J17 pin 13 ↔ pin 16 is active: I tried to remove it (sync_mode=1 unchanged) → no camera opens at all, the Minis included. With the wire back, everything works again.
- Boot log: Sync mode configured - Deser set as Slave appears only for `9-0029`; there is no sync line for `13-0029`.
- Ruled out: exposure (0.9 / 1.8 / 4.4 ms), rolling shutter (the lag doesn’t depend on the image row), depth stabilization (same at 0 and 30), and the virtual stereo (same result as a single `CameraOne`).
- The “timestamps are assigned upon driver receipt” note from the setup guide and (Why frames from different ZED X GMSL2 cameras connected to the same capture card have different timestamps? | Help Center | StereoLabs): I understand the stamps can differ between camera models even when capture is synchronized. But in that case the ZED X One image would show the stopwatch at the same time as the Minis. It shows ~40 ms later, so the exposure itself happens later, not only the delivery.
Questions
1. The (ZED Link Quad GPIO Triggering | StereoLabs) says the trigger’s rising edges mark the end of exposure, with a 16.67 ms pulse width at 15 FPS. Our stamp offset is 17.29 ms. Could the second deserializer act on the other edge, and can this be configured?
2. With sync_mode=1 and the pin 13–16 wire, should ZED X Mini and ZED X One UHD on different deserializers expose within 15 µs? Is the missing Sync mode configured line for 13-0029 expected?
3. What instant does a ZED X One UHD image timestamp represent, and why would its frames be exposed ~20 ms after that stamp while the ZED X Mini’s are not?
4. Is there a supported configuration where ZED X Mini and ZED X One UHD on one ZED Link Quad expose simultaneously at 15 FPS?
I am happy to share the raw data and measurement scripts if needed. Thanks!