voxl-camera-server saying Boson doesn't support 640x512 resolution when starting
-
Hi,
I am using a VOXL2 running SDK v1.4.5 with a Hadron 640R connected to J7. I am getting a video stream from the EO camera on the Hadron, but the voxl-camera-server says that 640x512 is an invalid resolution and doesn't start.
I followed the instructions posted here (https://docs.modalai.com/voxl2-hadron) after configuring the Hadron via the USB cable according to the instructions for the Boson camera, but maybe I'm missing something / did something silly?
The output of voxl-camera-server -l:
voxl2:~$ voxl-camera-server -l ==================================== Number of cameras detected: 2 ====================================
My config file (that I pulled from the instructions):
{ "version": 0.1, "fsync_en": false, "fsync_gpio": 109, "cameras": [{ "type": "boson", "name": "boson", "enabled": true, "camera_id": 0, "fps": 30, "en_preview": true, "en_misp": false, "preview_width": 640, "preview_height": 512, "en_raw_preview": true, "en_small_video": false, "en_large_video": false, "ae_mode": "off", "en_rotate": false, "small_video_width": 640, "small_video_height": 480, "small_venc_mode": "h264", "small_venc_br_ctrl": "cqp", "small_venc_Qfixed": 30, "small_venc_Qmin": 15, "small_venc_Qmax": 40, "small_venc_nPframes": 9, "small_venc_mbps": 2, "small_venc_osd": false, "large_video_width": -1, "large_video_height": -1, "large_venc_mode": "h264", "large_venc_br_ctrl": "cqp", "large_venc_Qfixed": 40, "large_venc_Qmin": 15, "large_venc_Qmax": 50, "large_venc_nPframes": 29, "large_venc_mbps": 40, "large_venc_osd": false, "misp_width": -1, "misp_height": -1, "misp_venc_enable": true, "misp_venc_mode": "h264", "misp_venc_br_ctrl": "cqp", "misp_venc_Qfixed": 30, "misp_venc_Qmin": 15, "misp_venc_Qmax": 50, "misp_venc_nPframes": 29, "misp_venc_mbps": 2, "misp_venc_osd": false, "misp_awb": "auto", "misp_gamma": 1, "gain_min": 54, "gain_max": 8000 }, { "type": "ov64b", "name": "hires", "enabled": true, "camera_id": 1, "fps": 30, "en_preview": true, "en_misp": false, "preview_width": 1920, "preview_height": 1080, "en_raw_preview": false, "en_small_video": false, "en_large_video": false, "en_snapshot": false, "ae_mode": "isp", "gain_min": 54, "gain_max": 32000, "small_video_width": 1024, "small_video_height": 768, "small_venc_mode": "h264", "small_venc_br_ctrl": "cqp", "small_venc_Qfixed": 30, "small_venc_Qmin": 15, "small_venc_Qmax": 40, "small_venc_nPframes": 9, "small_venc_mbps": 2, "small_venc_osd": false, "large_video_width": 3840, "large_video_height": 2160, "large_venc_mode": "h264", "large_venc_br_ctrl": "cqp", "large_venc_Qfixed": 40, "large_venc_Qmin": 15, "large_venc_Qmax": 50, "large_venc_nPframes": 29, "large_venc_mbps": 40, "large_venc_osd": false, "en_snapshot_width": 3840, "en_snapshot_height": 2160, "exif_focal_length": 3.0999999046325684, "exif_focal_length_in_35mm_format": 17, "exif_fnumber": 1.2400000095367432, "snapshot_jpeg_quality": 75, "misp_width": -1, "misp_height": -1, "misp_venc_enable": true, "misp_venc_mode": "h265", "misp_venc_br_ctrl": "cqp", "misp_venc_Qfixed": 38, "misp_venc_Qmin": 15, "misp_venc_Qmax": 50, "misp_venc_nPframes": 29, "misp_venc_mbps": 30, "misp_venc_osd": false, "misp_awb": "auto", "misp_gamma": 1.6 }] }
Output of voxl-camera-server -d 0:
voxl2:~$ voxl-camera-server -d 0 MISP awb str: auto Setting MISP AWB to Auto MISP channels enabled in defaults : 0 ERROR: object missing misp_channels MISP awb str: auto Setting MISP AWB to Auto MISP channels enabled in defaults : 0 ERROR: object missing misp_channels ================================================================= configuration for 2 cameras: cam #0 name: boson sensor type: boson isEnabled: 1 camId: 0 camId2: -1 fps: 30 en_rotate: 0 en_rotate2: 0 en_preview: 1 pre_width: 640 pre_height: 512 en_raw_preview: 1 en_small_video: 0 small_video_width: 640 small_video_height: 480 en_large_video: 0 large_video_width: -1 large_video_height: -1 en_misp: 0 misp_width: -1 misp_height: -1 en_snapshot: 0 snap_width: -1 snap_height: -1 exif_focal_length: 0.000000 exif_focal_len_35mm_format:0 exif_fnumber: 0.000000 ae_mode: off msv_exposure_min_us: 20 msv_exposure_max_us: 33000 gain_min : 54 gain_max : 8000 standby_enabled: 0 decimator: 1 independent_exposure:0 cam #1 name: hires sensor type: ov64b isEnabled: 1 camId: 1 camId2: -1 fps: 30 en_rotate: 0 en_rotate2: 0 en_preview: 1 pre_width: 1920 pre_height: 1080 en_raw_preview: 0 en_small_video: 0 small_video_width: 1024 small_video_height: 768 en_large_video: 0 large_video_width: 3840 large_video_height: 2160 en_misp: 0 misp_width: -1 misp_height: -1 en_snapshot: 0 snap_width: 3840 snap_height: 2160 exif_focal_length: 3.100000 exif_focal_len_35mm_format:17 exif_fnumber: 1.240000 ae_mode: isp msv_exposure_min_us: 20 msv_exposure_max_us: 33000 gain_min : 54 gain_max : 32000 standby_enabled: 0 decimator: 1 independent_exposure:0 fsync_en: 0 fsync_gpio: 109 ================================================================= DEBUG: Attempting to open the hal module DEBUG: SUCCESS: Camera module opened on attempt 0 DEBUG: ----------- Number of cameras: 2 VERBOSE: cci-direct: using voxl_platform_mod config 0 layout DEBUG: Cam idx: 0, Cam slot: 3, Slave Address: 0x006C, Sensor Id: 0x6442 DEBUG: Cam idx: 1, Cam slot: 5, Slave Address: 0x00D4, Sensor Id: 0x00FF thread is locked to cores: 4 5 6 7 connected to mavlink pipe Connected to cpu-monitor DEBUG: ------ voxl-camera-server: Starting 2 cameras Starting Camera: boson (id #0) DEBUG: Checking Gain limits for Camera: boson DEBUG: Using gain limits min: 54 max: 860 DEBUG: cam ID 0 checking for fmt: 37 w: 640 h: 512 o: 0 DEBUG: ==> option 0: format= 34 width=9248 height=6944 is_input=0 DEBUG: ==> option 4: format= 34 width=9248 height=6944 is_input=1 ... DEBUG: ==> option 644: format= 33 width= 720 height= 480 is_input=0 DEBUG: ==> option 648: format= 34 width= 640 height= 512 is_input=0 DEBUG: ==> option 652: format= 35 width= 640 height= 512 is_input=0 DEBUG: ==> option 656: format= 33 width= 640 height= 512 is_input=0 DEBUG: ==> option 660: format= 34 width= 640 height= 480 is_input=0 DEBUG: ==> option 664: format= 35 width= 640 height= 480 is_input=0 DEBUG: ==> option 668: format= 33 width= 640 height= 480 is_input=0 DEBUG: ==> option 672: format= 34 width= 640 height= 400 is_input=0 DEBUG: ==> option 676: format= 35 width= 640 height= 400 is_input=0 DEBUG: ==> option 680: format= 33 width= 640 height= 400 is_input=0 DEBUG: ==> option 684: format= 34 width= 640 height= 360 is_input=0 DEBUG: ==> option 688: format= 35 width= 640 height= 360 is_input=0 DEBUG: ==> option 692: format= 33 width= 640 height= 360 is_input=0 DEBUG: ==> option 696: format= 34 width= 352 height= 288 is_input=0 DEBUG: ==> option 700: format= 35 width= 352 height= 288 is_input=0 DEBUG: ==> option 704: format= 34 width= 320 height= 240 is_input=0 DEBUG: ==> option 708: format= 35 width= 320 height= 240 is_input=0 DEBUG: ==> option 712: format= 34 width= 240 height= 320 is_input=0 DEBUG: ==> option 716: format= 35 width= 240 height= 320 is_input=0 DEBUG: ==> option 720: format= 34 width= 176 height= 144 is_input=0 DEBUG: ==> option 724: format= 35 width= 176 height= 144 is_input=0 DEBUG: ==> option 728: format= 37 width=9248 height=6944 is_input=0 DEBUG: ==> option 732: format= 38 width=9248 height=6944 is_input=0 DEBUG: ==> option 736: format= 32 width=9248 height=6944 is_input=0 DEBUG: ==> option 740: format= 36 width=9248 height=6944 is_input=0 DEBUG: ==> option 744: format= 37 width=4624 height=3472 is_input=0 DEBUG: ==> option 748: format= 38 width=4624 height=3472 is_input=0 DEBUG: ==> option 752: format= 32 width=4624 height=3472 is_input=0 DEBUG: ==> option 756: format= 36 width=4624 height=3472 is_input=0 ERROR: Camera 0 failed to find supported preview config: 640x512 WARNING: Failed to start cam boson due to invalid resolution WARNING: assuming cam is missing and trying to compensate Starting Camera: hires (originally id #1) with id offset: 1 DEBUG: Checking Gain limits for Camera: hires DEBUG: Using gain limits min: 54 max: 860 DEBUG: cam ID 0 checking for fmt: 35 w: 1920 h: 1080 o: 0 DEBUG: ==> option 0: format= 34 width=9248 height=6944 is_input=0 DEBUG: ==> option 4: format= 34 width=9248 height=6944 is_input=1 ... DEBUG: ==> option 748: format= 38 width=4624 height=3472 is_input=0 DEBUG: ==> option 752: format= 32 width=4624 height=3472 is_input=0 DEBUG: ==> option 756: format= 36 width=4624 height=3472 is_input=0 VERBOSE: Successfully found configuration match for camera 0: 1920x1080 VERBOSE: Adding preview stream for camera: 0 DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI VERBOSE: Opened GBM fd gbm_create_device(156): Info: backend name is: msm_drm VERBOSE: Created GBM device DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=60 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=62 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=64 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=66 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=68 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=70 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=72 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=74 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=76 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=78 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=80 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=82 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=84 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=86 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=88 vaddr=(nil) DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=90 vaddr=(nil) DEBUG: Successfully set up pipeline for stream: PREVIEW VERBOSE: Entered thread: cam0-request(tid: 18927) DEBUG: Started Camera: hires ------ voxl-camera-server: Started 1 of 2 cameras ------ voxl-camera-server: Camera server is now running VERBOSE: Entered thread: cam0-result(tid: 18928) VERBOSE: added request for preview stream VERBOSE: Sending request for frame 0 for camera hires for 1 streams ...
-
I'm still having trouble with this... I've gone back through the instructions again, but I keep getting a message that says the boson doesn't support 640x512 even though that resolution is listed in the debug output:
DEBUG: ==> option 644: format= 33 width= 720 height= 480 is_input=0 DEBUG: ==> option 648: format= 34 width= 640 height= 512 is_input=0 DEBUG: ==> option 652: format= 35 width= 640 height= 512 is_input=0 DEBUG: ==> option 656: format= 33 width= 640 height= 512 is_input=0 DEBUG: ==> option 660: format= 34 width= 640 height= 480 is_input=0 DEBUG: ==> option 664: format= 35 width= 640 height= 480 is_input=0 DEBUG: ==> option 668: format= 33 width= 640 height= 480 is_input=0 DEBUG: ==> option 672: format= 34 width= 640 height= 400 is_input=0 DEBUG: ==> option 676: format= 35 width= 640 height= 400 is_input=0 DEBUG: ==> option 680: format= 33 width= 640 height= 400 is_input=0 DEBUG: ==> option 684: format= 34 width= 640 height= 360 is_input=0 DEBUG: ==> option 688: format= 35 width= 640 height= 360 is_input=0 DEBUG: ==> option 692: format= 33 width= 640 height= 360 is_input=0 DEBUG: ==> option 696: format= 34 width= 352 height= 288 is_input=0 DEBUG: ==> option 700: format= 35 width= 352 height= 288 is_input=0 DEBUG: ==> option 704: format= 34 width= 320 height= 240 is_input=0 DEBUG: ==> option 708: format= 35 width= 320 height= 240 is_input=0 DEBUG: ==> option 712: format= 34 width= 240 height= 320 is_input=0 DEBUG: ==> option 716: format= 35 width= 240 height= 320 is_input=0 DEBUG: ==> option 720: format= 34 width= 176 height= 144 is_input=0 DEBUG: ==> option 724: format= 35 width= 176 height= 144 is_input=0 DEBUG: ==> option 728: format= 37 width=9248 height=6944 is_input=0 DEBUG: ==> option 732: format= 38 width=9248 height=6944 is_input=0 DEBUG: ==> option 736: format= 32 width=9248 height=6944 is_input=0 DEBUG: ==> option 740: format= 36 width=9248 height=6944 is_input=0 DEBUG: ==> option 744: format= 37 width=4624 height=3472 is_input=0 DEBUG: ==> option 748: format= 38 width=4624 height=3472 is_input=0 DEBUG: ==> option 752: format= 32 width=4624 height=3472 is_input=0 DEBUG: ==> option 756: format= 36 width=4624 height=3472 is_input=0 ERROR: Camera 0 failed to find supported preview config: 640x512 WARNING: Failed to start cam boson due to invalid resolution WARNING: assuming cam is missing and trying to compensate Starting Camera: hires (originally id #1) with id offset: 1 DEBUG: Checking Gain limits for Camera: hires DEBUG: Using gain limits min: 54 max: 860
-
@Alex-Kushleyev - I have the M181 board plugged into J7 (the other side is connected to a Hadron matching the connections correctly), but the only sensor driver that detects the boson camera is com.qti.sensormodule.boson_5.bin (not 2 like the directions show). The EO camera works using com.qti.sensormodule.ov64b40_3.bin like the directions show. The ID 5 vs 2 seems like my issue, but I'm not sure how to fix it.
-
@Matthew-Wellner , sorry for the delay.
First off, please update your
libmodal-journal
package. You are using a version that has a bug and prevents most of the output messages from being printed fromvoxl-camera-server
. You can just use apt to update it or download it directly from : http://voxl-packages.modalai.com/dists/qrb5165/dev/binary-arm64//Now, as I understand, you are only able to detect Boson in slot ID5, which is not where it's actually connected.
Let me explain why Boson is successfully detected in slot 5 (but won't stream) and how this can be used to diagnose the issue.
- Inside the Hadron camera, the two cameras (IR and EO) have a single I2C (CCI) bus that they use to communicate - both cameras are connected to the same bus
- Each VOXL2 camera slot has a I2C (CCI) port assigned to it in hardware
- VOXL2 only has 4 independent CCI controllers, but 6 physical camera slots (in the 3 camera connectors, 2 per connector)
- the CCI ports are shared in several camera slots, as follows (mapping of camera slot to CCI #:
0 : 0 1 : 1 2 : 2 3 : 3 4 : 1 5 : 3
This can also be seen from the voxl2 connector pinouts for J6, J7, J8 (look for CAMx_CCIy.. pins on each connector) : https://docs.modalai.com/voxl2-connectors/#j6-pin-out
This means that CCI1 is shared between slots 1 and 4, CCI3 is shared between slots 3 and 5
Now.. on M0159 adapter, the single CCI connection coming from Hadron is split into two, and the command (from instructions) to enable the mux that connects the two CCI busses on M0159 (from the two camera slots) together is the following :
voxl-gpio -m 6 out && voxl-gpio -w 6 1
. Then from M0159, you have two sets of cables that connect to VOXL2 via M0181.If Hadron is connected to J7, then the single CCI connection will be bridged into slot 2's and slot 3's CCI ports (which are 2 and 3). However, since they are bridged, then both cameras can be detected on either CCI 2 or CCI 3.
Also, one important detail is that both IR and EO cameras in Hadron are always on, as opposed to typical cameras we use, which have a reset signal, which is off when the camera is off. When the camera is probed / used, the camera pipeline first turns on the camera and then uses it. Normally, in order to probe a camera in slot 5, it would first need to be turned on via its reset pin, but since Boson is actually connected to slot 2, that reset pin would have been incorrect.. but sin Boson is always ON, the lack of reset and shared CCI bus allows you to probe it in the wrong slot.
The fact that you were able to detect Boson in slot 5 (CCI3) but not able to detect it in slot 2 (CCI2) means that the CCI2 hardware path is broken (connector or wire issue). Also, if you remove the ov64b sensormodule, you should also be able to probe the Boson in slot 3 :).
Incorrectly detecting the camera in the wrong slot will not allow you to get any images, since the MIPI data connection is going to slot 2, not 5, even though the CCI busses are shared / bridged.
You should do a quick test and plug in your M0181 adapter in J6 and see if Boson is detected in slot 0. If yes, then the issue may be in the Voxl's J7 connector. If not, then the issue is upstream (between M0181 and Hadron). Please note that EO will not work in slot 1 (J6U) because with default kernel, J6U is set up to be used for a second camera in a stereo pair. A hires camera in J6U will be detected (probed successfully) but will not stream.
Please inspect the wiring and try to probe Boson in J6L (slot 0) and let me know what that results in.
Alex
-
@Alex-Kushleyev - Thanks for the help! I updated libmodal-journal, I swapped M0181 over to J6, and I copied the correct bin files over to /usr/lib/camera but now I don't see either camera:
voxl2:~$ voxl-camera-server -l DEBUG: Attempting to open the hal module DEBUG: SUCCESS: Camera module opened on attempt 0 DEBUG: ----------- Number of cameras: 0 DEBUG: Note: This list comes from the HAL module and may not be indicative DEBUG: of configurations that have full pipelines DEBUG: Number of cameras: 0
I'm guessing based on what you wrote already that there is something going on between the M0181 and the Hadron?
-
@Matthew-Wellner , don't worry about the OV64b not showing up when plugged into J6 (first, there is a different gpio that would need to be turned on to enable the CCI mux, but even if we do that, the camera won't work, as I explained earlier due to the fact that J6 on VOXL2 with default kernel is set up for a single camera or stereo combo).
In any case, yes, it looks like the CCI connection In the Boson path is broken somewhere between M0181 and M0159.
If you are comfortable swapping ucoax cables, you could try to do that and see if the cable is the issue (swap the two cables places between Boson and OV64B). Just make sure you plug them in correctly, not cross the connections, see https://docs.modalai.com/voxl2-hadron/#warning)
It sounds like a case for an RMA, which is unfortunate. We do test all of these assemblies. Sorry about that!
Alex
-
@Alex-Kushleyev - I just swapped the cables and reinserted the M0181 into J7 and only the hires camera works? I was thinking that the Boson camera would work when I swapped the cables (if it was the cable). Could there be something wrong with the M0159 / M0181?
voxl2:~$ voxl-camera-server -d 0 MISP awb str: auto Setting MISP AWB to Auto MISP channels enabled in defaults : 0 ERROR: object missing misp_channels MISP awb str: auto Setting MISP AWB to Auto MISP channels enabled in defaults : 0 ERROR: object missing misp_channels ================================================================= configuration for 2 cameras: cam #0 name: boson sensor type: boson isEnabled: 1 camId: 0 camId2: -1 fps: 30 en_rotate: 0 en_rotate2: 0 en_preview: 1 pre_width: 640 pre_height: 512 en_raw_preview: 1 en_small_video: 0 small_video_width: 640 small_video_height: 480 en_large_video: 0 large_video_width: -1 large_video_height: -1 en_misp: 0 misp_width: -1 misp_height: -1 en_snapshot: 0 snap_width: -1 snap_height: -1 exif_focal_length: 0.000000 exif_focal_len_35mm_format:0 exif_fnumber: 0.000000 ae_mode: off msv_exposure_min_us: 20 msv_exposure_max_us: 33000 gain_min : 54 gain_max : 8000 standby_enabled: 0 decimator: 1 independent_exposure:0 cam #1 name: hires sensor type: ov64b isEnabled: 1 camId: 1 camId2: -1 fps: 30 en_rotate: 0 en_rotate2: 0 en_preview: 1 pre_width: 1920 pre_height: 1080 en_raw_preview: 0 en_small_video: 0 small_video_width: 1024 small_video_height: 768 en_large_video: 0 large_video_width: 3840 large_video_height: 2160 en_misp: 0 misp_width: -1 misp_height: -1 en_snapshot: 0 snap_width: 3840 snap_height: 2160 exif_focal_length: 3.100000 exif_focal_len_35mm_format:17 exif_fnumber: 1.240000 ae_mode: isp msv_exposure_min_us: 20 msv_exposure_max_us: 33000 gain_min : 54 gain_max : 32000 standby_enabled: 0 decimator: 1 independent_exposure:0 fsync_en: 0 fsync_gpio: 109 ================================================================= DEBUG: Attempting to open the hal module DEBUG: SUCCESS: Camera module opened on attempt 0 DEBUG: ----------- Number of cameras: 2 VERBOSE: cci-direct: using voxl_platform_mod config 0 layout DEBUG: Cam idx: 0, Cam slot: 3, Slave Address: 0x006C, Sensor Id: 0x6442 DEBUG: Cam idx: 1, Cam slot: 5, Slave Address: 0x00D4, Sensor Id: 0x00FF thread is locked to cores: 4 5 6 7 connected to mavlink pipe Connected to cpu-monitor DEBUG: ------ voxl-camera-server: Starting 2 cameras Starting Camera: boson (id #0) DEBUG: Checking Gain limits for Camera: boson DEBUG: Using gain limits min: 54 max: 860 DEBUG: cam ID 0 checking for fmt: 37 w: 640 h: 512 o: 0 DEBUG: ==> option 0: format= 34 width=9248 height=6944 is_input=0 ... DEBUG: ==> option 756: format= 36 width=4624 height=3472 is_input=0 ERROR: Camera 0 failed to find supported preview config: 640x512 WARNING: Failed to start cam boson due to invalid resolution WARNING: assuming cam is missing and trying to compensate Starting Camera: hires (originally id #1) with id offset: 1 DEBUG: Checking Gain limits for Camera: hires DEBUG: Using gain limits min: 54 max: 860 DEBUG: cam ID 0 checking for fmt: 35 w: 1920 h: 1080 o: 0 DEBUG: ==> option 0: format= 34 width=9248 height=6944 is_input=0 ... DEBUG: ==> option 756: format= 36 width=4624 height=3472 is_input=0 VERBOSE: Successfully found configuration match for camera 0: 1920x1080 VERBOSE: Adding preview stream for camera: 0 DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI VERBOSE: Opened GBM fd gbm_create_device(156): Info: backend name is: msm_drm VERBOSE: Created GBM device DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=60 vaddr=(nil) ... DEBUG: Converted gralloc flags 0x20900 to GBM flags 0x1400000 VERBOSE: Dumping GBM flags DEBUG: Found flag GBM_BO_USAGE_CAMERA_WRITE_QTI DEBUG: Found flag GBM_BO_USAGE_HW_COMPOSER_QTI DEBUG: Allocated BO with width=1920 height=1080 stride=1920 aligned_w=1920 aligned_h=1088 size=3133440 flags=0x20900 format=GBM_FORMAT_YCbCr_420_888 fd=90 vaddr=(nil) DEBUG: Successfully set up pipeline for stream: PREVIEW VERBOSE: Entered thread: cam0-request(tid: 3796) VERBOSE: Entered thread: cam0-result(tid: 3797) DEBUG: Started Camera: hires ------ voxl-camera-server: Started 1 of 2 cameras ------ voxl-camera-server: Camera server is now running DEBUG: Value of standby_active is: 0 DEBUG: Value of standby_active is: 0 DEBUG: Value of standby_active is: 0
-
Yes it looks like the cable is not an issue. There is something else we can try. I can build a kernel that uses CCI3 for camera slot 2, so the communication with Boson would be going thru the EO camera connector between M0181 and M0159. If this works, we can at least confirm that everything else works.
At least if this works, you may be able to use Hadron and meanwhile request a replacement.
Can you let me known which SDK you are using and your kernel version (mach. Var) when you run voxl-version?
Alex
-
@Alex-Kushleyev - Sounds good. I am on SDK 1.4.5 and my mach.var is 1.0.0.
voxl2:~$ voxl-version ──────────────────────────────────────────────────────────────────────────────── system-image: 1.8.02-M0054-14.1a-perf kernel: #1 SMP PREEMPT Mon Nov 11 22:08:01 UTC 2024 4.19.125 ──────────────────────────────────────────────────────────────────────────────── hw platform: M0054 mach.var: 1.0.0 SKU: MCCA-M0054-C8-T0-M0-X0 ──────────────────────────────────────────────────────────────────────────────── voxl-suite: 1.4.5 ────────────────────────────────────────────────────────────────────────────────
-
Please try this kernel (it tells the system to use CCI3 instead of CCI2 when using camera in slot 2) : https://storage.googleapis.com/modalai_public/temp/test_kernels/qti-ubuntu-robotics-image-m0054-boot-slot2-cci3.img
With this change, the CCI communication to Boson will actually happen on the Voxl's J7 upper path (using CCI3) and will go over hardware path that is working for the EO camera. By the way, after the initial probing of Boson during start-up of camera server, there is no communication to it at all via CCI.
I just tested it on my setup with Hadron in J7.
adb reboot bootloader fastboot boot qti-ubuntu-robotics-image-m0054-boot-slot2-cci3.img
Then ADB into voxl2 and when you run
voxl-camera-server -l
, you will not detect any cameras.enable CCI mux on M0159 for J7:
voxl-gpio -m 6 out && voxl-gpio -w 6 1
check if cameras are detected
voxl2:/$ voxl-camera-server -l DEBUG: Attempting to open the hal module DEBUG: SUCCESS: Camera module opened on attempt 0 DEBUG: ----------- Number of cameras: 2 DEBUG: Cam idx: 0, Cam slot: 2, Slave Address: 0x00D4, Sensor Id: 0x00FF DEBUG: Cam idx: 1, Cam slot: 3, Slave Address: 0x006C, Sensor Id: 0x6442 DEBUG: Note: This list comes from the HAL module and may not be indicative DEBUG: of configurations that have full pipelines DEBUG: Number of cameras: 2
Then, run
voxl-camera-server
and view the streams viavoxl-portal
Please let me know whether this works.
Alex