Our hardware setup uses Quad link on Jetson AGX Orin 64GB
Playing around with different setup. We always have one stereo camera A
(ZED X), two mono (ZED X One GS) B
+ C
and trying to add either another stereo (ZED X) or another mono (ZED X One GS) D
in the following way:
- Fakra connector 1: Stereo + mono/stereo (we tried swapping between stereo only, stereo + mono, or stereo + stereo):
A
+D
- Fakra connector 2: mono + mono (this remains contant):
B
+C
When running ZED_Explorer
, all 4 cameras open and run regardless of whether D
is stereo or mono.
However, whenever D
is connected, the stereo camera A
does not launch (zed_camera.launch with no edits specifying the serial_number:=
) in ROS2 with the following error:
[component_container_isolated-1] [ERROR] [1741636666.922283764] [camera_front.zed_node_0]: Calibration file error: Calibration file found but it is corrupted. Download your factory calibration file from calib.stereolabs.com or use ZED calibration tool to recalibrate.
[ERROR] [component_container_isolated-1]: process has died [pid 1664, exit code -11, cmd '/opt/ros/humble/lib/rclcpp_components/component_container_isolated --ros-args -r __node:=zed_container_0 -r __ns:=/camera_front'].
The calibration file is the one obtained from calib.stereolabs.com and has been unchanged.
The weird behavior is that the newly connected D
always works and can be launched. Likewise, the moment we unplug D
, stereo camera A
can be launched with the exact same command.
FWIW The order of the cameras in ZED_Explorer
changes whenever D
is connected and A
gets assigned index 3.
For context:
- ZED SDK 4.2.3 (not upgrading until this issue with 4.2.5 gets resolved)
- Quad link 1.2.1 drivers (ditto with upgrade)
EDIT: The issue is related to the SDK since it’s not grabbing the right serial number. When all 4 cameras are connected, when we launch A
with its serial number, sl::Camera uses a different serial number.
Mini repro script:
import sys
import pyzed.sl as sl
def main():
zed = sl.Camera()
init_params = sl.InitParameters()
init_params.camera_resolution = sl.RESOLUTION.HD1080
init_params.camera_fps = 30
init_params.set_from_serial_number(int(sys.argv[1]))
status = zed.open(init_params)
if status != sl.ERROR_CODE.SUCCESS:
print(repr(status))
exit()
if __name__ == "__main__":
main()
Running python calib_repro.py <serial number for camera A>
returns:
[2025-03-10 20:48:13 UTC][ZED][INFO] Logging level INFO
[2025-03-10 20:48:13 UTC][ZED][INFO] Logging level INFO
[2025-03-10 20:48:13 UTC][ZED][INFO] Logging level INFO
[2025-03-10 20:48:14 UTC][ZED][INFO] [Init] Depth mode: PERFORMANCE
[2025-03-10 20:48:16 UTC][ZED][INFO] [Init] Camera FW version: 2001
[2025-03-10 20:48:16 UTC][ZED][INFO] [Init] Video mode: HD1080@30
[2025-03-10 20:48:16 UTC][ZED][INFO] [Init] Serial Number: S/N <DIFFERENT SERIAL NUMBER FOR CAMERA B !!!!!!!>
[2025-03-10 20:48:16 UTC][ZED][WARNING] [Init] Invalid calibration file. On Linux, call export LC_ALL="C" and restart your application.
[2025-03-10 20:48:16 UTC][ZED][ERROR] [Init] Wrong value in calibration file. Downloading it...
[2025-03-10 20:48:16 UTC][ZED][WARNING] [Init] Invalid calibration file. On Linux, call export LC_ALL="C" and restart your application.
[2025-03-10 20:48:16 UTC][ZED][INFO] [Init] Invalid calibration file. Recalibrate your camera using ZED Calibration tool or download your calibration file on https://calib.stereolabs.com
[2025-03-10 20:48:16 UTC][ZED][WARNING] INVALID CALIBRATION FILE in sl::ERROR_CODE sl::Camera::open(sl::InitParameters)
INVALID CALIBRATION FILE
[2025-03-10 20:48:17 UTC][ZED][ERROR] [ZED] sl::Camera::Open has not been called, no Camera instance running.
[2025-03-10 20:48:17 UTC][ZED][ERROR] [ZED] sl::Camera::Open has not been called, no Camera instance running.
EDIT 2: Both A
and D
work fine when B
and C
are unplugged. Is it not possible to mix and match ZED X and ZED X One GS cameras on a single Quad Link card?