@Rowan-Dempster Hi there,
Glad to hear you are exploring the new voxl-open-vins-server.
A few things to consider, as you are not using a "ModalAI airframe".
- OpenVINS follows the classic Kalibr calibration model (both cameras and IMU)
- Calibration involves IMU intrinsics, Cam Intrinsics, IMU-CAM extrinsics
From this point, I'll assume you're using a VOXL2 Board. Hence, your IMU intrinsics should be "1:1" to the values reported in here. However, depending on your airframe vibration you may need to tune the noise density and random walk values -- Personally, I would leave this as a final option, as these are a result of extensive calibration routines and have shown to be invariant among our airframes.
Moreover, you can obtain the camera intrinsics using our voxl-camera-calibration repo. I highly recommend to re-calibrate your cameras, making sure your reprojection error is in the subpixel range.
Next, we need the extrinsics from each CAM to IMU. Ideally, you may want to run Kalibr or you can use the sync_config flag in /etc/modalai/voxl-open-vins-server.conf as true under the assumption your extrinsics.conf is setup correctly. If you opt to use Kalibr, you will need to update the camchain file and make sure your sync_config flag is set to false.
Finally, we need to address the most important config file. Tuning this file may be a bit challenging because it revolves around use-case that being said, I would leave as is for the most part, addressing ZUPT params and chi2_multipliers/sigma_px based on simple hand-held tests. Particularly, if the estimator blows up when the drone is sitting still right after a power-cycle -> ZUPT params, and/or if due to heavy dynamic motion MSCKF features are losing track frequently or the platform is drifting slightly -> Bump chi2_multiplier + increase/decrease (case-by-case) sigma_px (SLAM/MSCKF).
To conclude, I would recommend deactivating the thermal calibration of the IMU for initial testing, as depending on the SDK version and platform, it could increase the perceived noise in the accel. Also, I would attempt 2Cam flights using ION pipes (vio_cams.conf) before jumping to 3Cam, as the 3rd Cam seems to add more noise into estimator if placed in opposite direction to another Cam (e.g., front and rear) and the extrinsics are not "perfectly" tuned.
PS: We have a converter from voxl-logs to rosbags for seamless integration with Kalibr, feel free to check it out
PS2: Regarding camera time-synchronization, if your cameras are being driven by an fsync line, you shouldn't have to worry about the sync dt; however, if they are not, you may want to bump the fusion_rate_dt_ms flag (voxl-open-vins-server.conf) to a value that guarantees that every camera has one individual frame. Moreover, if the timestamps are not monotonically increasing or the cameras don't start exposing at the same time -- implying that the 3Cams have non-aligned timestamps, you may need to "hot-fix" your timestamps to get a stable performance. As for the CAM-IMU dt, we use the online calibration inside of our OpenVINS implementation to estimates the value.
PS3: We currently don't have any external-release report for performance comparison with QVIO, but internally we have seen significant differences in behavior between the two (especially in multi-camera setups and under aggressive motion). In general, OpenVINS gives you more tuning flexibility and multi-camera support, at the cost of being more sensitive to calibration quality.