GMSL Finicky Connectivity with Jetson Nano

Hi there,

Over the past few months, we have run into various issues with a GMSL camera that are connected to our Jetson Orin NX (with Nano devkit). We have a ZED Duo Capture card, and a ZEDX Mini stereocamera connected via Fakra cable.

The camera works well, but somewhat randomly decides to fail. ZED_Explorer -all provides random output, sometimes:

Cam 0

Model : “ZED X Mini”

S/N : 56251554

State : “NOT AVAILABLE”

Path : /dev/i2c-9

ID : 0

Port : 3

Type : “GMSL”

********************

and sometimes:

## Cam 0 ##

Model : “ZED X Mini”

S/N : 56251554

State : “AVAILABLE”

Path : /dev/i2c-9

ID : 0

Port : 3

Type : “GMSL”

********************

I’ve attached a few more diagnostic results to this message. We’ve done the standard debugging - restarting daemons, ensuring we are on the most up to date SDK and driver version, restarting the Jetson, etc.

diagnostic_results.zip (20.0 KB)

What is the best way to make sure these cameras are consistent and reliable? Are there typical best practices to follow to make sure we are handling and working with these cameras well?

Hi @Jumana
This normally happens when an application crashes or is closed without closing the camera.

In this case, the GMSL2 driver keeps the camera busy, and the only way to recover it is by resetting the driver:
sudo service zed_x_daemon restart

If you are writing your application using the ZED SDK check that the Camera object is always correctly destroyed before closing the application… usually, the problem is caused by a “Ctrl+c” signal not correctly handled.

Thank you. Is this issue not usually resolved with restarting the Jetson? i.e. if we have non-graceful shutdown, can the jetson and driver be restarted and our camera issues should be resolved, right?

We are restarting the Jetson and daemon, and are still not able to recover the cameras. We are going to attempt replacing the fakra cables, but want to know what is the recommended set of steps to resolve issues with the cameras especially if we’ve done the restarts.

Yes, the command to reset the driver allows you to solve it without restarting.

OK, let’s check a few things:

  • What’s the length of the flat cables?
  • What voltage are you providing to the capture card?
  • Is the power shared with other devices?

What’s the length of the flat cables? The cam0 and 1 ribbons (between capture card and Jetson) are 5cm. Fakra cables we’ve tested are 3 m cables, as well as 6 m cables.

Voltage to capture card: 19V 2.1A

Is the power shared with other devices? No

We also tried new Fakra cables just now, and still see the same issue.


We have done the following:

  • replace fakra cable with fresh one (3m)
  • restart Jetson and daemon (and we see the green LED light flash on the capture card)
  • launch camera with ros2 launch zed_wrapper zed_camera.launch.py camera_model:=zedxm

Out of 5 experiments, only once did the camera launch. The rest of the time, we saw the following error:

[component_container_isolated-2] [2026-05-21 13:12:29 UTC][ZED][ERROR] [Init]  Corrupted frames were detected. Please verify that your camera is properly connected.
[component_container_isolated-2] [2026-05-21 13:12:33 UTC][ZED][ERROR] FAILURE in sl::ERROR_CODE sl::Camera::open(sl::InitParameters)
[component_container_isolated-2] [WARN] [1779383553.250489038] [zed.zed_node]: Error opening camera: FAILURE
[component_container_isolated-2] [INFO] [1779383553.250591504] [zed.zed_node]: Please verify the camera connection
[component_container_isolated-2] [2026-05-21 13:12:38 UTC][ZED][INFO] Logging level INFO
[component_container_isolated-2] [2026-05-21 13:12:38 UTC][ZED][ERROR] INVALID FUNCTION CALL in sl::ERROR_CODE sl::Camera::open(sl::InitParameters)
[component_container_isolated-2] [WARN] [1779383558.750892274] [zed.zed_node]: Error opening camera: INVALID FUNCTION CALL
[component_container_isolated-2] [INFO] [1779383558.750985906] [zed.zed_node]: Please verify the camera connection
[component_container_isolated-2] (Argus) Error Timeout:  (propagating from src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 137)
[component_container_isolated-2] (Argus) Error Timeout:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 92)
[component_container_isolated-2] [2026-05-21 13:12:39 UTC][ZED][WARNING] [ZED-Argus]{produceDualV5} CAM 0 has timeout -- recovering...
[component_container_isolated-2] (Argus) Error FileOperationFailed: Failed socket read: Connection reset by peer (in src/rpc/socket/common/SocketUtils.cpp, function readSocket(), line 79)
[component_container_isolated-2] (Argus) Error FileOperationFailed: Unexpected error in reading socket (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 277)
[component_container_isolated-2] (Argus) Error FileOperationFailed: Receive worker failure, notifying 2 waiting threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 350)
[component_container_isolated-2] (Argus) Error InvalidState: Argus client is exiting with 2 outstanding client threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 366)
[component_container_isolated-2] (Argus) Error FileOperationFailed: Receiving thread terminated with error (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadWrapper(), line 379)
[component_container_isolated-2] (Argus) Error FileOperationFailed: Client thread received an error from socket (in src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 145)
[component_container_isolated-2] (Argus) Error FileOperationFailed:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 92)
[component_container_isolated-2] (Argus) Error InvalidState: Receive thread is not running cannot send. (in src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 96)
[component_container_isolated-2] (Argus) Error InvalidState:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 92)

this then keeps repeating until we CTRL-C.

I will separately email you with the detailed logs from the experiments. We are not sure why this is happening, and would love to get this resolved asap!

Hi @Jumana
can you please try to install the latest ZED X Driver v1.4.1 and ZED SDK v5.3.

If the problem persists, please send me the reports generated by these commands:
sudo ZED_Diagnostic --dmesg
sudo ZED_Diagnostic -c

Thanks! I’ve isolated some issues, but now am running into something strange with launching the camera.

The camera is now “AVAILABLE”, and ZED_Diagnostic seems to be clear. When I launch with ros2 launch zed_wrapper zed_camera.launch.py camera_model:=zedxm, the camera ran for ~5 min, and then produced a camera timeout error with an image that looks like this:

When I restart the daemon, the camera is available, and then I get this error when launching zed_wrapper again:

[ERROR] FAILURE in sl::ERROR_CODE sl::Camera::open(sl::InitParameters)
[component_container_isolated-2] [WARN] [1779457195.925118477] [zed.zed_node]: Error opening camera: FAILURE
[component_container_isolated-2] [INFO] [1779457195.925254667] [zed.zed_node]: Please verify the camera connection
[component_container_isolated-2] [ERROR] [1779457195.925313290] [zed.zed_node]: Camera detection timeout
[component_container_isolated-2] (Argus) Error Timeout:  (propagating from src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 137)
[component_container_isolated-2] (Argus) Error Timeout:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 92)
[component_container_isolated-2] (Argus) Error Timeout:  (propagating from src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 137)
[component_container_isolated-2] (Argus) Error Timeout:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 92)
[component_container_isolated-2] (Argus) Error InvalidState: Argus client is exiting with 5 outstanding client threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 366)
[component_container_isolated-2] WARNING Argus: 26 client objects still exist during shutdown:
[component_container_isolated-2] 	281473299004944 (0xffff543e60d0)
[component_container_isolated-2] 	281473299009200 (0xffff543e61b0)
[component_container_isolated-2] 	281473299013456 (0xffff543f4580)
[component_container_isolated-2] 	281473299021928 (0xffff543e8b48)
[component_container_isolated-2] 	281473299164784 (0xffff54352310)
[component_container_isolated-2] 	281473316015040 (0xffff543dce20)
[component_container_isolated-2] 	281473317931888 (0xffff543dcae0)
[component_container_isolated-2] 	281473317933024 (0xffff543dcb80)
[component_container_isolated-2] 	281473318223248 (0xffff543dcc60)
[component_container_isolated-2] 	281473318223488 (0xffff543dcd40)
[component_container_isolated-2] 	281473319519312 (0xffff543dcfe0)
[component_container_isolated-2] 	281473319520736 (0xffff543dd0c0)
[component_container_isolated-2] 	281473320841584 (0xffff543e5c70)
[component_container_isolated-2] 	281473322560000 (0xffff40000d20)
[component_container_isolated-2] 	281473331308304 (0xffff543e59d0)
[component_container_isolated-2] 	281473331312336 (0xffff543eb040)
[component_container_isolated-2] 	281473331313024 (0xffff543dca40)
[component_container_isolated-2] 	281473335311648 (0xffff543e5ab0)
[component_container_isolated-2] 	281473335313072 (0xffff543e5b90)
[component_container_isolated-2] 	281473335359952 (0xffff543da040)
[component_container_isolated-2] 	281473336065232 (0xffff543dcf00)
[component_container_isolated-2] 	281473336134544 (0xffff543dd1a0)
[component_container_isolated-2] 	281473336303616 (0xffff543e5d50)
[component_container_isolated-2] 	281473336307872 (0xffff543e5e30)
[component_container_isolated-2] 	281473336309296 (0xffff543e5f10)
[component_container_isolated-2] 	281473336310720 (0xffff543e5ff0)
[ERROR] [component_container_isolated-2]: process has died [pid 12246, exit code 1, cmd '/opt/ros/humble/lib/rclcpp_components/component_container_isolated --use_multi_threaded_executor --ros-args --log-level info --ros-args -r __node:=zed_container -r __ns:=/zed'].
^C[WARNING] [launch]: user interrupted with ctrl-c (SIGINT)
[robot_state_publisher-1] [INFO] [1779457217.297943320] [rclcpp]: signal_handler(signum=2)
[INFO] [robot_state_publisher-1]: process has finished cleanly [pid 12244]

When I connect another GMSL camera (ZEDXOne GS), and launch the wrapper, it launches fine, with a normal stream.

Is this now an issue with the camera itself?

Are you moving the camera or is it static?

It is static, on a table.

Hi @Jumana
This is a clear connectivity issue.

I recommend you try to replace the flat cables used to connect the capture card to the Jetson carrier board.

Thanks- we will try that. Given that one set of cameras worked on the same setup, and the ZEDXMini did not, I do think it is a camera issue, not the ribbon cables (since they should have failed for the ZEDXOne, which they did not).