Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Collapse
Brand Logo

ModalAI Forum

  1. ModalAI Support Forum
  2. Software Development
  3. Video and Image Sensors
  4. Hadron ov64b snapshots have a vertical image artifact

Hadron ov64b snapshots have a vertical image artifact

Scheduled Pinned Locked Moved Video and Image Sensors
34 Posts 3 Posters 4.2k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    restore
    Regular
    wrote on last edited by
    #1

    We have our VOXL2 with Hadron connected on J8. We have everything setup and can capture images successfully. After taking a bunch of images we noticed a vertical artifact in the hires_snapshot that consistently appears in the same column of pixels (~340).

    Is this a data processing flaw? If so is there a way to diagnose / troubleshoot it? Here is my voxl-camera-server.conf and an example crop of the artifact.

    {
            "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":  15,
                            "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":  true,
                            "ae_mode":      "isp",
                            "gain_min":     100,
                            "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":    9248,
                            "en_snapshot_height":   6944,
                            "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
                    }]
    }
    

    d2a6eb7b-eab9-4286-b292-0d1813e0875e-image.png

    Additionally - we are noticing a soft focus on every image. Are there any camera-server parameters for the Hadron that could lead to this sort of effect? Image EXIF shows:

    9248 x 6944
    72 dpi
    24 bit
    3.1 mm
    f/1.24
    1/2500
    ISO 54
    EXP 0
    

    Lastly - are we able to capture RAW images from the hadron at full resolution?

    Thanks!

    Alex KushleyevA 1 Reply Last reply
    0
    • R restore

      We have our VOXL2 with Hadron connected on J8. We have everything setup and can capture images successfully. After taking a bunch of images we noticed a vertical artifact in the hires_snapshot that consistently appears in the same column of pixels (~340).

      Is this a data processing flaw? If so is there a way to diagnose / troubleshoot it? Here is my voxl-camera-server.conf and an example crop of the artifact.

      {
              "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":  15,
                              "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":  true,
                              "ae_mode":      "isp",
                              "gain_min":     100,
                              "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":    9248,
                              "en_snapshot_height":   6944,
                              "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
                      }]
      }
      

      d2a6eb7b-eab9-4286-b292-0d1813e0875e-image.png

      Additionally - we are noticing a soft focus on every image. Are there any camera-server parameters for the Hadron that could lead to this sort of effect? Image EXIF shows:

      9248 x 6944
      72 dpi
      24 bit
      3.1 mm
      f/1.24
      1/2500
      ISO 54
      EXP 0
      

      Lastly - are we able to capture RAW images from the hadron at full resolution?

      Thanks!

      Alex KushleyevA Offline
      Alex KushleyevA Offline
      Alex Kushleyev
      ModalAI Team
      wrote on last edited by
      #2

      @restore, that is strange. Does this effect appear in the jpeg snapshot only? (as opposed to the preview stream).

      Yes, we do support saving raw bayer10 for this camera. For 9248 x 6944, each image would be something like 80MB (10-bit bayer)

      In order to test it,

      • set your preview width and height to 9248 x 6944
      • en_raw_preview : true
      • en_snapshot : false (for now)
      • en_misp : true
      • set misp width and height to something reasonable (1920x1080)

      When you run it, assuming there are no errors, you should see hires_bayer pipe and you can dump individual images using voxl-record-raw-image tool.

      I have not tested this in a while, but it should work. Let me know if you run into any issues.

      Also, please use an SDK that is not older than few months, as we recently enabled the full raw resolution support for this camera.

      Regarding the jpeg smoothing, the parameters are baked into the chromatix tuning file and we have not tuned that for any particular application. However, you should first check whether the jpeg encode quality is sufficiently high. snapshot_jpeg_quality param in your voxl-camera-server.conf is set to 75.

      Alex

      R 1 Reply Last reply
      0
      • Alex KushleyevA Alex Kushleyev

        @restore, that is strange. Does this effect appear in the jpeg snapshot only? (as opposed to the preview stream).

        Yes, we do support saving raw bayer10 for this camera. For 9248 x 6944, each image would be something like 80MB (10-bit bayer)

        In order to test it,

        • set your preview width and height to 9248 x 6944
        • en_raw_preview : true
        • en_snapshot : false (for now)
        • en_misp : true
        • set misp width and height to something reasonable (1920x1080)

        When you run it, assuming there are no errors, you should see hires_bayer pipe and you can dump individual images using voxl-record-raw-image tool.

        I have not tested this in a while, but it should work. Let me know if you run into any issues.

        Also, please use an SDK that is not older than few months, as we recently enabled the full raw resolution support for this camera.

        Regarding the jpeg smoothing, the parameters are baked into the chromatix tuning file and we have not tuned that for any particular application. However, you should first check whether the jpeg encode quality is sufficiently high. snapshot_jpeg_quality param in your voxl-camera-server.conf is set to 75.

        Alex

        R Offline
        R Offline
        restore
        Regular
        wrote on last edited by
        #3

        @Alex-Kushleyev thanks for your response!

        I will try these suggestions and let you know how it goes.

        I tested jpeg quality at 75 and 95 and did not notice much of a difference in sharpness.

        Alex KushleyevA 1 Reply Last reply
        0
        • R restore

          @Alex-Kushleyev thanks for your response!

          I will try these suggestions and let you know how it goes.

          I tested jpeg quality at 75 and 95 and did not notice much of a difference in sharpness.

          Alex KushleyevA Offline
          Alex KushleyevA Offline
          Alex Kushleyev
          ModalAI Team
          wrote on last edited by Alex Kushleyev
          #4

          @restore , a few more things:

          • you should set the auto exposure to lme_msv, which is the non-isp option, since we would not be using isp in this case
          • before saving the raw bayer, start the misp output stream, so that AE can actually process, otherwise the exposure will be stuck in default value -- the bayer stream does not trigger AE to process.

          Alex

          R 1 Reply Last reply
          0
          • Alex KushleyevA Alex Kushleyev

            @restore , a few more things:

            • you should set the auto exposure to lme_msv, which is the non-isp option, since we would not be using isp in this case
            • before saving the raw bayer, start the misp output stream, so that AE can actually process, otherwise the exposure will be stuck in default value -- the bayer stream does not trigger AE to process.

            Alex

            R Offline
            R Offline
            restore
            Regular
            wrote on last edited by
            #5

            @Alex-Kushleyev I tried to configure for raw capture but am getting an error with camera-server:

            existing instance of voxl-camera-server found, attempting to stop it
            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:             1
                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:                 15
                en_rotate:           0
                en_rotate2:          0
            
                en_preview:          1
                pre_width:           9248
                pre_height:          6944
                en_raw_preview:      1
            
                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:             1
                misp_width:          1920
                misp_height:         1080
            
                en_snapshot:         0
                snap_width:          9248
                snap_height:         6944
                exif_focal_length:   3.100000
                exif_focal_len_35mm_format:17
                exif_fnumber:        1.240000
            
                ae_mode:             lme_msv
                msv_exposure_min_us: 20
                msv_exposure_max_us: 33000
                gain_min           : 100
                gain_max           : 32000
                standby_enabled:     0
                decimator:           1
                independent_exposure:0
            
            fsync_en:            0
            fsync_gpio:          109
            =================================================================
            thread is locked to cores: 4 5 6 7
            connected to mavlink pipe
            Connected to cpu-monitor
            Starting Camera: boson (id #0)
            gbm_create_device(156): Info: backend name is: msm_drm
            MISP Initializing!!!
             Detected 1 platform(s)
             Detected 1 GPU device(s)
            Starting Camera: hires (id #1)
            ERROR:   Configure streams failed for camera: 1
            ERROR:   Failed to configure streams for camera: hires
            ERROR:   Failed to start camera: hires
            
            ------ voxl-camera-server: Started 1 of 2 cameras
            

            voxl-version:

            system-image: 1.8.04-M0054-14.1a-perf
            kernel:       #1 SMP PREEMPT Mon Mar 24 22:31:58 UTC 2025 4.19.125
            ────────────────────────────────────────────────────────────────────────────────
            hw platform:  M0054
            mach.var:     1.0.1
            SKU:          MCCA-M0054-C11-T0-M0-X0
            ────────────────────────────────────────────────────────────────────────────────
            voxl-suite:   1.5.1
            ────────────────────────────────────────────────────────────────────────────────
            Packages:
            Repo:  http://voxl-packages.modalai.com/ qrb5165 dev
            Last Updated: 2026-03-18 19:55:21
            List:
            libfc-sensor                1.0.7
            libmodal-cv                 0.5.18
            libmodal-exposure           0.1.4
            libmodal-journal            0.2.6
            libmodal-json               0.4.7
            libmodal-pipe               2.13.2
            libqrb5165-io               0.5.0
            libvoxl-cci-direct          0.3.3
            libvoxl-cutils              0.1.5
            modalai-slpi                1.2.0
            mv-voxl                     0.1-r0
            qrb5165-bind                0.1-r0
            qrb5165-dfs-server          0.2.0
            qrb5165-imu-server          1.1.3
            qrb5165-mini-tof-server     0.2.2
            qrb5165-rangefinder-server  0.1.5
            qrb5165-slpi-test-sig       01-r0
            qrb5165-system-tweaks       0.3.6
            qrb5165-tflite              2.8.0-2
            voxl-ardupilot              4.8.0-325875bb
            voxl-bind-spektrum          0.1.1
            voxl-camera-calibration     0.6.0
            voxl-camera-server          2.2.4
            voxl-ceres-solver           2:1.14.0-10
            voxl-configurator           1.0.3
            voxl-cpu-monitor            0.6.0
            voxl-docker-support         1.3.1
            voxl-elrs                   0.4.7
            voxl-esc                    1.5.4
            voxl-feature-tracker        0.5.2
            voxl-flow-server            0.3.6
            voxl-gphoto2-server         0.0.10
            voxl-joystick-server        0.0.6
            voxl-jpeg-turbo             2.1.3-7
            voxl-lepton-server          1.3.3
            voxl-lepton-tracker         0.0.4
            voxl-libgphoto2             0.0.4
            voxl-libuvc                 1.0.7
            voxl-logger                 0.5.3
            voxl-mavcam-manager         0.6.0
            voxl-mavlink                0.1.5
            voxl-mavlink-server         1.4.15-202603130958
            voxl-modem                  1.1.8
            voxl-mongoose               7.7.0-2
            voxl-mpa-to-ros             0.3.9
            voxl-mpa-tools              1.4.0
            voxl-open-vins              0.4.19
            voxl-open-vins-server       0.3.12
            voxl-opencv                 4.5.5-3
            voxl-osd                    0.1.8
            voxl-portal                 0.7.11
            voxl-px4                    1.14.0-2.0.105
            voxl-px4-params             0.7.6
            voxl-qvio-server            1.2.0
            voxl-remote-id              0.0.9
            voxl-reset-slpi             0.0.1
            voxl-state-estimator        0.0.5
            voxl-streamer               0.7.5
            voxl-suite                  1.5.1
            voxl-tag-detector           0.0.5
            voxl-tflite-server          0.4.1
            voxl-utils                  1.4.8
            voxl-uvc-server             0.1.7
            voxl-vision-hub             1.8.23
            voxl-vtx                    1.4.7
            voxl-wavemux                0.0.1
            voxl2-io                    0.0.3
            voxl2-system-image          1.8.04-r0
            voxl2-wlan                  1.0-r0
            

            @Alex-Kushleyev said in Hadron ov64b snapshots have a vertical image artifact:

            before saving the raw bayer, start the misp output stream, so that AE can actually process

            what do you mean by start the misp output stream?

            Alex KushleyevA 1 Reply Last reply
            0
            • R restore

              @Alex-Kushleyev I tried to configure for raw capture but am getting an error with camera-server:

              existing instance of voxl-camera-server found, attempting to stop it
              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:             1
                  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:                 15
                  en_rotate:           0
                  en_rotate2:          0
              
                  en_preview:          1
                  pre_width:           9248
                  pre_height:          6944
                  en_raw_preview:      1
              
                  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:             1
                  misp_width:          1920
                  misp_height:         1080
              
                  en_snapshot:         0
                  snap_width:          9248
                  snap_height:         6944
                  exif_focal_length:   3.100000
                  exif_focal_len_35mm_format:17
                  exif_fnumber:        1.240000
              
                  ae_mode:             lme_msv
                  msv_exposure_min_us: 20
                  msv_exposure_max_us: 33000
                  gain_min           : 100
                  gain_max           : 32000
                  standby_enabled:     0
                  decimator:           1
                  independent_exposure:0
              
              fsync_en:            0
              fsync_gpio:          109
              =================================================================
              thread is locked to cores: 4 5 6 7
              connected to mavlink pipe
              Connected to cpu-monitor
              Starting Camera: boson (id #0)
              gbm_create_device(156): Info: backend name is: msm_drm
              MISP Initializing!!!
               Detected 1 platform(s)
               Detected 1 GPU device(s)
              Starting Camera: hires (id #1)
              ERROR:   Configure streams failed for camera: 1
              ERROR:   Failed to configure streams for camera: hires
              ERROR:   Failed to start camera: hires
              
              ------ voxl-camera-server: Started 1 of 2 cameras
              

              voxl-version:

              system-image: 1.8.04-M0054-14.1a-perf
              kernel:       #1 SMP PREEMPT Mon Mar 24 22:31:58 UTC 2025 4.19.125
              ────────────────────────────────────────────────────────────────────────────────
              hw platform:  M0054
              mach.var:     1.0.1
              SKU:          MCCA-M0054-C11-T0-M0-X0
              ────────────────────────────────────────────────────────────────────────────────
              voxl-suite:   1.5.1
              ────────────────────────────────────────────────────────────────────────────────
              Packages:
              Repo:  http://voxl-packages.modalai.com/ qrb5165 dev
              Last Updated: 2026-03-18 19:55:21
              List:
              libfc-sensor                1.0.7
              libmodal-cv                 0.5.18
              libmodal-exposure           0.1.4
              libmodal-journal            0.2.6
              libmodal-json               0.4.7
              libmodal-pipe               2.13.2
              libqrb5165-io               0.5.0
              libvoxl-cci-direct          0.3.3
              libvoxl-cutils              0.1.5
              modalai-slpi                1.2.0
              mv-voxl                     0.1-r0
              qrb5165-bind                0.1-r0
              qrb5165-dfs-server          0.2.0
              qrb5165-imu-server          1.1.3
              qrb5165-mini-tof-server     0.2.2
              qrb5165-rangefinder-server  0.1.5
              qrb5165-slpi-test-sig       01-r0
              qrb5165-system-tweaks       0.3.6
              qrb5165-tflite              2.8.0-2
              voxl-ardupilot              4.8.0-325875bb
              voxl-bind-spektrum          0.1.1
              voxl-camera-calibration     0.6.0
              voxl-camera-server          2.2.4
              voxl-ceres-solver           2:1.14.0-10
              voxl-configurator           1.0.3
              voxl-cpu-monitor            0.6.0
              voxl-docker-support         1.3.1
              voxl-elrs                   0.4.7
              voxl-esc                    1.5.4
              voxl-feature-tracker        0.5.2
              voxl-flow-server            0.3.6
              voxl-gphoto2-server         0.0.10
              voxl-joystick-server        0.0.6
              voxl-jpeg-turbo             2.1.3-7
              voxl-lepton-server          1.3.3
              voxl-lepton-tracker         0.0.4
              voxl-libgphoto2             0.0.4
              voxl-libuvc                 1.0.7
              voxl-logger                 0.5.3
              voxl-mavcam-manager         0.6.0
              voxl-mavlink                0.1.5
              voxl-mavlink-server         1.4.15-202603130958
              voxl-modem                  1.1.8
              voxl-mongoose               7.7.0-2
              voxl-mpa-to-ros             0.3.9
              voxl-mpa-tools              1.4.0
              voxl-open-vins              0.4.19
              voxl-open-vins-server       0.3.12
              voxl-opencv                 4.5.5-3
              voxl-osd                    0.1.8
              voxl-portal                 0.7.11
              voxl-px4                    1.14.0-2.0.105
              voxl-px4-params             0.7.6
              voxl-qvio-server            1.2.0
              voxl-remote-id              0.0.9
              voxl-reset-slpi             0.0.1
              voxl-state-estimator        0.0.5
              voxl-streamer               0.7.5
              voxl-suite                  1.5.1
              voxl-tag-detector           0.0.5
              voxl-tflite-server          0.4.1
              voxl-utils                  1.4.8
              voxl-uvc-server             0.1.7
              voxl-vision-hub             1.8.23
              voxl-vtx                    1.4.7
              voxl-wavemux                0.0.1
              voxl2-io                    0.0.3
              voxl2-system-image          1.8.04-r0
              voxl2-wlan                  1.0-r0
              

              @Alex-Kushleyev said in Hadron ov64b snapshots have a vertical image artifact:

              before saving the raw bayer, start the misp output stream, so that AE can actually process

              what do you mean by start the misp output stream?

              Alex KushleyevA Offline
              Alex KushleyevA Offline
              Alex Kushleyev
              ModalAI Team
              wrote on last edited by Alex Kushleyev
              #6

              @restore , the change to enable the maximum resolution raw output for OV64B was made at the end of October 2025, so you would need at least SDK 1.6.0, I believe. There was a change in the camera pipeline (not the camera driver) to allow such a large image size. Are you able to test on a newer SDK (just test the latest if you can)?

              Additionally, the resolution 9248x6944 cannot be directly used in MISP debayering (which uses OpenCL). There are some special requirements on the image stride, which width of 9248 does not match. So what will happen is the cpu will realign the image before feeding it to the gpu, but it is a lot of data to copy for a 64Mpix sensor. So I made a small change in width from 9248 to 9216 (just cut off 32 pixels) and it can be fed into the gpu directly. That change is not published yet, but i can share it.

              Lets first confirm that you can use the 1.6.x SDK to start the camera server at 9248x6944 and you should be able to save raw bayer and view the misp output.

              you can always double check the list of available raw resolutions using voxl-camera-server -l

              by "start the misp output stream", i mean that you need to have a client that subscribes to the misp output stream, so that the frames start going and AE can work, sending exposure and gain updates to the camera, so that the image is properly exposed. For example, viewing the stream in voxl-portal or just using voxl-inspect-cam hires_misp_color to get the data flowing, then you can save the raw bayer, which will have the proper exposure and gain applied.

              Alex

              C 1 Reply Last reply
              0
              • Alex KushleyevA Alex Kushleyev

                @restore , the change to enable the maximum resolution raw output for OV64B was made at the end of October 2025, so you would need at least SDK 1.6.0, I believe. There was a change in the camera pipeline (not the camera driver) to allow such a large image size. Are you able to test on a newer SDK (just test the latest if you can)?

                Additionally, the resolution 9248x6944 cannot be directly used in MISP debayering (which uses OpenCL). There are some special requirements on the image stride, which width of 9248 does not match. So what will happen is the cpu will realign the image before feeding it to the gpu, but it is a lot of data to copy for a 64Mpix sensor. So I made a small change in width from 9248 to 9216 (just cut off 32 pixels) and it can be fed into the gpu directly. That change is not published yet, but i can share it.

                Lets first confirm that you can use the 1.6.x SDK to start the camera server at 9248x6944 and you should be able to save raw bayer and view the misp output.

                you can always double check the list of available raw resolutions using voxl-camera-server -l

                by "start the misp output stream", i mean that you need to have a client that subscribes to the misp output stream, so that the frames start going and AE can work, sending exposure and gain updates to the camera, so that the image is properly exposed. For example, viewing the stream in voxl-portal or just using voxl-inspect-cam hires_misp_color to get the data flowing, then you can save the raw bayer, which will have the proper exposure and gain applied.

                Alex

                C Offline
                C Offline
                cguzikowski
                Contributor
                wrote on last edited by
                #7

                @Alex-Kushleyev we are still having some issues getting the raw images from the hadron. We have updated to SDK 1.6.3. Here is the results when setting the preview resolution to 4624x3472 and disabling MISP (camera server runs, cant get raw image):

                Setting MISP AWB to Auto
                MISP channels enabled in defaults : 0
                MISP channels enabled in config file: 0
                Setting MISP AWB to Auto
                MISP channels enabled in defaults : 0
                MISP channels enabled in config file: 0
                =================================================================
                configuration for 2 cameras:
                
                cam #0
                    name:                boson
                    type:                boson
                    bayer_type:          0
                    enabled:             0
                    camera_id:           0
                    camera_id_second:    -1
                    fps:                 30
                    en_rotate:           0
                    en_rotate2:          0
                
                    en_preview:          1
                    en_raw_preview:      1
                    preview_width:       640
                    preview_height:      512
                
                    en_misp:             0
                    misp_width:          -1
                    misp_height:         -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_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
                    type:                ov64b
                    bayer_type:          1
                    enabled:             1
                    camera_id:           1
                    camera_id_second:    -1
                    fps:                 5
                    en_rotate:           0
                    en_rotate2:          0
                
                    en_preview:          1
                    en_raw_preview:      1
                    preview_width:       4624
                    preview_height:      3472
                
                    en_misp:             0
                    misp_width:          4624
                    misp_height:         3472
                
                    en_small_video:      1
                    small_video_width:   1024
                    small_video_height:  768
                
                    en_large_video:      0
                    large_video_width:   3840
                    large_video_height:  2160
                
                    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           : 100
                    gain_max           : 32000
                    standby_enabled:     0
                    decimator:           1
                    independent_exposure:0
                
                fsync_en:            0
                fsync_gpio:          109
                =================================================================
                thread is locked to cores: 4 5 6 7
                connected to mavlink pipe
                Connected to cpu-monitor
                Skipping Camera: boson, configuration marked disabled
                Starting Camera: hires (id #1)
                Estimated imu dt = 0.000977s
                gbm_create_device(156): Info: backend name is: msm_drm
                
                ------ voxl-camera-server: Started 1 of 2 cameras
                
                ------ voxl-camera-server: Camera server is now running
                Received RAW10 frame from camera hires, will be converting to RAW8 on cpu
                

                Here is what we see when we do use MISP, and full resolution:

                existing instance of voxl-camera-server found, attempting to stop it
                Setting MISP AWB to Auto
                MISP channels enabled in defaults : 0
                MISP channels enabled in config file: 0
                Setting MISP AWB to Auto
                MISP channels enabled in defaults : 0
                MISP channels enabled in config file: 0
                =================================================================
                configuration for 2 cameras:
                
                cam #0
                    name:                boson
                    type:                boson
                    bayer_type:          0
                    enabled:             0
                    camera_id:           0
                    camera_id_second:    -1
                    fps:                 30
                    en_rotate:           0
                    en_rotate2:          0
                
                    en_preview:          1
                    en_raw_preview:      1
                    preview_width:       640
                    preview_height:      512
                
                    en_misp:             0
                    misp_width:          -1
                    misp_height:         -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_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
                    type:                ov64b
                    bayer_type:          1
                    enabled:             1
                    camera_id:           1
                    camera_id_second:    -1
                    fps:                 5
                    en_rotate:           0
                    en_rotate2:          0
                
                    en_preview:          1
                    en_raw_preview:      1
                    preview_width:       9248
                    preview_height:      6944
                
                    en_misp:             1
                    misp_width:          1920
                    misp_height:         1080
                
                    en_small_video:      1
                    small_video_width:   1024
                    small_video_height:  768
                
                    en_large_video:      0
                    large_video_width:   3840
                    large_video_height:  2160
                
                    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:             lme_msv
                    msv_exposure_min_us: 20
                    msv_exposure_max_us: 33000
                    gain_min           : 100
                    gain_max           : 32000
                    standby_enabled:     0
                    decimator:           1
                    independent_exposure:0
                
                fsync_en:            0
                fsync_gpio:          109
                =================================================================
                thread is locked to cores: 4 5 6 7
                connected to mavlink pipe
                Connected to cpu-monitor
                Skipping Camera: boson, configuration marked disabled
                Starting Camera: hires (id #1)
                ERROR:   Configure streams failed for camera: 1
                ERROR:   Failed to configure streams for camera: hires
                ERROR:   Failed to start camera: hires
                ERROR:   failed to initialize any cameras
                
                ------ voxl-camera-server: Started 0 of 2 cameras
                
                ------ voxl-camera-server: Camera server is now running
                
                ------ voxl-camera-server: Camera server is now stopping
                
                ------ voxl-camera-server: Camera server exited gracefully, returning -1
                
                
                IMU Manager closing and exiting
                
                Alex KushleyevA 1 Reply Last reply
                0
                • C cguzikowski

                  @Alex-Kushleyev we are still having some issues getting the raw images from the hadron. We have updated to SDK 1.6.3. Here is the results when setting the preview resolution to 4624x3472 and disabling MISP (camera server runs, cant get raw image):

                  Setting MISP AWB to Auto
                  MISP channels enabled in defaults : 0
                  MISP channels enabled in config file: 0
                  Setting MISP AWB to Auto
                  MISP channels enabled in defaults : 0
                  MISP channels enabled in config file: 0
                  =================================================================
                  configuration for 2 cameras:
                  
                  cam #0
                      name:                boson
                      type:                boson
                      bayer_type:          0
                      enabled:             0
                      camera_id:           0
                      camera_id_second:    -1
                      fps:                 30
                      en_rotate:           0
                      en_rotate2:          0
                  
                      en_preview:          1
                      en_raw_preview:      1
                      preview_width:       640
                      preview_height:      512
                  
                      en_misp:             0
                      misp_width:          -1
                      misp_height:         -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_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
                      type:                ov64b
                      bayer_type:          1
                      enabled:             1
                      camera_id:           1
                      camera_id_second:    -1
                      fps:                 5
                      en_rotate:           0
                      en_rotate2:          0
                  
                      en_preview:          1
                      en_raw_preview:      1
                      preview_width:       4624
                      preview_height:      3472
                  
                      en_misp:             0
                      misp_width:          4624
                      misp_height:         3472
                  
                      en_small_video:      1
                      small_video_width:   1024
                      small_video_height:  768
                  
                      en_large_video:      0
                      large_video_width:   3840
                      large_video_height:  2160
                  
                      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           : 100
                      gain_max           : 32000
                      standby_enabled:     0
                      decimator:           1
                      independent_exposure:0
                  
                  fsync_en:            0
                  fsync_gpio:          109
                  =================================================================
                  thread is locked to cores: 4 5 6 7
                  connected to mavlink pipe
                  Connected to cpu-monitor
                  Skipping Camera: boson, configuration marked disabled
                  Starting Camera: hires (id #1)
                  Estimated imu dt = 0.000977s
                  gbm_create_device(156): Info: backend name is: msm_drm
                  
                  ------ voxl-camera-server: Started 1 of 2 cameras
                  
                  ------ voxl-camera-server: Camera server is now running
                  Received RAW10 frame from camera hires, will be converting to RAW8 on cpu
                  

                  Here is what we see when we do use MISP, and full resolution:

                  existing instance of voxl-camera-server found, attempting to stop it
                  Setting MISP AWB to Auto
                  MISP channels enabled in defaults : 0
                  MISP channels enabled in config file: 0
                  Setting MISP AWB to Auto
                  MISP channels enabled in defaults : 0
                  MISP channels enabled in config file: 0
                  =================================================================
                  configuration for 2 cameras:
                  
                  cam #0
                      name:                boson
                      type:                boson
                      bayer_type:          0
                      enabled:             0
                      camera_id:           0
                      camera_id_second:    -1
                      fps:                 30
                      en_rotate:           0
                      en_rotate2:          0
                  
                      en_preview:          1
                      en_raw_preview:      1
                      preview_width:       640
                      preview_height:      512
                  
                      en_misp:             0
                      misp_width:          -1
                      misp_height:         -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_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
                      type:                ov64b
                      bayer_type:          1
                      enabled:             1
                      camera_id:           1
                      camera_id_second:    -1
                      fps:                 5
                      en_rotate:           0
                      en_rotate2:          0
                  
                      en_preview:          1
                      en_raw_preview:      1
                      preview_width:       9248
                      preview_height:      6944
                  
                      en_misp:             1
                      misp_width:          1920
                      misp_height:         1080
                  
                      en_small_video:      1
                      small_video_width:   1024
                      small_video_height:  768
                  
                      en_large_video:      0
                      large_video_width:   3840
                      large_video_height:  2160
                  
                      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:             lme_msv
                      msv_exposure_min_us: 20
                      msv_exposure_max_us: 33000
                      gain_min           : 100
                      gain_max           : 32000
                      standby_enabled:     0
                      decimator:           1
                      independent_exposure:0
                  
                  fsync_en:            0
                  fsync_gpio:          109
                  =================================================================
                  thread is locked to cores: 4 5 6 7
                  connected to mavlink pipe
                  Connected to cpu-monitor
                  Skipping Camera: boson, configuration marked disabled
                  Starting Camera: hires (id #1)
                  ERROR:   Configure streams failed for camera: 1
                  ERROR:   Failed to configure streams for camera: hires
                  ERROR:   Failed to start camera: hires
                  ERROR:   failed to initialize any cameras
                  
                  ------ voxl-camera-server: Started 0 of 2 cameras
                  
                  ------ voxl-camera-server: Camera server is now running
                  
                  ------ voxl-camera-server: Camera server is now stopping
                  
                  ------ voxl-camera-server: Camera server exited gracefully, returning -1
                  
                  
                  IMU Manager closing and exiting
                  
                  Alex KushleyevA Offline
                  Alex KushleyevA Offline
                  Alex Kushleyev
                  ModalAI Team
                  wrote on last edited by Alex Kushleyev
                  #8

                  OK, I will test it and get back to you shortly 🙂

                  C 1 Reply Last reply
                  0
                  • Alex KushleyevA Alex Kushleyev

                    OK, I will test it and get back to you shortly 🙂

                    C Offline
                    C Offline
                    cguzikowski
                    Contributor
                    wrote on last edited by
                    #9

                    @Alex-Kushleyev Some additional info: When we ran at the lower resolution and tried viewing hires_bayer in the voxl portal this error would pop up in the terminal running voxl-camera-server:

                    ERROR:   Could not find frame size from the raw buffer
                    ERROR:   MISP: Unexpected frame size for camera hires, width 4624, height 3472, stride 5792, alloc 20111360 bytes, calc frame size 20109824
                    ERROR:   Could not find frame size from the raw buffer
                    

                    Thank you for your speedy response

                    Alex KushleyevA 1 Reply Last reply
                    0
                    • C cguzikowski

                      @Alex-Kushleyev Some additional info: When we ran at the lower resolution and tried viewing hires_bayer in the voxl portal this error would pop up in the terminal running voxl-camera-server:

                      ERROR:   Could not find frame size from the raw buffer
                      ERROR:   MISP: Unexpected frame size for camera hires, width 4624, height 3472, stride 5792, alloc 20111360 bytes, calc frame size 20109824
                      ERROR:   Could not find frame size from the raw buffer
                      

                      Thank you for your speedy response

                      Alex KushleyevA Offline
                      Alex KushleyevA Offline
                      Alex Kushleyev
                      ModalAI Team
                      wrote on last edited by
                      #10

                      @cguzikowski , OK, yes i know what that issue is (unexpected frame size). I will that and test both resolutions.

                      Alex KushleyevA 1 Reply Last reply
                      0
                      • Alex KushleyevA Alex Kushleyev

                        @cguzikowski , OK, yes i know what that issue is (unexpected frame size). I will that and test both resolutions.

                        Alex KushleyevA Offline
                        Alex KushleyevA Offline
                        Alex Kushleyev
                        ModalAI Team
                        wrote on last edited by
                        #11

                        @cguzikowski ,

                        Good news. I got it working, but there were a few things needed to update. I packaged everything into a zip : https://storage.googleapis.com/modalai_public/temp/ov64b/20260401/ov64b_20260401.zip . It contains

                        • latest sensormodules for Boson and ov64b
                        • voxl-camera-server conf
                        • updated default tuning file (to fix the gain scale so that gain 1.0 is 100, not 54)
                        • updated com.qti.chi.override.so file which contains some pipeline information, now it will allow the large raw resolutions

                        (I thought the above changes were already in the latest SDK but somehow they did not make it, I will need to double check).

                        I also made some changes to the ov64b driver:

                        • updated frame length for the 9248x6944 mode so that it is 10fps (not 9.2) -- this is close to max
                        • added modes 9216x6944@10fps and 4608x3472@30fps (slightly cropped on the right), so that these buffers can be used by MISP / gpu without doing a copy.

                        I am able to capture the raw bayer at 9216x6944, 9248x6944 ,4624x3472, 4608x3472 resolutions

                        voxl-inspect-cam hires_bayer
                        ...
                        |   Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
                        | hires_bayer |79994880 | 9216 | 6944 | 33.00 | 1594 |      130 |    157.9  | 10.0 | 6415.5 | RAW10
                        
                        

                        In order to enable the misp support for the 4624x3472 and 4608x3472 resolutions in camera server, need a small update:
                        https://gitlab.com/voxl-public/voxl-sdk/services/voxl-camera-server/-/commit/389b1f4628a9b9cc0e53c43a5cf0e457717e1270

                        You can save the raw bayer using the voxl-record-raw-image tool, for example:

                        voxl-record-raw-image hires_bayer -d .
                        

                        You should be able to dump some raw bayer images and de-bayer them offline.

                        Also, here is the contents of the README that is inside the zip:


                        Supported Hardware

                        • voxl2
                        • Hadron plugged into VOXL2 J8 via M0181 adapter

                        Instructions

                        • copy Boson sensormodule to /usr/lib/camera/
                        • copy ov64b sensormodule with correct id to /usr/lib/camera/
                        • copy com.qti.tuned.default.bin to /usr/lib/camera to fix the gain scale (1.0x = 100)
                        • back up /usr/lib/hw/com.qti.chi.override.so and replace it with com.qti.chi.override.so.20260401 (rename to com.qti.chi.override.so)
                          • this updated file allows the pipeline to use the highest resolution of the ov64b camera
                        • copy voxl-camera-server.conf to /etc/modalai

                        Suported Resolutions

                        • mode 0 : 9248x6944 10 bit 10 fps
                        • mode 1 : 9216x6944 10 bit 10 fps (MISP no copy) -- crop 32 pixels on the right
                        • mode 2 : 4624x3472 10 bit 30 fps
                        • mode 3 : 4608x3472 10 bit 30 fps (MISP no copy) -- crop 16 pixels on the right
                        • mode 4 : 3840x2160 10 bit 60 fps (MISP no copy)
                        • mode 5 : 1920x1080 10 bit 240 fps
                        • mode 6 : 1920x1080 10 bit 30 fps

                        Notes

                        • even thought the 9248x6944 and 9216x6944 modes are 10 fps, you need to specify 30fps in the camera config file. This will be investigated further.
                        Alex KushleyevA 1 Reply Last reply
                        0
                        • Alex KushleyevA Alex Kushleyev

                          @cguzikowski ,

                          Good news. I got it working, but there were a few things needed to update. I packaged everything into a zip : https://storage.googleapis.com/modalai_public/temp/ov64b/20260401/ov64b_20260401.zip . It contains

                          • latest sensormodules for Boson and ov64b
                          • voxl-camera-server conf
                          • updated default tuning file (to fix the gain scale so that gain 1.0 is 100, not 54)
                          • updated com.qti.chi.override.so file which contains some pipeline information, now it will allow the large raw resolutions

                          (I thought the above changes were already in the latest SDK but somehow they did not make it, I will need to double check).

                          I also made some changes to the ov64b driver:

                          • updated frame length for the 9248x6944 mode so that it is 10fps (not 9.2) -- this is close to max
                          • added modes 9216x6944@10fps and 4608x3472@30fps (slightly cropped on the right), so that these buffers can be used by MISP / gpu without doing a copy.

                          I am able to capture the raw bayer at 9216x6944, 9248x6944 ,4624x3472, 4608x3472 resolutions

                          voxl-inspect-cam hires_bayer
                          ...
                          |   Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
                          | hires_bayer |79994880 | 9216 | 6944 | 33.00 | 1594 |      130 |    157.9  | 10.0 | 6415.5 | RAW10
                          
                          

                          In order to enable the misp support for the 4624x3472 and 4608x3472 resolutions in camera server, need a small update:
                          https://gitlab.com/voxl-public/voxl-sdk/services/voxl-camera-server/-/commit/389b1f4628a9b9cc0e53c43a5cf0e457717e1270

                          You can save the raw bayer using the voxl-record-raw-image tool, for example:

                          voxl-record-raw-image hires_bayer -d .
                          

                          You should be able to dump some raw bayer images and de-bayer them offline.

                          Also, here is the contents of the README that is inside the zip:


                          Supported Hardware

                          • voxl2
                          • Hadron plugged into VOXL2 J8 via M0181 adapter

                          Instructions

                          • copy Boson sensormodule to /usr/lib/camera/
                          • copy ov64b sensormodule with correct id to /usr/lib/camera/
                          • copy com.qti.tuned.default.bin to /usr/lib/camera to fix the gain scale (1.0x = 100)
                          • back up /usr/lib/hw/com.qti.chi.override.so and replace it with com.qti.chi.override.so.20260401 (rename to com.qti.chi.override.so)
                            • this updated file allows the pipeline to use the highest resolution of the ov64b camera
                          • copy voxl-camera-server.conf to /etc/modalai

                          Suported Resolutions

                          • mode 0 : 9248x6944 10 bit 10 fps
                          • mode 1 : 9216x6944 10 bit 10 fps (MISP no copy) -- crop 32 pixels on the right
                          • mode 2 : 4624x3472 10 bit 30 fps
                          • mode 3 : 4608x3472 10 bit 30 fps (MISP no copy) -- crop 16 pixels on the right
                          • mode 4 : 3840x2160 10 bit 60 fps (MISP no copy)
                          • mode 5 : 1920x1080 10 bit 240 fps
                          • mode 6 : 1920x1080 10 bit 30 fps

                          Notes

                          • even thought the 9248x6944 and 9216x6944 modes are 10 fps, you need to specify 30fps in the camera config file. This will be investigated further.
                          Alex KushleyevA Offline
                          Alex KushleyevA Offline
                          Alex Kushleyev
                          ModalAI Team
                          wrote on last edited by Alex Kushleyev
                          #12

                          Once you confirm this working, we can discuss the options for snapshots without going through the ISP, but you can either saw the raw bayer or any of the misp outputs using voxl-record-raw-image and convert to jpg / png offline if that works for you, but we can also help add a compression option to voxl-record-raw-image.

                          Please note that the current debayering algorithm in MISP does add some smoothing / interpolation, so the YUV image is not going to be as crisp as possible. You could compare it to the jpg output of the ISP (even thought it has artifacts). If you are looking for highest possible fidelity, it may be best to perform offline processing on the raw bayer, then you have more options.

                          Alex

                          C 1 Reply Last reply
                          0
                          • Alex KushleyevA Alex Kushleyev

                            Once you confirm this working, we can discuss the options for snapshots without going through the ISP, but you can either saw the raw bayer or any of the misp outputs using voxl-record-raw-image and convert to jpg / png offline if that works for you, but we can also help add a compression option to voxl-record-raw-image.

                            Please note that the current debayering algorithm in MISP does add some smoothing / interpolation, so the YUV image is not going to be as crisp as possible. You could compare it to the jpg output of the ISP (even thought it has artifacts). If you are looking for highest possible fidelity, it may be best to perform offline processing on the raw bayer, then you have more options.

                            Alex

                            C Offline
                            C Offline
                            cguzikowski
                            Contributor
                            wrote on last edited by
                            #13

                            @Alex-Kushleyev Hi Alex, thank you for the new drivers and the instructions. Unfortunately I am still having issues getting the hires_bayer pipe to appear. I followed all of the instructions in the README, and when shooting at 9216x6944, I get the following error:

                            ERROR:   MISP: Unexpected frame size for camera hires, width 9216, height 6944, stride 11520, alloc 79994880 bytes, calc frame size 79994880
                            ERROR:   Could not find frame size from the raw buffer
                            

                            Same error I was getting last week but now the allocated and calculated values are the same. Running it at 9248x6944 gives a similar error:

                            ERROR:   MISP: Unexpected frame size for camera hires, width 9248, height 6944, stride 11568, alloc 80330752 bytes, calc frame size 80328192
                            ERROR:   Could not find frame size from the raw buffer
                            

                            I do see the boson_bayer pipe, and in the portal the camera feed looks great - I believe we were getting a weird preview with the old drivers, but we didn't look too carefully as we are not using the boson yet. Here is the output of voxl-inspect-cam -a:

                            |          Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
                            |              boson |  327680 |  640 |  512 |  0.00 |  800 |      295 |     13.2  | 60.0 |  157.3 | RAW8
                            |        boson_bayer |  327680 |  640 |  512 |  0.00 |    0 |      295 |     12.7  | 60.0 |  157.3 | RAW8
                            |        boson_color |  983040 |  640 |  512 |  0.00 |  800 |      295 |     15.6  | 60.0 |  471.9 | RGB
                            | boson_misp_encoded |      32 |  640 |  512 |  0.00 |  800 |      295 |     17.0  | 60.0 |    0.0 | H264 (P)   
                            |        hires_bayer |
                            |   hires_misp_color |
                            |    hires_misp_grey |
                            

                            Disabling MISP gives the following warning and output of voxl-inspect-cam -a:

                            ------ voxl-camera-server: Camera server is now running
                            Received RAW10 frame from camera hires, will be converting to RAW8 on cpu
                            WARNING: preview buffer pool for Cam(hires), Frame(18) has 0 free, skipping request
                            
                            |          Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
                            |              boson |  327680 |  640 |  512 |  0.00 |  800 |      507 |     12.4  | 60.0 |  157.3 | RAW8
                            |        boson_bayer |  327680 |  640 |  512 |  0.00 |    0 |      507 |     10.9  | 60.0 |  157.3 | RAW8
                            |        boson_color |  983040 |  640 |  512 |  0.00 |  800 |      507 |     13.3  | 60.0 |  471.9 | RGB
                            | boson_misp_encoded |      32 |  640 |  512 |  0.00 |  800 |      507 |     14.4  | 60.0 |    0.0 | H264 (P)   
                            |        hires_bayer |
                            |        hires_color |
                            |         hires_grey |64218112 | 9248 | 6944 | 12.06 | 1211 |       16 |   3720.9  |  1.8 |  945.2 | RAW8
                            
                            Alex KushleyevA 1 Reply Last reply
                            0
                            • C cguzikowski

                              @Alex-Kushleyev Hi Alex, thank you for the new drivers and the instructions. Unfortunately I am still having issues getting the hires_bayer pipe to appear. I followed all of the instructions in the README, and when shooting at 9216x6944, I get the following error:

                              ERROR:   MISP: Unexpected frame size for camera hires, width 9216, height 6944, stride 11520, alloc 79994880 bytes, calc frame size 79994880
                              ERROR:   Could not find frame size from the raw buffer
                              

                              Same error I was getting last week but now the allocated and calculated values are the same. Running it at 9248x6944 gives a similar error:

                              ERROR:   MISP: Unexpected frame size for camera hires, width 9248, height 6944, stride 11568, alloc 80330752 bytes, calc frame size 80328192
                              ERROR:   Could not find frame size from the raw buffer
                              

                              I do see the boson_bayer pipe, and in the portal the camera feed looks great - I believe we were getting a weird preview with the old drivers, but we didn't look too carefully as we are not using the boson yet. Here is the output of voxl-inspect-cam -a:

                              |          Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
                              |              boson |  327680 |  640 |  512 |  0.00 |  800 |      295 |     13.2  | 60.0 |  157.3 | RAW8
                              |        boson_bayer |  327680 |  640 |  512 |  0.00 |    0 |      295 |     12.7  | 60.0 |  157.3 | RAW8
                              |        boson_color |  983040 |  640 |  512 |  0.00 |  800 |      295 |     15.6  | 60.0 |  471.9 | RGB
                              | boson_misp_encoded |      32 |  640 |  512 |  0.00 |  800 |      295 |     17.0  | 60.0 |    0.0 | H264 (P)   
                              |        hires_bayer |
                              |   hires_misp_color |
                              |    hires_misp_grey |
                              

                              Disabling MISP gives the following warning and output of voxl-inspect-cam -a:

                              ------ voxl-camera-server: Camera server is now running
                              Received RAW10 frame from camera hires, will be converting to RAW8 on cpu
                              WARNING: preview buffer pool for Cam(hires), Frame(18) has 0 free, skipping request
                              
                              |          Pipe Name |  bytes  | wide |  hgt |exp(ms)| gain | frame id |latency(ms)|  fps |  mbps  | format
                              |              boson |  327680 |  640 |  512 |  0.00 |  800 |      507 |     12.4  | 60.0 |  157.3 | RAW8
                              |        boson_bayer |  327680 |  640 |  512 |  0.00 |    0 |      507 |     10.9  | 60.0 |  157.3 | RAW8
                              |        boson_color |  983040 |  640 |  512 |  0.00 |  800 |      507 |     13.3  | 60.0 |  471.9 | RGB
                              | boson_misp_encoded |      32 |  640 |  512 |  0.00 |  800 |      507 |     14.4  | 60.0 |    0.0 | H264 (P)   
                              |        hires_bayer |
                              |        hires_color |
                              |         hires_grey |64218112 | 9248 | 6944 | 12.06 | 1211 |       16 |   3720.9  |  1.8 |  945.2 | RAW8
                              
                              Alex KushleyevA Offline
                              Alex KushleyevA Offline
                              Alex Kushleyev
                              ModalAI Team
                              wrote on last edited by
                              #14

                              @cguzikowski , you need to update your camera server to allow misp to accept the new resolutions. You can install the latest one from voxl-packages.modalai.com/dists/qrb5165/dev/binary-arm64/

                              C 1 Reply Last reply
                              0
                              • Alex KushleyevA Alex Kushleyev

                                @cguzikowski , you need to update your camera server to allow misp to accept the new resolutions. You can install the latest one from voxl-packages.modalai.com/dists/qrb5165/dev/binary-arm64/

                                C Offline
                                C Offline
                                cguzikowski
                                Contributor
                                wrote on last edited by
                                #15

                                @Alex-Kushleyev Thank you! This now works great and I can save the raw files as a .bin file. Do you have tips for performing raw-jpg conversion both on and offline? I have also tried to take snapshots with the current setup, by disabling MISP and Raw preview, and enabling snapshot and setting the snapshot dimensions to 9248x6944 (9216x6944, 4624x3472, and 4608x3472 all give the error of unsupported file size). voxl-camera-server seems to start up, then immediately gets killed without an error. Here is the output of the command:

                                MISP channels enabled in defaults : 0
                                MISP channels enabled in config file: 0
                                Setting MISP AWB to Auto
                                MISP channels enabled in defaults : 0
                                MISP channels enabled in config file: 0
                                =================================================================
                                configuration for 2 cameras:
                                
                                cam #0
                                    name:                boson
                                    type:                boson
                                    bayer_type:          0
                                    enabled:             1
                                    camera_id:           0
                                    camera_id_second:    -1
                                    fps:                 30
                                    en_rotate:           0
                                    en_rotate2:          0
                                
                                    en_preview:          1
                                    en_raw_preview:      1
                                    preview_width:       640
                                    preview_height:      512
                                
                                    en_misp:             1
                                    misp_width:          512
                                    misp_height:         640
                                
                                    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_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           : 100
                                    gain_max           : 100
                                    standby_enabled:     0
                                    decimator:           1
                                    independent_exposure:0
                                
                                cam #1
                                    name:                hires
                                    type:                ov64b
                                    bayer_type:          1
                                    enabled:             1
                                    camera_id:           1
                                    camera_id_second:    -1
                                    fps:                 30
                                    en_rotate:           0
                                    en_rotate2:          0
                                
                                    en_preview:          1
                                    en_raw_preview:      0
                                    preview_width:       9248
                                    preview_height:      6944
                                
                                    en_misp:             0
                                    misp_width:          1280
                                    misp_height:         720
                                
                                    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_snapshot:         1
                                    snap_width:          9248
                                    snap_height:         6944
                                    exif_focal_length:   3.100000
                                    exif_focal_len_35mm_format:17
                                    exif_fnumber:        1.240000
                                
                                    ae_mode:             lme_msv
                                    msv_exposure_min_us: 20
                                    msv_exposure_max_us: 33000
                                    gain_min           : 100
                                    gain_max           : 1600
                                    standby_enabled:     0
                                    decimator:           1
                                    independent_exposure:0
                                
                                fsync_en:            0
                                fsync_gpio:          109
                                =================================================================
                                thread is locked to cores: 4 5 6 7
                                connected to mavlink pipe
                                Connected to cpu-monitor
                                Starting Camera: boson (id #0)
                                ModalExposureMSV: initializing for camera name  type 
                                gbm_create_device(156): Info: backend name is: msm_drm
                                MISP Initializing for camera boson
                                 Detected 1 platform(s)
                                 Detected 1 GPU device(s)
                                Estimated imu dt = 0.000977s
                                ERROR in json_from_yaml, failed to open file
                                MISP: Loading intrinsics cal file boson_intrinsics.yml for camera boson, ret -1
                                WARNING: Lens calibration for camera boson is missing (boson_intrinsics.yml). Using defaults:
                                Starting Camera: hires (id #1)
                                ModalExposureMSV: initializing for camera name hires type ov64b
                                
                                ------ voxl-camera-server: Started 2 of 2 cameras
                                
                                ------ voxl-camera-server: Camera server is now running
                                Killed
                                

                                Don't necessarily need to use the snapshot command, but we want some way to get JPG images off the voxl.

                                Alex KushleyevA 1 Reply Last reply
                                0
                                • C cguzikowski

                                  @Alex-Kushleyev Thank you! This now works great and I can save the raw files as a .bin file. Do you have tips for performing raw-jpg conversion both on and offline? I have also tried to take snapshots with the current setup, by disabling MISP and Raw preview, and enabling snapshot and setting the snapshot dimensions to 9248x6944 (9216x6944, 4624x3472, and 4608x3472 all give the error of unsupported file size). voxl-camera-server seems to start up, then immediately gets killed without an error. Here is the output of the command:

                                  MISP channels enabled in defaults : 0
                                  MISP channels enabled in config file: 0
                                  Setting MISP AWB to Auto
                                  MISP channels enabled in defaults : 0
                                  MISP channels enabled in config file: 0
                                  =================================================================
                                  configuration for 2 cameras:
                                  
                                  cam #0
                                      name:                boson
                                      type:                boson
                                      bayer_type:          0
                                      enabled:             1
                                      camera_id:           0
                                      camera_id_second:    -1
                                      fps:                 30
                                      en_rotate:           0
                                      en_rotate2:          0
                                  
                                      en_preview:          1
                                      en_raw_preview:      1
                                      preview_width:       640
                                      preview_height:      512
                                  
                                      en_misp:             1
                                      misp_width:          512
                                      misp_height:         640
                                  
                                      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_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           : 100
                                      gain_max           : 100
                                      standby_enabled:     0
                                      decimator:           1
                                      independent_exposure:0
                                  
                                  cam #1
                                      name:                hires
                                      type:                ov64b
                                      bayer_type:          1
                                      enabled:             1
                                      camera_id:           1
                                      camera_id_second:    -1
                                      fps:                 30
                                      en_rotate:           0
                                      en_rotate2:          0
                                  
                                      en_preview:          1
                                      en_raw_preview:      0
                                      preview_width:       9248
                                      preview_height:      6944
                                  
                                      en_misp:             0
                                      misp_width:          1280
                                      misp_height:         720
                                  
                                      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_snapshot:         1
                                      snap_width:          9248
                                      snap_height:         6944
                                      exif_focal_length:   3.100000
                                      exif_focal_len_35mm_format:17
                                      exif_fnumber:        1.240000
                                  
                                      ae_mode:             lme_msv
                                      msv_exposure_min_us: 20
                                      msv_exposure_max_us: 33000
                                      gain_min           : 100
                                      gain_max           : 1600
                                      standby_enabled:     0
                                      decimator:           1
                                      independent_exposure:0
                                  
                                  fsync_en:            0
                                  fsync_gpio:          109
                                  =================================================================
                                  thread is locked to cores: 4 5 6 7
                                  connected to mavlink pipe
                                  Connected to cpu-monitor
                                  Starting Camera: boson (id #0)
                                  ModalExposureMSV: initializing for camera name  type 
                                  gbm_create_device(156): Info: backend name is: msm_drm
                                  MISP Initializing for camera boson
                                   Detected 1 platform(s)
                                   Detected 1 GPU device(s)
                                  Estimated imu dt = 0.000977s
                                  ERROR in json_from_yaml, failed to open file
                                  MISP: Loading intrinsics cal file boson_intrinsics.yml for camera boson, ret -1
                                  WARNING: Lens calibration for camera boson is missing (boson_intrinsics.yml). Using defaults:
                                  Starting Camera: hires (id #1)
                                  ModalExposureMSV: initializing for camera name hires type ov64b
                                  
                                  ------ voxl-camera-server: Started 2 of 2 cameras
                                  
                                  ------ voxl-camera-server: Camera server is now running
                                  Killed
                                  

                                  Don't necessarily need to use the snapshot command, but we want some way to get JPG images off the voxl.

                                  Alex KushleyevA Offline
                                  Alex KushleyevA Offline
                                  Alex Kushleyev
                                  ModalAI Team
                                  wrote on last edited by
                                  #16

                                  @cguzikowski , sorry for the delay.

                                  Long term, our plan is to add snapshot functionality directly into misp (just like you were getting snapshots from the ISP). That is not too difficult to achieve, may be a few weeks away.

                                  Also let me ask you this: would you want to save the raw bayer and get that from voxl2 and convert to jpg / png offline? That would give you maximum control over quality / processing algorithm. Alternatively, de-bayering can be done on voxl2 and saved as lossy or lossless image?

                                  We do have tools to convert bayer -> yuv -> jpeg but not yet in a standalone app.

                                  You you can do for now is the following:

                                  • set misp output resolution equal to the raw resolution
                                  • this will enable misp to publish the de-bayered yuv to the image pipe
                                  • then you can use voxl-record-raw-image to save the yuv. Alternatively, you can test a WIP version of this tool which can save yuv as jpeg : https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-mpa-tools/-/merge_requests/37
                                  • ideally this logging would be done within camera server to reduce overhead for sending these huge images over the pipe. But the approach i described should work for now.

                                  I will be able to test this again mid next week, meanwhile please let me know if you run into the saving issue. I will double check the issue with snapshot resolution being too large. How large was the isp snapshot that you tested before and had artifacts?

                                  Alex

                                  C 2 Replies Last reply
                                  0
                                  • Alex KushleyevA Alex Kushleyev

                                    @cguzikowski , sorry for the delay.

                                    Long term, our plan is to add snapshot functionality directly into misp (just like you were getting snapshots from the ISP). That is not too difficult to achieve, may be a few weeks away.

                                    Also let me ask you this: would you want to save the raw bayer and get that from voxl2 and convert to jpg / png offline? That would give you maximum control over quality / processing algorithm. Alternatively, de-bayering can be done on voxl2 and saved as lossy or lossless image?

                                    We do have tools to convert bayer -> yuv -> jpeg but not yet in a standalone app.

                                    You you can do for now is the following:

                                    • set misp output resolution equal to the raw resolution
                                    • this will enable misp to publish the de-bayered yuv to the image pipe
                                    • then you can use voxl-record-raw-image to save the yuv. Alternatively, you can test a WIP version of this tool which can save yuv as jpeg : https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-mpa-tools/-/merge_requests/37
                                    • ideally this logging would be done within camera server to reduce overhead for sending these huge images over the pipe. But the approach i described should work for now.

                                    I will be able to test this again mid next week, meanwhile please let me know if you run into the saving issue. I will double check the issue with snapshot resolution being too large. How large was the isp snapshot that you tested before and had artifacts?

                                    Alex

                                    C Offline
                                    C Offline
                                    cguzikowski
                                    Contributor
                                    wrote on last edited by
                                    #17

                                    @Alex-Kushleyev Thank you!

                                    I was able to get both the full YUV and them in JPEG working. We also noticed that the vertical artifact seemed to disappear in these images. Regarding the resolution we were using when we had the artifacts, we were using 9248 × 6944 on the old drivers.

                                    1 Reply Last reply
                                    0
                                    • Alex KushleyevA Alex Kushleyev

                                      @cguzikowski , sorry for the delay.

                                      Long term, our plan is to add snapshot functionality directly into misp (just like you were getting snapshots from the ISP). That is not too difficult to achieve, may be a few weeks away.

                                      Also let me ask you this: would you want to save the raw bayer and get that from voxl2 and convert to jpg / png offline? That would give you maximum control over quality / processing algorithm. Alternatively, de-bayering can be done on voxl2 and saved as lossy or lossless image?

                                      We do have tools to convert bayer -> yuv -> jpeg but not yet in a standalone app.

                                      You you can do for now is the following:

                                      • set misp output resolution equal to the raw resolution
                                      • this will enable misp to publish the de-bayered yuv to the image pipe
                                      • then you can use voxl-record-raw-image to save the yuv. Alternatively, you can test a WIP version of this tool which can save yuv as jpeg : https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-mpa-tools/-/merge_requests/37
                                      • ideally this logging would be done within camera server to reduce overhead for sending these huge images over the pipe. But the approach i described should work for now.

                                      I will be able to test this again mid next week, meanwhile please let me know if you run into the saving issue. I will double check the issue with snapshot resolution being too large. How large was the isp snapshot that you tested before and had artifacts?

                                      Alex

                                      C Offline
                                      C Offline
                                      cguzikowski
                                      Contributor
                                      wrote on last edited by cguzikowski
                                      #18

                                      @Alex-Kushleyev Hey Alex, we have been performing some tests and noticed the images we were getting were quite noisy. What are some of the settings that we can change in the voxl-camera-server to reduce the noise? I messed around with the ae_desired_msv setting and gain_max setting. I also noticed that the white balance seems to have a very visible green shift when the exposure is lower (tried to upload an image but got a "request entity too large" error)

                                      Also as a side note, the metadata seems to not be recording when using voxl-record-raw-image -j

                                      Alex KushleyevA 1 Reply Last reply
                                      0
                                      • C cguzikowski

                                        @Alex-Kushleyev Hey Alex, we have been performing some tests and noticed the images we were getting were quite noisy. What are some of the settings that we can change in the voxl-camera-server to reduce the noise? I messed around with the ae_desired_msv setting and gain_max setting. I also noticed that the white balance seems to have a very visible green shift when the exposure is lower (tried to upload an image but got a "request entity too large" error)

                                        Also as a side note, the metadata seems to not be recording when using voxl-record-raw-image -j

                                        Alex KushleyevA Offline
                                        Alex KushleyevA Offline
                                        Alex Kushleyev
                                        ModalAI Team
                                        wrote on last edited by
                                        #19

                                        @cguzikowski , if you want, you can attache a cropped image, so that it's smaller size.

                                        In general, the pixel noise increases as you the pixel gain is increased. Part of Auto Exposure control is controlling exposure time and gain (both of which contribute to the image brightness), but higher gain has higher pixel noise and higher exposure values will result in motion blur.

                                        The Qualcomm ISP has lots of liters, including noise reduction, which are applied when you use the ISP snapshot (even though they have not been tuned for the particular camera, the ISP output may result in better de-noised image). There are several types of filters, for example spatial (such as bilateral filter) and temporal (TNR - temporal noise reduction), and it's usually a combination of both with the filter weights increasing as the gain increases (more noise requires more noise reduction).

                                        Currently, MISP does not have any de-noise filtering, but we are working on adding some. That is why i was discussing with you the ability to process the image offline (from the original bayer source). You could save the full raw image and perform any filtering you need in post processing. This approach is similar to using a RAW image on a fancy camera and then importing that into image processing software on a laptop / desktop, which can perform a lot more filters / effects directly on the raw image (loss-less).

                                        What i suspect is that you are testing in the low-light environment and you are seeing the effects of high gain (high pixel noise). the MISP auto exposure tries to balance exposure and gain and there are a few parameters for that, but in your tests you should see what exposure and gain values the camera is at when you see the noisy image. You can use voxl-portal to control exposure and gain to see what the difference is. I believe the max gain for ov64b is 16x (1600).

                                        I am about to set up your use case again for testing and i will investigate the noise and the original ISP snapshot artifact and we can also compare the image noise from the ISP snapshot and misp snapshot.

                                        Unfortunately the lens for ov64b in the Hadron unit is very small, which reduces the amount of light that gets into the sensor. The sensor is 8+K resolution which means the pixel size is small, so the amount of light that gets to each pixel is small. To compensate for that, we would typically want a larger lens, but it is probably not possible to change the lens in this specific Hadron unit (we have not tried).

                                        If you want to explore offline image processing, you would need:

                                        • the original raw bayer (which you can already save)
                                        • the gain and exposure used for that frame (i will need to check, i thin we had an option to save the exposure and gain as part of the file name).
                                        • then you can have offline processing that is dependent on exposure / gain and apply the filters of your choice.
                                        • the only down side is that the raw snapshots are huge, but you can probably zip them up if needed to store a lot of them on voxl2 before offloading.

                                        Alex

                                        Alex KushleyevA 1 Reply Last reply
                                        0
                                        • Alex KushleyevA Alex Kushleyev

                                          @cguzikowski , if you want, you can attache a cropped image, so that it's smaller size.

                                          In general, the pixel noise increases as you the pixel gain is increased. Part of Auto Exposure control is controlling exposure time and gain (both of which contribute to the image brightness), but higher gain has higher pixel noise and higher exposure values will result in motion blur.

                                          The Qualcomm ISP has lots of liters, including noise reduction, which are applied when you use the ISP snapshot (even though they have not been tuned for the particular camera, the ISP output may result in better de-noised image). There are several types of filters, for example spatial (such as bilateral filter) and temporal (TNR - temporal noise reduction), and it's usually a combination of both with the filter weights increasing as the gain increases (more noise requires more noise reduction).

                                          Currently, MISP does not have any de-noise filtering, but we are working on adding some. That is why i was discussing with you the ability to process the image offline (from the original bayer source). You could save the full raw image and perform any filtering you need in post processing. This approach is similar to using a RAW image on a fancy camera and then importing that into image processing software on a laptop / desktop, which can perform a lot more filters / effects directly on the raw image (loss-less).

                                          What i suspect is that you are testing in the low-light environment and you are seeing the effects of high gain (high pixel noise). the MISP auto exposure tries to balance exposure and gain and there are a few parameters for that, but in your tests you should see what exposure and gain values the camera is at when you see the noisy image. You can use voxl-portal to control exposure and gain to see what the difference is. I believe the max gain for ov64b is 16x (1600).

                                          I am about to set up your use case again for testing and i will investigate the noise and the original ISP snapshot artifact and we can also compare the image noise from the ISP snapshot and misp snapshot.

                                          Unfortunately the lens for ov64b in the Hadron unit is very small, which reduces the amount of light that gets into the sensor. The sensor is 8+K resolution which means the pixel size is small, so the amount of light that gets to each pixel is small. To compensate for that, we would typically want a larger lens, but it is probably not possible to change the lens in this specific Hadron unit (we have not tried).

                                          If you want to explore offline image processing, you would need:

                                          • the original raw bayer (which you can already save)
                                          • the gain and exposure used for that frame (i will need to check, i thin we had an option to save the exposure and gain as part of the file name).
                                          • then you can have offline processing that is dependent on exposure / gain and apply the filters of your choice.
                                          • the only down side is that the raw snapshots are huge, but you can probably zip them up if needed to store a lot of them on voxl2 before offloading.

                                          Alex

                                          Alex KushleyevA Offline
                                          Alex KushleyevA Offline
                                          Alex Kushleyev
                                          ModalAI Team
                                          wrote on last edited by
                                          #20

                                          @cguzikowski ,

                                          I am testing OV64b now. I confirmed that snapshot of size 9216x6944 is not possible (i think i can enable it), but 9248x6944 works.

                                          Also, please see this post, there was a bug that broke snapshot in recent releases, which i just fixed. perhaps that was an issue for you when you switched to latest camera server : https://forum.modalai.com/topic/5166/snapshot-crashes-voxl-camera-server

                                          I am going to see if i can get MISP running together with ISP snapshot, right now it only runs when preview and misp are disabled and i have small_video and snapshot streams enabled and snapshot resolution set to 9248x6944 and small_video resolution to something smaller.

                                          Alex

                                          Alex KushleyevA 1 Reply Last reply
                                          0

                                          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                          With your input, this post could be even better 💗

                                          Register Login
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          ModalAI
                                          Categories Recent Tags ModalAI.com Docs
                                          © 2026 ModalAI® · Accelerating autonomy for smaller, smarter, safer drones · Powered by NodeBB
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups