Product: ZED X (GMSL2)
Setup:
-
2x ZED X cameras connected via GMSL2
-
NVIDIA Jetson AGX Orin (Syslogic carrier board)
-
ZED SDK 5.1.0
-
ZED ROS 2 Wrapper v5.1.0 (zed-ros2-wrapper, multi-camera launch)
-
ROS 2 Humble
-
Running inside Docker container
-
Grab resolution: HD1080 at 5 FPS
-
Depth mode: NEURAL
-
depth_stabilization: 30 -
enable_image_validity_check: 0
Problem description:
After running for a variable period of time, one of the ZED X cameras begins publishing the same image frame repeatedly on the image topic. The image content is frozen (identical pixel data), but the following continue to function normally:
-
The publish rate on the image topic remains at the expected frequency — messages keep arriving on schedule.
-
The ROS message header timestamps continue to advance with each published message (they are not stuck at the old frame’s timestamp).
-
The
camera_infotopic continues publishing normally. -
Object detection (
obj_det/objects) continues publishing with updating timestamps. but publishes empty list even though there are objects (humans) in front of the camera -
No errors or anomalies appear in the ROS diagnostics.
The frozen state persists indefinitely — it does not self-recover. The only way to restore live image data is to restart the ZED wrapper node, after which the camera works normally again until the issue recurs. The issue can affect either camera while the other continues to operate normally.
Key observations:
-
The issue is intermittent and has occurred multiple times.
-
The cameras are mounted on heavy construction equipment (BOMAG roller), which is subject to significant vibration during operation.
Questions:
-
Is there a known condition in the ZED SDK where
grab()andretrieveImage()returnSUCCESSwith advancing timestamps, but the actual image data is stale/repeated? -
Does
enable_image_validity_checkdetect this condition, or does it only cover pixel-level corruption? -
Is there a recommended way to detect this state from the application side (e.g., a Mat-level timestamp or frame counter that would remain unchanged when the image data hasn’t actually been refreshed)?
-
Is there a known interaction between GMSL2 link degradation (e.g., from vibration or connector issues) and this type of silent frame staleness?
-
Are there any SDK-level recovery mechanisms (short of full camera re-open) that could restore the live image stream when this occurs?