Arducam AR0234 global shutter camera not working on Jetson Nano/NX/Orin NX after Jetvariety setup

Hi everyone. I’m trying to get an Arducam 2.3 MP AR0234 Global Shutter camera working on some NVIDIA Jetson boards (Nano/NX and Orin NX). I followed the Jetvariety Cameras section of the Arducam Wiki for the Jetson Nano B01, but I can’t get the camera to work at all.

On some Jetpack versions the driver actually fails during the installation. On other versions the camera seems to become active after install, but it won’t open with the settings specified in the format list.

One thing I noticed: only Y16 and BA10 show up in the format list. Is that expected, or should this camera support more formats?

For reference, my setup is:

  • Camera: Arducam 2.3 MP AR0234 Global Shutter
  • Boards: NVIDIA Jetson Nano/NX and Orin NX (purchased from Uctronics)
  • Software: Arducam Wiki Jetvariety Cameras instructions for Jetson Nano B01, tried across multiple Jetpack versions

I’ve gone through the Jetvariety Cameras instructions for the Jetson Nano B01 on several different Jetpack versions. I captured the terminal operations, the dmesg output, and connection photos so you can see exactly what’s happening. I’ve attached everything here:
[Jetvariety Camera - AR0234.rar]

Thanks for the logs and photos. Looking through your attachment: the camera driver can’t be installed on Jetpack 4.7.1, but it does install and work on the other two Jetpack versions you tested. The camera only exposes two pixel formats - Y16 and BA10.

The reason the install fails on 4.7.1 is that Jetpack 4.7.1 is too old; we’re focusing support effort on the newer Jetpack versions.

So the path forward is to use a newer Jetpack version where the driver installs and the camera is detected. For capture, open the Y16 and BA10 formats directly with OpenCV.

And to answer your format question directly: only Y16 and BA10 will appear in the v4l2 format list. This camera does not support additional formats, so what you’re seeing is normal.

Thanks for confirming that. Update: on Jetpack 5.0 and 5.1 the driver installs successfully, and I can see /dev/video0 plus the v4l2 formats. But I still can’t get the camera to open with gst-launch pipelines. (Understood that Jetpack 4.7.1 isn’t supported.)

Jetpack versions I’ve tested: 4.7.1, 5.0, and 5.1, all with the Arducam 2.3 MP AR0234 Global Shutter.

Here’s the format list I’m seeing on the working install:

nvidia@nvidia-desktop:~$ v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'Y16 ’
Name : 16-bit Greyscale
Size: Discrete 1920x1200
Size: Discrete 1920x1080
Size: Discrete 1280x720

Index       : 1
Type        : Video Capture
Pixel Format: 'BA10'
Name        : 10-bit Bayer GRGR/BGBG
	Size: Discrete 1920x1200
	Size: Discrete 1920x1080
	Size: Discrete 1280x720

And here are the gst-launch commands I tried, with the warnings each one gave:

nvidia@nvidia-desktop:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=GAY8, width=2560, height=800 ! videoconvert ! xvimagesink
WARNING: erroneous pipeline: could not link v4l2src0 to videoconvert0, neither element can handle caps video/x-raw, format=(string)GAY8, width=(int)2560, height=(int)800

nvidia@nvidia-desktop:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=GAY8, width=2560, height=800 ! videoconvert ! xvimagesink
WARNING: erroneous pipeline: could not link v4l2src0 to videoconvert0, neither element can handle caps video/x-raw, format=(string)GAY8, width=(int)2560, height=(int)800

nvidia@nvidia-desktop:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=GAY8, width=2560, height=800 ! videoconvert ! glvimagesink
WARNING: erroneous pipeline: no element “glvimagesink”

nvidia@nvidia-desktop:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=GAY8, width=2560, height=800 ! videoconvert ! glimagesink
WARNING: erroneous pipeline: could not link v4l2src0 to videoconvert0, neither element can handle caps video/x-raw, format=(string)GAY8, width=(int)2560, height=(int)800

nvidia@nvidia-desktop:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=GAY8, width=2560, height=800 ! videoconvert ! d3dvideosink
WARNING: erroneous pipeline: no element “d3dvideosink”

nvidia@nvidia-desktop:~$ ls /dev/video0
/dev/video0

nvidia@nvidia-desktop:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=Y16, width=1280, height=720 ! videoconvert ! xvimagesink
WARNING: erroneous pipeline: could not link v4l2src0 to videoconvert0, neither element can handle caps video/x-raw, format=(string)Y16, width=(int)1280, height=(int)720

nvidia@nvidia-desktop:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=Y16, width=1920, height=1080 ! videoconvert ! xvimagesink
WARNING: erroneous pipeline: could not link v4l2src0 to videoconvert0, neither element can handle caps video/x-raw, format=(string)Y16, width=(int)1920, height=(int)1080

nvidia@nvidia-desktop:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=Y16, width=1280, height=720 ! videoconvert ! ximagesink
WARNING: erroneous pipeline: could not link v4l2src0 to videoconvert0, neither element can handle caps video/x-raw, format=(string)Y16, width=(int)1280, height=(int)720

nvidia@nvidia-desktop:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=Y16, width=1280, height=720 ! videoconvert ! GLimagesink
WARNING: erroneous pipeline: no element “GLimagesink”

nvidia@nvidia-desktop:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=Y16, width=1280, height=720 ! videoconvert ! glimagesink
WARNING: erroneous pipeline: could not link v4l2src0 to videoconvert0, neither element can handle caps video/x-raw, format=(string)Y16, width=(int)1280, height=(int)720

nvidia@nvidia-desktop:~$ gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=BA10, width=1280, height=720 ! videoconvert ! xvimagesink
WARNING: erroneous pipeline: could not link v4l2src0 to videoconvert0, neither element can handle caps video/x-raw, format=(string)BA10, width=(int)1280, height=(int)720

Basically, I tried gst-launch-1.0 pipelines with GAY8, Y16, and BA10 using xvimagesink, glvimagesink, glimagesink, d3dvideosink, ximagesink, and GLimagesink as sinks. Every single one failed with either a link error or a missing element. And ls /dev/video0 confirms the device is there.

Looking at this follow-up evidence: v4l2-ctl --list-formats-ext shows only 'Y16 ’ (16-bit Greyscale) and ‘BA10’ (10-bit Bayer GRGR/BGBG), with discrete sizes of 1920x1200, 1920x1080, and 1280x720. Your GStreamer pipelines fail to link v4l2src0 to videoconvert0 for GAY8, Y16, and BA10, and the sink elements glvimagesink, d3dvideosink, and GLimagesink aren’t present on your system.

In short, raw gst-launch pipelines can’t negotiate those caps with videoconvert, and several sink elements are missing. I’d suggest using the arducam_displayer.py example script instead of raw gst-launch pipelines.

Try the arducam_displayer.py example from the Jetvariety example repository:

To summarize: the camera is detected as /dev/video0 and only Y16 and BA10 are listed, which is expected. Open those formats with OpenCV or the arducam_displayer.py example script, and it should handle the format and caps negotiation for you.