Thanks @Eric-Katzfey ! Here is the pinout for the dev board "UART" port that includes i2C_SCL and I2C_SDA.

The dev board pins 1-6 matching to J19 pins 1-6
We will give the COMPASS_DISBLMSK parameter a shot and see if that works.
Thanks @Eric-Katzfey ! Here is the pinout for the dev board "UART" port that includes i2C_SCL and I2C_SDA.

The dev board pins 1-6 matching to J19 pins 1-6
We will give the COMPASS_DISBLMSK parameter a shot and see if that works.
We have a custom drone using VOXL2 as the flight controller and we are running Ardupilot. We are using the Here 4 Blue GPS connected to J19 over UART. We took off the cover of the Here4 and unplugged the CAN cable and we are using the dev board for now. We have the 10 pin connector on the dev board to the GPS, the dev board 6 pin UART goes to J19 on VOXL2 with pins 1-6 matching 1-6.
Mission Planner Parameters for Here 4 on VOXL2
gps_drv_options: 4
gps1_type: 2
gps_save_cfg: 1
GPS connection seems to be working fine but we are unable to get the Here4 compass/mag to work or be detected.
The Here4 has a RM3100 magnetic compass and ICM42688. What configuration changes do we need in order to get these sensors to work on the VOXL2?
Here are our versions:
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-05-04 22:46:17
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.14.12-202603091236
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.7.7-202601091810
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.5.8
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 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-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.
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
}]
}

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!
@Eric-Katzfey I configured the drone to have servo5 trigger the camera. When idle, servo 5 shows 1100. When triggered, it goes up to 1300. In the Mavlink messages I can now watch for SERVO_OUTPUT_RAW msg.servo5_raw and detect the rising edge which emulates the trigger.
msg = master.recv_match(type='SERVO_OUTPUT_RAW', blocking=True, timeout=2)
if not msg:
continue
pwm = msg.servo5_raw
I have done this on a ground station using pymavlink to listen for messages. What is the best way to listen for this mavlink message on the VOXL2? Reminder - I am using Ardupilot.
@Eric-Katzfey We have the Hadron configured with voxl-camera-server.conf
"type": "ov64b",
"name": "hires",
....
"en_snapshot": true,
...
so we can take images with voxl-send-command hires_snapshot snapshot
I would love to configure the camera in Ardupilot with CAM1_TYPE and set DO_SET_CAM_TRIGG_DIST to a distance interval that I will capture images at.
If that is not directly possible, could you help me with a way to create a sort of interface script that sits on VOXL2 that listens for GPIO relay triggers or something like that? Then I can just call the snapshot command when triggered.
I have a VOXL2 running ardupilot and have a Hadron camera connected and configured with voxl-camera-server. I can take snapshots successfully.
I am trying to configure our drone to capture images at a specific distance interval during flight with the DO_SET_CAM_TRIGG_DIST parameter. Is there a way to do this with VOXL2 and ardupilot?
Thanks!
Hi,
I'm working with a VOXL2 and the FLIR Hadron 640 camera, and I'm trying to stream video from the OV64B sensor while taking snapshots at the same time.
Initially, I attempted to use "en_preview": true along with "en_snapshot": true, but that configuration did not allow me to stream video. I assumed it might be a resolution constraint, so I modified the configuration to use "en_small_video": true and "en_snapshot": true instead.
Now I can stream video, and when I enter the following command:
voxl2:/data/snapshots$ voxl-send-command hires_snapshot
Successfully sent command to /run/mpa/hires_snapshot/control
In the voxl-camera-server terminal, I receive this error:
ERROR: Camera: hires got unknown Command:
However, when I enter:
voxl2:/data/snapshots$ voxl-send-command hires_snapshot snapshot-no-save
Successfully sent command to /run/mpa/hires_snapshot/control
The camera server shows:
------ voxl-camera-server: Camera server is now running
Camera: hires taking snapshot for pipe only (not saving it)
But I’m unable to access the snapshot data, even after running adb pull.
My Questions:
Is it possible to stream and take snapshots simultaneously on the OV64B?
What does the error message “Camera: hires got unknown Command” mean?
How can I access the output of snapshot-no-save if it's not being saved to disk?
Thanks in advance for your help!
Below is my camera config code:
{
"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"
},
{
"type": "ov64b",
"name": "hires",
"enabled": true,
"camera_id": 1,
"fps": 15,
"en_preview": false,
"en_misp": false,
"preview_width": 1920,
"preview_height": 1080,
"en_raw_preview": false,
"en_small_video": true,
"small_video_width": 1024,
"small_video_height": 768,
"small_venc_mode": "h265",
"en_large_video": false,
"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,
"en_snapshot": true,
"en_snapshot_width": 1920,
"en_snapshot_height": 1080,
"ae_mode": "isp",
"gain_min": 54,
"gain_max": 32000
}
]
}