GMSL ov10635 on drive agx dev kit and driveworks 2.0

Hello,

I want to visualize the output of an ov10635 sensor on the drive agx dev kit.

I got it to work already with the sekonix sample cam coming with the developer kit.

./sample_camera_gmsl --camera-type=ar0231-rccb-bae-sf3325

But now I want to test it with the ov10635 I get the following output:

nvidia@tegra-ubuntu:/usr/local/driveworks/bin$ ./sample_camera_gmsl --camera-type=ov10635
[08-08-2019 07:47:39] Platform: Detected DDPX - Tegra A
[08-08-2019 07:47:39] Initialize DriveWorks SDK v2.0.2081
[08-08-2019 07:47:39] Release build with GNU 4.9.4 from heads/buildbrain-branch-0-g36b127f against Drive PDK v5.1.0.2
[08-08-2019 07:47:39] TimeSource: monotonic epoch time offset is 1565244943508264
[08-08-2019 07:47:39] PTP Time is available from NVPPS Driver
[08-08-2019 07:47:39] Platform: number of GPU devices detected 2
[08-08-2019 07:47:39] Platform: currently selected GPU device discrete ID 0
[08-08-2019 07:47:39] SDK: Resources mounted from .././data/
[08-08-2019 07:47:39] SDK: Create NvMediaDevice
[08-08-2019 07:47:39] SDK: use EGL display as provided
[08-08-2019 07:47:39] Initialize DriveWorks VisualizationSDK v2.0.2081
[08-08-2019 07:47:39] Initialize DriveWorksGL SDK v2.0.2081
[08-08-2019 07:47:39] SensorFactory::createSensor() -> camera.gmsl, output-format=yuv,fifo-size=3,isp-mode=yuv420-uint8,camera-type=ov10635,camera-group=a,slave=0
[08-08-2019 07:47:39] Driveworks exception thrown: DW_FAILURE: CameraType: fromName no suitable camera type found

terminate called after throwing an instance of 'std::runtime_error'
  what():  [2019-08-08 07:47:39] DW Error DW_FAILURE executing DW function:
 dwSAL_createSensor(&m_camera, params, m_sal)
 at /dvs/git/dirty/gitlab-master_av/dw/sdk/samples/sensors/camera/camera_gmsl/main.cpp:174
Aborted (core dumped)

It seems like that the board is not supporting the ov10635.
So I started sample_sensor_info:

nvidia@tegra-ubuntu:/usr/local/driveworks/bin$ ./sample_sensors_info [08-08-2019 07:49:43] Platform: Detected DDPX - Tegra A
[08-08-2019 07:49:43] Initialize DriveWorks SDK v2.0.2081
[08-08-2019 07:49:43] Release build with GNU 4.9.4 from heads/buildbrain-branch-0-g36b127f against Drive PDK v5.1.0.2
[08-08-2019 07:49:43] TimeSource: monotonic epoch time offset is 1565244943508264
[08-08-2019 07:49:43] PTP Time is available from NVPPS Driver
[08-08-2019 07:49:44] Platform: number of GPU devices detected 2
[08-08-2019 07:49:44] Platform: currently selected GPU device discrete ID 0
[08-08-2019 07:49:44] SDK: Resources mounted from /usr/local/driveworks-2.0/data/
[08-08-2019 07:49:44] SDK: Create NvMediaDevice
[08-08-2019 07:49:44] egl::Display: found 2 EGL devices
[08-08-2019 07:49:44] egl::Display: use drm device: drm-nvdc
Platform: OS_LINUX: 
   Sensor [0] : can.socket ? device=can0[,fifo-size=1024]
   Sensor [1] : can.virtual ? file=/path/to/file.can[,create_seek,default_timeout_us,time-offset=0]
   Sensor [2] : camera.virtual ? video/file=filepath.{h264,raw,lraw}[,timestamp=file.txt][,create_seek][,time-offset=0][,isp-mode={yuv420_uint8,yuv420_uint16,yuv444-uint16}]
   Sensor [3] : camera.nvidia-ip ? host=<ip_addr>, port=<TCP port number>
   Sensor [4] : camera.usb ? device=0[,mode={0,a,b}]
   Sensor [5] : camera.pointgrey ? device=0[,fps=30]
   Sensor [6] : gps.uart ? device=/dev/ttyXXX[,baud={1200,2400,4800,9600,19200,38400,57600,115200}[,format=nmea0183][,fifo-size=1024]]
   Sensor [7] : gps.virtual ? file=filepath.bin[xsens-raw-gps=true,create_seek,default_timeout_us,time-smoothing=false,time-offset=0]
   Sensor [8] : gps.xsens ? device=0[,frequency=100,xsens-raw-gps=true,time-smoothing=false,fifo-size=1024,baudrate=115200,stop-bits=2]
   Sensor [9] : gps.novatel ? [fifo-size=1024,xOffset=0.18,yOffset=0.54,zOffset=0.84]
   Sensor [10] : gps.simulator ? can-proto=can.socket,can-params=device=canX[,fifo-size=1024]
   Sensor [11] : gps.dataspeed ? can-proto=can.socket,can-params=device=canX[,fifo-size=1024]
   Sensor [12] : imu.uart ? device=/dev/ttyXXX[,baud={1200,2400,4800,9600,19200,38400,57600,115200}[,format=xsens_nmea][,fifo-size=1024]]
   Sensor [13] : imu.xsens ? device=0[,frequency=100,time-smoothing=true,fifo-size=1024,baudrate=115200,stop-bits=2]
   Sensor [14] : imu.virtual ? file=filepath.bin[,create_seek,default_timeout_us,time-smoothing=true][,fifo-size=1024][,time-offset=0][,decoder-path=filepath.so]
   Sensor [15] : imu.novatel ? [fifo-size=1024,xOffset=0.18,yOffset=0.54,zOffset=0.84]
   Sensor [16] : imu.dataspeed ? can-proto=can.socket,can-params=device=canX[,fifo-size=1024]
   Sensor [17] : imu.bosch ? can-proto=can.socket,can-params=device=canX[,fifo-size=1024]
   Sensor [18] : imu.continental ? can-proto=can.socket,can-params=device=canX[,fifo-size=1024]
   Sensor [19] : imu.simulator ? can-proto=can.socket,can-params=device=canX[,fifo-size=1024]
   Sensor [20] : imu.custom ? decoder-path=filepath.so[,<custom_args...>]
   Sensor [21] : lidar.virtual ? file=filepath.bin[,create_seek,default_timeout_us,decoder=filepath.so,time-smoothing=false,decoding=true,time-offset=0]
   Sensor [22] : lidar.socket ? ip=X.X.X.X[,dip=X.X.X.X,hres=XXXX],port=XXXX,device={QUAN_M81A, IBEO_LUX, IBEO_LUX_8L, OUSTER_OS1, VELO_VLP16, VELO_VLP16HR, VELO_HDL32E, VELO_VLP32C, VELO_HDL64E, VELO_VLS128, CUSTOM},scan-frequency=XX.X[,protocol=xxx,multicast-ip=X.X.X.X,decoder=filepath.so,time-smoothing=false,secondary=false]
   Sensor [23] : lidar.custom ? decoder-path=filepath.so[,<custom_args...>]
   Sensor [24] : radar.virtual ? file=filepath.bin,time-smoothing=true[,decoder=filepath.so,create_seek,default_timeout_us,decoding=true,time-offset=0]
   Sensor [25] : radar.socket ? ip=X.X.X.X,port=XXXX,device={DELPHI_ESR2_5, CONTINENTAL_ARS430, CONTINENTAL_ARS430_RDI, CUSTOM},multicast-ip=X.X.X.X],time-smoothing=true,isInverted=false,slave=false[,decoder=filepath.so,protocol=xxx]
   Sensor [26] : radar.can ? can-driver=can.xxx,can-bus=xxx,can-base-id=0x460,device={CONTINENTAL_ARS430_CAN}[,aurix-can-ip=X.X.X.X.X],[aurix-can-aport=XXXX][,aurix-can-bport=XXXX][,virtual-file=filepath.bin][,time-smoothing=false]

Platform: OS_DRIVE_V5L - CURRENT: 
   Sensor [0] : can.socket ? device=can0[,fifo-size=1024]
   Sensor [1] : can.aurix ? ip=10.0.0.1,bus={a,b,c,d}[,aport=50000,bport=60395][config-file=/path/to/EasyCanConfigFile.conf][,fifo-size=1024]
   Sensor [2] : can.virtual ? file=/path/to/file.can[,create_seek,default_timeout_us,time-offset=0]
   Sensor [3] : camera.gmsl ? camera-type={ar0231-rccb-bae-sf3324, ar0231-rccb-bae-sf3325, ar0144-cccc-none-gazet1},output-format={yuv+raw+data}[,slave={0,1}][,fifo-size={3..20}][,custom-board=0]camera-group={a,b,c,d},camera-count={1,2,3,4},[,camera-mask={0001|0010|0011|..|1111}][,warn-per-frame={0,1}]
   Sensor [4] : camera.slave ? host=<ip_addr>,port=<tcp_port_num>,siblingIndex=<sibling-num>,mode={fifo,mailbox},output-format={yuv+raw+data},camera-group={a,b,c},fifo-size={3..16}
   Sensor [5] : camera.virtual ? video/file=filepath.{h264,raw,lraw}[,timestamp=file.txt][,create_seek][,time-offset=0][,isp-mode={yuv420_uint8,yuv420_uint16,yuv444-uint16}]
   Sensor [6] : camera.usb ? device=0[,mode={0,a,b}]
   Sensor [7] : camera.pointgrey ? device=0[,fps=30]
   Sensor [8] : camera.nvidia-ip ? host=[ip_addr], port=[TCP port number]
   Sensor [9] : gps.uart ? device=/dev/ttyXXX[,baud={1200,2400,4800,9600,19200,38400,57600,115200}[,format=nmea0183]][,fifo-size=1024]
   Sensor [10] : gps.virtual ? file=filepath.bin[,xsens-raw-gps=true,create_seek,default_timeout_us,time-smoothing=false,time-offset=0]
   Sensor [11] : gps.xsens ? device=0[,frequency=100,xsens-raw-gps=true,time-smoothing=false,fifo-size=1024,baudrate=115200,stop-bits=2]
   Sensor [12] : gps.novatel ? [fifo-size=1024,xOffset=0.18,yOffset=0.54,zOffset=0.84]
   Sensor [13] : gps.simulator ? can-proto=can.socket,can-params=device=canX[,fifo-size=1024]
   Sensor [14] : gps.dataspeed ? can-proto=can.socket,can-params=device=canX[,fifo-size=1024]
   Sensor [15] : imu.uart ? device=/dev/ttyXXX[,baud={1200,2400,4800,9600,19200,38400,57600,115200}[,format=xsens_nmea]][,fifo-size=1024]
   Sensor [16] : imu.xsens ? device=0[,frequency=100,time-smoothing=false,fifo-size=1024,baudrate=115200,stop-bits=2]
   Sensor [17] : imu.virtual ? file=filepath.bin[,create_seek,default_timeout_us,time-smoothing=false,time-offset=0][,decoder-path=filepath.so]
   Sensor [18] : imu.novatel ? [fifo-size=1024,xOffset=0.18,yOffset=0.54,zOffset=0.84]
   Sensor [19] : imu.dataspeed ? can-proto=can.socket,can-params=device=canX[,fifo-size=1024]
   Sensor [20] : imu.bosch ? can-proto=can.socket,can-params=device=canX[,fifo-size=1024]
   Sensor [21] : imu.continental ? can-proto=can.socket,can-params=device=canX[,fifo-size=1024]
   Sensor [22] : imu.simulator ? can-proto=can.socket,can-params=device=canX[,fifo-size=1024]
   Sensor [23] : imu.custom ? decoder-path=filepath.so[,<custom_args...>]
   Sensor [24] : lidar.virtual ? file=filepath.bin[,create_seek,default_timeout_us,time-smoothing=false,decoding=true,time-offset=0]
   Sensor [25] : lidar.socket ? ip=X.X.X.X[,dip=X.X.X.X,hres=XXXX],port=XXXX,device={QUAN_M81A, IBEO_LUX, IBEO_LUX_8L, OUSTER_OS1, VELO_VLP16, VELO_VLP16HR, VELO_HDL32E, VELO_VLP32C, VELO_HDL64E, VELO_VLS128, CUSTOM},scan-frequency=XX.X[,protocol=xxx,multicast-ip=X.X.X.X,decoder=filepath.so,time-smoothing=false,secondary=false]
   Sensor [26] : lidar.custom ? decoder-path=filepath.so[,<custom_args...>]
   Sensor [27] : radar.virtual ? file=filepath.bin,time-smoothing=true[,decoder=filepath.so,create_seek,default_timeout_us,decoding=true,time-offset=0]
   Sensor [28] : radar.socket ? ip=X.X.X.X,port=XXXX,device={DELPHI_ESR2_5, CONTINENTAL_ARS430, CONTINENTAL_ARS430_RDI, CUSTOM},multicast-ip=X.X.X.X,time-smoothing=true,isInverted=false,slave=false[,decoder=filepath.so,protocol=xxx]
   Sensor [29] : radar.can ? can-driver=can.xxx,can-bus=xxx,can-base-id=0x460,device={CONTINENTAL_ARS430_CAN}[,aurix-can-ip=X.X.X.X.X],[aurix-can-aport=XXXX][,aurix-can-bport=XXXX][,virtual-file=filepath.bin]
   Sensor [30] : camera.gmsl.master ? output-format={yuv+raw}[,configuration={SF3324_DPHY_x2}][,config-type={platform}]
   Sensor [31] : camera.gmsl.client ? output-format={yuv+raw}

Platform: OS_QNX: 
   Sensor [0] : can.socket ? device=can0
   Sensor [1] : can.aurix ? ip=10.0.0.1,bus={a,b,c,d}[,aport=50000,bport=60395][config-file=/path/to/EasyCanConfigFile.conf][,fifo-size=1024]
   Sensor [2] : can.virtual ? file=/path/to/file.can[,create_seek][,time-offset=0]
   Sensor [3] : camera.gmsl ? camera-group={a,b,c,d},camera-count={1,2,3,4},camera-type={ar0231-rccb-bae-sf3324, ar0231-rccb-bae-sf3325},output-format={yuv+raw+data}[,slave={0,1}][,fifo-size={3..20}][,custom-board=0][,camera-mask={0001|0010|0011|..|1111}][,warn-per-frame={0,1}]
   Sensor [4] : camera.virtual ? video/file=filepath.{h264,raw}[,timestamp=file.txt][,create_seek][,time-offset=0][,isp-mode={yuv420_uint8,yuv420_uint16,yuv444-uint16}]
   Sensor [5] : gps.uart ? device=/dev/ttyXXX[,baud={1200,2400,4800,9600,19200,38400,57600,115200}[,format=nmea0183]][,fifo-size=1024]
   Sensor [6] : gps.virtual ? file=filepath.bin[,xsens-raw-gps=true,create_seek,default_timeout_us,time-smoothing=false,time-offset=0]
   Sensor [7] : gps.xsens ? device=0[,frequency=100,xsens-raw-gps=true,time-smoothing=false,fifo-size=1024,baudrate=115200,stop-bits=2]
   Sensor [8] : gps.dataspeed ? can-proto=can.socket/aurix,can-params=device=canX[,fifo-size=1024]
   Sensor [9] : imu.uart ? device=/dev/ttyXXX[,baud={1200,2400,4800,9600,19200,38400,57600,115200}[,format=xsens_nmea]][,fifo-size=1024]
   Sensor [10] : imu.virtual ? file=filepath.bin[,create_seek,default_timeout_us,time-smoothing=false,time-offset=0][,decoder-path=filepath.so]
   Sensor [11] : imu.xsens ? device=0[,frequency=100,time-smoothing=false,fifo-size=1024,baudrate=115200,stop-bits=2]
   Sensor [12] : imu.dataspeed ? can-proto=can.socket/aurix,can-params=device=canX[,fifo-size=1024]
   Sensor [13] : imu.bosch ? can-proto=can.socket/aurix,can-params=device=canX[,fifo-size=1024]
   Sensor [14] : imu.continental ? can-proto=can.socket/aurix,can-params=device=canX[,fifo-size=1024]
   Sensor [15] : imu.simulator ? can-proto=can.socket/aurix,can-params=device=canX[,fifo-size=1024]
   Sensor [16] : imu.custom ? decoder-path=filepath.so[,<custom_args...>]
   Sensor [17] : lidar.virtual ? file=filepath.bin[,create_seek,default_timeout_us,time-smoothing=false,time-offset=0]
   Sensor [18] : lidar.socket ? ip=X.X.X.X[,dip=X.X.X.X,hres=XXXX],port=XXXX,device={QUAN_M81A, IBEO_LUX, IBEO_LUX_8L, OUSTER_OS1, VELO_VLP16, VELO_VLP16HR, VELO_HDL32E, VELO_VLP32C, VELO_HDL64E, VELO_VLS128, CUSTOM},scan-frequency=XX.X[,protocol=xxx,multicast-ip=X.X.X.X,decoder=filepath.so,time-smoothing=false,secondary=false]
   Sensor [19] : lidar.custom ? decoder-path=filepath.so[,<custom_args...>]
   Sensor [20] : radar.virtual ? file=filepath.bin,time-smoothing=true[,decoder=filepath.so,create_seek,default_timeout_us,decoding=false,time-offset=0]
   Sensor [21] : radar.socket ? ip=X.X.X.X,port=XXXX,device={DELPHI_ESR2_5, CONTINENTAL_ARS430, CONTINENTAL_ARS430_RDI, CUSTOM},multicast-ip=X.X.X.X],time-smoothing=true,isInverted=false[,decoder=filepath.so,protocol=xxx]
   Sensor [22] : radar.can ? can-driver=can.xxx,can-bus=xxx,can-base-id=0x460,device={CONTINENTAL_ARS430_CAN}[,aurix-can-ip=X.X.X.X.X],[aurix-can-aport=XXXX][,aurix-can-bport=XXXX][,virtual-file=filepath.bin]

[08-08-2019 07:49:44] SDK: Release NvMediaDevice
[08-08-2019 07:49:44] Driveworks SDK released
[08-08-2019 07:49:44] SDK: Release NvMedia2D

But in the supported sensor list in the drivework documentation there is the ov10635 listed.

What is missing? Do I have to update something? Do I have to write my own sample?

I tried now to use ./nvmipp_raw but I have no luck with the configuration file

How should I configure the the conf file for the ov10635 sensor?

I have additional informations now.

I have on the desk a SVC210 with an ov10635 on it.
Is this camera supported by the drive agx pegasus Eval Board?

Dear c.behnisch,

ov10635/SVC210 are not in DW Supported Sensors list from DriveAGX, could you please refer to “camera_mainsection_gmsl_supported_sensors” section in DriveWorks doc?
On your hostPC, file:///usr/local/driveworks-2.0/doc/nvsdk_html/camera_mainsection.html#camera_mainsection_gmsl_supported_sensors

Hi Steve,

but in the third column “NVIDIA DRIVE AGX Development Kit
on NVIDIA DRIVE 5.1 Linux” I see that custom gmsl cameras are supported.

Does this not cover the ov10635/svc210 camera?

Dear c.behnisch,

Yes, it is possible to enable the cameras with Sensor Input Processing Library (SIPL) framework.
Please see GMSL Cameras using SIPL, Synchronous (camera.gmsl.master & camera.gmsl.slave), Camera Control Plugins in same page and https://docs.nvidia.com/drive/active/5.1.0.2L/nvvib_docs/index.html#page/DRIVE_OS_Linux_SDK_Development_Guide%2FNvMedia%2Fnvmedia_concept_nvsipl.html%23 Thanks.

Hi c.behnisch,

I have a GMSL SVC210 camera too that I am trying to run on my AGX, did you find a possible solution for the same? Could you share the instructions if yes?

Thanks.

Hi JasonStatham, still no possible solution