Focuser for Jetson Nano in JP4.5 (L4T 32.5)

Hello,

I am porting a focuser driver from Jetpack 3.3 to Jetpack 4.5, for the Jetson Nano.

I know that the driver worked with nvcamerasrc in JP3.3 but, in the case of JP4.5, the nvcamerasrc plugin has been replaced with nvarguscamerasrc. I wonder if this can be of any problem when dealing with focusers.

During my research, I came across this recent NVIDIA forum post that describes a situation pretty similar to mine; it even shows the same error messages that I am getting when trying to use nvarguscamerasrc. The post is closed and the creation of a new post was suggested to address the additional error messages that were posted… so here it is.

  • Can you confirm that it is possible to obtain the focus value from the ISP in Jetpack 4.5 with a focuser driver?
  • If so, do you know if any changes are required at nvarguscamerasrc level?
  • Can you provide any reference for implementing a focuser driver in Jetpack 4.5? I did not find too much information about focusers in the Sensor Software Driver Programming Guide

Also here is the output log that I get when I try to capture with nvarguscamerasrc:

nvidia@nvidia-desktop:~$ gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), width=1920, height=1080, format=NV12, framerate=30/1' ! fakesink silent=false -v
nvbuf_utils: Could not get EGL display connection
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = event   ******* (fakesink0:sink) E (type: stream-start (10254), GstEventStreamStart, stream-id=(string)13fc29b69eab48da5fc0d73707318d9a, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)1;) 0x5595c54110
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstNvArgusCameraSrc:nvarguscamerasrc0.GstPad:src: caps = video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = event   ******* (fakesink0:sink) E (type: caps (12814), GstEventCaps, caps=(GstCaps)"video/x-raw\(memory:NVMM\)\,\ width\=\(int\)1920\,\ height\=\(int\)1080\,\ format\=\(string\)NV12\,\ framerate\=\(fraction\)30/1";) 0x5595c541f0
/GstPipeline:pipeline0/GstFakeSink:fakesink0.GstPad:sink: caps = video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12, framerate=(fraction)30/1
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, execute:645 No cameras available

(gst-launch-1.0:8326): GStreamer-CRITICAL **: 13:01:24.860: gst_mini_object_set_qdata: assertion 'object != NULL' failed
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = event   ******* (fakesink0:sink) E (type: eos (28174), ) 0x5595c54260
Got EOS from element "pipeline0".
Execution ended after 0:00:00.380169742
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

And the debug log from the nvargus daemon:

root@nvidia-desktop:/home/nvidia# /usr/sbin/nvargus-daemon 
X11 connection rejected because of wrong authentication.
nvbuf_utils: Could not get EGL display connection
=== NVIDIA Libargus Camera Service (0.97.3)=== Listening for connections...
=== gst-launch-1.0[8326]: Connection established (7F876D21D0)OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module0
OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module1
OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module2
NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
NvPclHwGetModuleList: No module data found
NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
NvPclHwGetModuleList: No module data found
NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
NvPclHwGetModuleList: No module data found
OFParserGetVirtualDevice: NVIDIA Camera virtual enumerator not found in proc device-tree
---- imager: No override file found. ----
(NvCamV4l2) Error NotInitialized: V4L2Device not initialized (in /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function findControlByName(), line 268)
(NvCamV4l2) Error ModuleNotPresent: V4L2Device not available (in /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function findDevice(), line 256)
(NvCamV4l2) Error ModuleNotPresent:  (propagating from /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function initialize(), line 60)
(NvOdmDevice) Error ModuleNotPresent:  (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2FocuserBase.cpp, function initialize(), line 164)
(NvOdmDevice) Error ModuleNotPresent:  (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2FocuserVcm.cpp, function initialize(), line 54)
NvPclDriverInitializeData: Unable to initialize driver v4l2_focuser
NvPclInitializeDrivers: error: Failed to init camera sub module v4l2_focuser
NvPclStartPlatformDrivers: Failed to start module drivers
NvPclDriver_V4L2_Sensor_Close: Invalid NULL input pPclDriver
NvPclStateControllerOpen: Failed ImagerGUID 2. (error 0xA000E)
NvPclOpen: PCL Open Failed. Error: 0xf
SCF: Error BadParameter: Sensor could not be opened. (in src/services/capture/CaptureServiceDeviceSensor.cpp, function getSourceFromGuid(), line 582)
SCF: Error BadParameter:  (propagating from src/services/capture/CaptureService.cpp, function addSourceByGuid(), line 437)
SCF: Error BadParameter:  (propagating from src/api/CameraDriver.cpp, function addSourceByIndex(), line 303)
SCF: Error BadParameter:  (propagating from src/api/CameraDriver.cpp, function getSource(), line 466)
Acquiring SCF Camera device source via index 0 has failed. ---- imager: No override file found. ----
(NvCamV4l2) Error NotInitialized: V4L2Device not initialized (in /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function findControlByName(), line 268)
(NvCamV4l2) Error ModuleNotPresent: V4L2Device not available (in /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function findDevice(), line 256)
(NvCamV4l2) Error ModuleNotPresent:  (propagating from /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function initialize(), line 60)
(NvOdmDevice) Error ModuleNotPresent:  (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2FocuserBase.cpp, function initialize(), line 164)
(NvOdmDevice) Error ModuleNotPresent:  (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2FocuserVcm.cpp, function initialize(), line 54)
NvPclDriverInitializeData: Unable to initialize driver v4l2_focuser
NvPclInitializeDrivers: error: Failed to init camera sub module v4l2_focuser
NvPclStartPlatformDrivers: Failed to start module drivers
NvPclDriver_V4L2_Sensor_Close: Invalid NULL input pPclDriver
NvPclStateControllerOpen: Failed ImagerGUID 1. (error 0xA000E)
NvPclOpen: PCL Open Failed. Error: 0xf
SCF: Error BadParameter: Sensor could not be opened. (in src/services/capture/CaptureServiceDeviceSensor.cpp, function getSourceFromGuid(), line 582)
SCF: Error BadParameter:  (propagating from src/services/capture/CaptureService.cpp, function addSourceByGuid(), line 437)
SCF: Error BadParameter:  (propagating from src/api/CameraDriver.cpp, function addSourceByIndex(), line 303)
SCF: Error BadParameter:  (propagating from src/api/CameraDriver.cpp, function getSource(), line 466)
Acquiring SCF Camera device source via index 1 has failed. ---- imager: No override file found. ----
(NvCamV4l2) Error NotInitialized: V4L2Device not initialized (in /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function findControlByName(), line 268)
(NvCamV4l2) Error ModuleNotPresent: V4L2Device not available (in /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function findDevice(), line 256)
(NvCamV4l2) Error ModuleNotPresent:  (propagating from /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function initialize(), line 60)
(NvOdmDevice) Error ModuleNotPresent:  (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2FocuserBase.cpp, function initialize(), line 164)
(NvOdmDevice) Error ModuleNotPresent:  (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2FocuserVcm.cpp, function initialize(), line 54)
NvPclDriverInitializeData: Unable to initialize driver v4l2_focuser
NvPclInitializeDrivers: error: Failed to init camera sub module v4l2_focuser
NvPclStartPlatformDrivers: Failed to start module drivers
NvPclDriver_V4L2_Sensor_Close: Invalid NULL input pPclDriver
NvPclStateControllerOpen: Failed ImagerGUID 0. (error 0xA000E)
NvPclOpen: PCL Open Failed. Error: 0xf
SCF: Error BadParameter: Sensor could not be opened. (in src/services/capture/CaptureServiceDeviceSensor.cpp, function getSourceFromGuid(), line 582)
SCF: Error BadParameter:  (propagating from src/services/capture/CaptureService.cpp, function addSourceByGuid(), line 437)
SCF: Error BadParameter:  (propagating from src/api/CameraDriver.cpp, function addSourceByIndex(), line 303)
SCF: Error BadParameter:  (propagating from src/api/CameraDriver.cpp, function getSource(), line 466)
Acquiring SCF Camera device source via index 2 has failed. === gst-launch-1.0[8326]: CameraProvider initialized (0x7f809496f0)=== gst-launch-1.0[8326]: CameraProvider destroyed (0x7f809496f0)=== gst-launch-1.0[8326]: Connection closed (7F876D21D0)=== gst-launch-1.0[8326]: Connection cleaned up (7F876D21D0)

Hi,
I am sorry to tell L4T not support focuser.

Hello ShaneCCC,

I am sorry to hear that.

I am a little confused because focusers are listed as Individual Image Devices, on the NVIDIA Jetson Linux Driver Package Software Features, 32.6.1 release. Can you please elaborate a little bit further by answering these questions?

  1. Which was the latest L4T that supported focusers? I know that at least Jetpack 3.3 (L4T 28.2) supported them because of the driver that I am porting.
  2. The 32.6.1 reference for Libargus API mentions a FocuserPosition object. How can this be leveraged to manipulate a focuser on the Jetson platforms?

Did you check the focuser driver to check if any modification with J3.3?

Yes, we checked the focuser driver in JP 3.3. In fact, we used it a couple of years ago and it worked correctly. It does not seem to be working on JP4.5-JP4.6.

Can you please answer these questions:

  • Was the focuser support removed from the more recent versions of Jetpack?
  • Is there any way of obtaining the focus data from the ISP? I can see from the Libargus API that there is a getFocuserPosition method. Can you confirm that this is still supported in Jetpack 4.x?
  1. No we claim Not support at beginning.
  2. Suppose yes, but didn’t verify.