Problems connecting multiple GMSL cameras to Jetson AGX Xavier Developer Kit

In my setup I have 3 NileCAM30_USB cameras connected to a USB hub which is connected to the 3.1 gen 1 port of Jetson AGX Xavier Developer Kit. One additional NileCAM30_USB camera is connected to the USB-C port of the NVIDIA computer. I capture images of the resolution 1536x2304 at the framerate 12 fps. All the USB ports on the way are either 3.0 or 3.1 gen 1 ports.

The cameras work smoothly when I run 1 or 2 cameras at once. Nevertheless, I often experience problems when I run 3 or 4 cameras per Xavier. Usually one of the cameras does not stream data, sometimes even two. On the other hand, from time to time (quite rarely though) all of them work.

I carried out multiple tests to figure out the reason, e.g. I connected additional power supply to check if the cameras are underpowered but it did not improve their performance.

What most likely causes the problems? Can it be the USB driver in the Xavier?
Which solutions do you recommend to connect at least 4 GMSL cameras (either NileCAM30 or NileCAM30_USB) to Jetson AGX Xavier Developer Kit?

It’s better to use CSI camera for multiple cam use case.
Did you check the v4l2-ctl to check the frame rate?

Hey ShaneCCC,

I’m working on the same project as Witold. Our cameras need to be mounted relatively far from the Xavier, and it’s my understanding CSI cameras will not work for this. Four GMSL cameras should be achievable according to this discussion:

https://devtalk.nvidia.com/default/topic/1047552/jetson-agx-xavier/maximum-number-of-csi-2-and-gmsl-cameras-that-can-be-integrated-with-xavier/

Can you tell me what you mean more specifically by using v4l2-ctl to check the frame rate?

Check the frame rate by below command

v42l-ctl -d /dev/video0 --stream-mmap --stream-count=1000 & v42l-ctl -d /dev/video1 --stream-mmap --stream-count=1000 & v42l-ctl -d /dev/video2 --stream-mmap --stream-count=1000 & v42l-ctl -d /dev/video3 --stream-mmap --stream-count=1000

I tried running it, but I wanted to see what output referred to which camera, so I split it up between four terminals and ran them simultaneously. I got some weird results. For the cameras that worked, the output was about 50-60fps. However, the first time I ran them all, three cameras ran fine, but one stopped after a few lines and never completed. On another trial all four stopped part way through, and on another, only one ran. In all of these instances no error message was displayed for a long time, although for the last trial eventually when I let them sit for a long while it said “Failed to open /dev/video#: Device or resource busy”. Additionally, the cameras have lights that go red when they’re powered, and yellow when streaming. The cameras that stopped working flashed between red and yellow. Do you know what might cause this? What result should we expect? Additionally, do you know what the <<<< part of the output indicates? For some output, the amount of arrows was not constant, although I’m not sure if this means anything.

Could you have it a try on x86 system?