# Connecting 2 Boson Cameras and 2 MIPI Cameras (4 Cameras Total)

Source: https://forum.modalai.com/topic/4757/connecting-2-boson-cameras-and-2-mipi-cameras-4-cameras-total
Category: ESCs, Sensors and Accessories (https://forum.modalai.com/category/15/escs-sensors-and-accessories)
Tags: image-sensor
Posted: 2025-09-22 01:56:47 UTC by Jskim
Replies: 8 · Views: 2123

## Jskim · 2025-09-22 01:56:47 UTC

1. I want to connect 4 cameras using the VOXL2 or VOXL2-mini.

a) The camera configuration is 2 Boson cameras + 2 MIPI cameras.
Can I use 2 Boson cameras simultaneously?
b) Can I use 2 VOXL2 Mini Dual Hi-res and Boson MIPI Adapters (MCCA-M0194-2) simultaneously? 

2. The Boson camera resolution is only 640x512, but I need 320x240. Is it possible to connect the 320x240 camera sold by FLIR?

Thanks,

## Reply by Vinny (ModalAI staff) · 2025-09-23 17:46:15 UTC

Hi @Jskim 
I'll let someone else from the SW team respond regarding how to configure your SW for this, but I can assure you from a HW viewpoint, we cannot support 2 Bosons directly on VOXL 2 Mini. There is not enough output power.
We only have enough power on a VOXL 2 Mini to power either a High Power ToF or a single Boson, along with our other suite of Tacking and HiRes image sensors. But, 2 ToFs or 2 Bosons will most likely fail and make the power supplies droop/starve the rest of the system, creating other random failures.

VOXL 2 M0154 (not the Mini, sometimes referred to as "classic" or "full size") has enough power to run two of these types of image sensors.

## Reply by Jskim · 2025-09-24 00:53:54 UTC

Thank you for your quick response.

We will proceed with the review using the VOXL 2 M0154.
[Questions]
1. Please tell me how to configure the SW (2 EOs, 2 Bosons, 4 cameras total).
2. Please also check if the Boson320 can be used.

Thanks

## Reply by Alex Kushleyev (ModalAI staff) · 2025-09-24 17:04:30 UTC (in reply to Jskim)

@Jskim , I will try it and will let you know. The test will include a Boson 640 + IMX412 (M0161), Boson320 + IMX412 (M0161) -- all connected to VOXL2 via two M0194.

Alex

## Reply by Alex Kushleyev (ModalAI staff) · 2025-09-24 22:58:02 UTC (in reply to Alex Kushleyev)

@Jskim ,

As Vinny mentioned, since VOXL2 Mini does not have the 5V power budget for 2 Bosons, the only option is using VOXL2.

I have tested two configurations that work, please see below. Either Boson can be 320 or 640. Also instead of IMX412 (M0161), you could use IMX664 (M0186) or AR0144 (M0166).

**Option 1:**
![62435a4d-94c8-4b25-942e-8bb7cdc9013a-image.png](https://forum.modalai.com/assets/uploads/files/1758753883942-62435a4d-94c8-4b25-942e-8bb7cdc9013a-image.png) 
- M0181 mounting hole aligns with VOXL2 mounting hole near J8
- no mounting holes for M0155 or M0162
- not possible to add other cameras
- use voxl2 kernel variant 1.0.1

**Option 2:**
![2c155d58-61d7-4aef-88e4-d43ee4e5c438-image.png](https://forum.modalai.com/assets/uploads/files/1758753961604-2c155d58-61d7-4aef-88e4-d43ee4e5c438-image.png) 
- M0181 mounting hole aligns with VOXL2 mounting hole near J8
- second M0181 (near J6) does not have any mounting hole alignment. The tab can either be broken off or attached to an external attachment point)
- more cameras could be added to J7, but will need to watch out for mechanical constraints
- use voxl2 kernel variant 1.0.1

**Option 3 (not recommended)**
![0c851ab6-2004-42d8-8c7b-b39439e226ed-image.png](https://forum.modalai.com/assets/uploads/files/1758754543522-0c851ab6-2004-42d8-8c7b-b39439e226ed-image.png) 
- identical to Option 2 (connection-wise)
- no mounting hole alignment, overhang
- M0194 is designed mainly for VOXL2 Mini (M0104)

**M0181 Connection detail:**
![eb02190d-24eb-42bd-b088-7c7c40d50cfe-image.png](https://forum.modalai.com/assets/uploads/files/1758754351124-eb02190d-24eb-42bd-b088-7c7c40d50cfe-image.png) 

I will follow up tomorrow with software setup details.

Alex

## Reply by Jskim · 2025-09-25 02:15:22 UTC (in reply to Alex Kushleyev)

@Alex-Kushleyev said in [Connecting 2 Boson Cameras and 2 MIPI Cameras \(4 Cameras Total\)](/post/23879):
> I will follow up tomorrow with software setup details

Thank you for the prompt technical support.

Regards,
Kim

## Reply by Alex Kushleyev (ModalAI staff) · 2025-09-25 19:00:24 UTC (in reply to Jskim)

@Jskim 

I am going to document this using the Option 2, which is probably the best one:

Software Setup
- VOXL2 SDK 1.4.5 or later (1.5.0 or later recommended)
- copy the following `sensormodule` files to `/usr/lib/camera/`
```
cp /usr/share/modalai/chi-cdk/boson/com.qti.sensormodule.boson_0.bin /usr/lib/camera/
cp /usr/share/modalai/chi-cdk/boson/com.qti.sensormodule.boson_4.bin /usr/lib/camera/
```

You can find the latest IMX412 drivers here (depending on the SDK, there may or may not be imx412 driver for camera slot 5, but this zip has all of them): https://storage.googleapis.com/modalai_public/temp/imx412_test_bins/20250919/imx412_fpv_eis_20250919_drivers.zip

push the imx412 drivers from your PC:
```
adb push com.qti.sensormodule.imx412_fpv_20250919_1.bin /usr/lib/camera/
adb push com.qti.sensormodule.imx412_fpv_20250919_5.bin /usr/lib/camera/
```

Double check `maxRAWSizes=20` is set in `/vendor/etc/camera/camxoverridesettings.txt` -- this is to ensure we can use all available modes in the IMX412 camera driver.

At this point, you should be able to detect all 4 cameras:
```
voxl2:/$ voxl-camera-server -l
DEBUG:   Attempting to open the hal module
DEBUG:   SUCCESS: Camera module opened on attempt 0
DEBUG:   ----------- Number of cameras: 4

DEBUG:   Cam idx: 0, Cam slot: 0, Slave Address: 0x00D4, Sensor Id: 0x00FF
DEBUG:   Cam idx: 1, Cam slot: 1, Slave Address: 0x0034, Sensor Id: 0x0577
DEBUG:   Cam idx: 2, Cam slot: 4, Slave Address: 0x00D4, Sensor Id: 0x00FF
DEBUG:   Cam idx: 3, Cam slot: 5, Slave Address: 0x0034, Sensor Id: 0x0577
DEBUG:   Note: This list comes from the HAL module and may not be indicative
DEBUG:   	of configurations that have full pipelines

DEBUG:   Number of cameras: 4
...
```
The camera slot numbers should match up our configuration.

Generate `voxl-camera-server.conf` configuration file based on the camera software IDs (not slot ids). The syntax for the arguments to `camera-server-config-helper` is and array of the following entries: `<camera-name>:<camera-type>:<camera-sw-id>`
```
camera-server-config-helper boson320:boson-fpv:0 hires_front:imx412-fpv-misp:1 boson640:boson-fpv:2 hires_down:imx412-fpv-misp:3
```

For the Boson sensors, which are 320x256, edit the config file to update `preview_width`, `preview_height`, `misp_width`, `misp_height` (set to 320 and 256 accordingly)

Make sure your Boson sensors are configured for 8bit post AGC output and MIPI is enabled (https://docs.modalai.com/M0153/#boson-software-setup)

Finally, the IMX412 cameras in this configuration will be outputting up to 4 streams of different resolution. It is a good example of how to use MISP for multiple output streams. If you are not using all of them, it will probably be best to disable them (set `enable` to 0 under corresponding `misp_channels` entry. If you disable the 3 additional misp channels, the main MISP output will still be enabled, which may be sufficient for you. Also note the default video encoding in this setup is h265, so it won't be viewable via `voxl-portal` -- you could change it to `h264`. Also, the configuration for the IMX412 cameras is not using the ISP, but using our own implementation MISP, which is a light weight ISP pipeline that runs on the CPU and GPU. If you want to enable the ISP, the config file will need to be changed slightly.

![16276e67-9fe7-4ac5-ae6e-efdac943c25b-image.png](https://forum.modalai.com/assets/uploads/files/1758826808536-16276e67-9fe7-4ac5-ae6e-efdac943c25b-image.png) 

Here is the config file i generated using the above command
```
camera-server-config-helper boson320:boson-fpv:0 hires_front:imx412-fpv-misp:1 boson640:boson-fpv:2 hires_down:imx412-fpv-misp:3
```

`/etc/modalai/voxl-camera-server.conf`:
```
/**
 * voxl-camera-server Configuration File
 *
 * Each camera has configurations for up to 4 HAL3 streams:
 *    - `preview` stream for raw unprocessed images from CV cameras
 *    - `small_video` 720p (ish) h264/h265 compressed for fpv video streaming
 *    - `large_video` 4k (ish) h264/h265 for onboard video recording to disk
 *    - `snapshot` ISP-processed JPG snapshots that get saved to disk
 *
 * on QRB5165 platforms (VOXL2 and VOXL2 mini) you can only have 3 of the 4 enabled
 *
 * This file is generated from default values by voxl-configure-cameras.
 * Do not expect arbitrary resolutions to work, the ISP and video compression
 * pipelines only support very specific resolutions.
 *
 * The default video compression mode is cqp or Constant Quantization Parameter
 *
 *
 *
 */
{
	"version":	0.1,
	"fsync_en":	false,
	"fsync_gpio":	109,
	"cameras":	[{
			"type":	"boson-fpv",
			"name":	"boson320",
			"enabled":	true,
			"camera_id":	0,
			"fps":	30,
			"en_rotate":	false,
			"en_preview":	true,
			"preview_width":	320,
			"preview_height":	256,
			"en_raw_preview":	true,
			"en_misp":	true,
			"misp_width":	320,
			"misp_height":	256,
			"misp_venc_enable":	true,
			"misp_venc_mode":	"h265",
			"misp_venc_br_ctrl":	"cbr",
			"misp_venc_Qfixed":	38,
			"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,
			"misp_zoom":	1,
			"ae_mode":	"lme_msv",
			"gain_min":	54,
			"gain_max":	8000,
			"ae_desired_msv":	60,
			"exposure_min_us":	20,
			"exposure_max_us":	33000,
			"exposure_soft_min_us":	5000,
			"ae_filter_alpha":	0.600000023841858,
			"ae_ignore_fraction":	0.20000000298023224,
			"ae_slope":	0.05000000074505806,
			"ae_exposure_period":	1,
			"ae_gain_period":	1
		}, {
			"type":	"imx412-fpv-misp",
			"name":	"hires_front",
			"enabled":	true,
			"camera_id":	1,
			"fps":	60,
			"en_preview":	true,
			"preview_width":	1936,
			"preview_height":	1080,
			"en_raw_preview":	true,
			"en_misp":	true,
			"misp_width":	1280,
			"misp_height":	720,
			"misp_venc_enable":	true,
			"misp_venc_mode":	"h265",
			"misp_venc_br_ctrl":	"cbr",
			"misp_venc_Qfixed":	38,
			"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":	2.5,
			"misp_zoom":	1,
			"misp_channels":	[{
					"enable":	1,
					"name":	"default_misp",
					"width":	1280,
					"height":	720,
					"fps":	30,
					"mbps":	2,
					"nPframes":	2,
					"codec":	"h265",
					"osd":	0
				}, {
					"enable":	1,
					"name":	"long_range_misp",
					"width":	960,
					"height":	540,
					"fps":	30,
					"mbps":	0.8,
					"nPframes":	2,
					"codec":	"h265",
					"osd":	0
				}, {
					"enable":	1,
					"name":	"low_latency_misp",
					"width":	960,
					"height":	540,
					"fps":	60,
					"mbps":	1.5,
					"nPframes":	29,
					"codec":	"h265",
					"osd":	0
				}],
			"ae_mode":	"lme_msv",
			"gain_min":	54,
			"gain_max":	30000,
			"ae_desired_msv":	130,
			"exposure_min_us":	25,
			"exposure_max_us":	30000,
			"exposure_soft_min_us":	2500,
			"ae_filter_alpha":	0.600000023841858,
			"ae_ignore_fraction":	0.019999999552965164,
			"ae_slope":	0.00999999977648258,
			"ae_exposure_period":	1,
			"ae_gain_period":	1
		}, {
			"type":	"boson-fpv",
			"name":	"boson640",
			"enabled":	true,
			"camera_id":	2,
			"fps":	30,
			"en_rotate":	false,
			"en_preview":	true,
			"preview_width":	640,
			"preview_height":	512,
			"en_raw_preview":	true,
			"en_misp":	true,
			"misp_width":	640,
			"misp_height":	512,
			"misp_venc_enable":	true,
			"misp_venc_mode":	"h265",
			"misp_venc_br_ctrl":	"cbr",
			"misp_venc_Qfixed":	38,
			"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,
			"misp_zoom":	1,
			"ae_mode":	"lme_msv",
			"gain_min":	54,
			"gain_max":	8000,
			"ae_desired_msv":	60,
			"exposure_min_us":	20,
			"exposure_max_us":	33000,
			"exposure_soft_min_us":	5000,
			"ae_filter_alpha":	0.600000023841858,
			"ae_ignore_fraction":	0.20000000298023224,
			"ae_slope":	0.05000000074505806,
			"ae_exposure_period":	1,
			"ae_gain_period":	1
		}, {
			"type":	"imx412-fpv-misp",
			"name":	"hires_down",
			"enabled":	true,
			"camera_id":	3,
			"fps":	60,
			"en_preview":	true,
			"preview_width":	1936,
			"preview_height":	1080,
			"en_raw_preview":	true,
			"en_misp":	true,
			"misp_width":	1280,
			"misp_height":	720,
			"misp_venc_enable":	true,
			"misp_venc_mode":	"h265",
			"misp_venc_br_ctrl":	"cbr",
			"misp_venc_Qfixed":	38,
			"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":	2.5,
			"misp_zoom":	1,
			"misp_channels":	[{
					"enable":	1,
					"name":	"default_misp",
					"width":	1280,
					"height":	720,
					"fps":	30,
					"mbps":	2,
					"nPframes":	2,
					"codec":	"h265",
					"osd":	0
				}, {
					"enable":	1,
					"name":	"long_range_misp",
					"width":	960,
					"height":	540,
					"fps":	30,
					"mbps":	0.8,
					"nPframes":	2,
					"codec":	"h265",
					"osd":	0
				}, {
					"enable":	1,
					"name":	"low_latency_misp",
					"width":	960,
					"height":	540,
					"fps":	60,
					"mbps":	1.5,
					"nPframes":	29,
					"codec":	"h265",
					"osd":	0
				}],
			"ae_mode":	"lme_msv",
			"gain_min":	54,
			"gain_max":	30000,
			"ae_desired_msv":	130,
			"exposure_min_us":	25,
			"exposure_max_us":	30000,
			"exposure_soft_min_us":	2500,
			"ae_filter_alpha":	0.600000023841858,
			"ae_ignore_fraction":	0.019999999552965164,
			"ae_slope":	0.00999999977648258,
			"ae_exposure_period":	1,
			"ae_gain_period":	1
		}]
}
```

--- 

Please try it and let me know if you have any issues

## Reply by Jskim · 2025-09-28 23:23:59 UTC

Thank you so much for your reply. 
I'll test it and let you know if I have any other questions.

Regards,
Kim

## Reply by Alex Kushleyev (ModalAI staff) · 2025-09-29 04:10:39 UTC (in reply to Jskim)

@Jskim , sounds good!

Just FYI, i noticed that the config file i provided has some outdated settings for IMX412 camera - I have some better suggestions and will follow up soon. You can still test with the above config - the hardware functionality will not be affected.

Alex
