Visual-inertial odometry is as much a hardware problem as a software one. Before spending time tuning configuration parameters, it is worth ensuring your sensor rig meets the basic quality requirements that VINS-Fusion expects. This page walks through hardware selection, config file authoring, camera calibration, and IMU noise characterization—the four steps required to run VINS-Fusion on a custom device.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/HKUST-Aerial-Robotics/Vins-Fusion/llms.txt
Use this file to discover all available pages before exploring further.
Hardware recommendations
Key requirements:- Global shutter cameras — Rolling shutter cameras introduce motion blur and per-row timing distortions that degrade feature tracking, especially at high angular velocities.
- Hardware-synchronized IMU — The IMU clock must be tightly aligned with the camera exposure trigger. Software synchronization introduces variable latency that degrades the tightly-coupled optimization.
- High frame rate — At least 20 Hz for the camera; 200 Hz or higher for the IMU.
- Adequate overlap — For stereo configurations, ensure the stereo baseline and field of view provide sufficient parallax for the expected operating range.
Setup steps
Write a config file
Copy the closest matching example config as a starting point and edit it for your device. The EuRoC configs are a good template for aerial vehicles; the KITTI configs are better for ground vehicles.At minimum, update the following fields:
The config file path is passed directly to
vins_node at launch time, and camera calibration file paths inside the config are resolved relative to the config file’s directory. Keep calibration files in the same folder as your config.Calibrate your cameras
VINS-Fusion uses the camodocal camera model library, which supports three projection models:
Print a calibration target (12×8 asymmetric circle grid with 80 mm spacing is used in the provided example data). Place your calibration images in a directory called Substitute
| Model | --camera-model value | Typical use |
|---|---|---|
| Pinhole | pinhole | Standard rectilinear lenses |
| Mei (unified) | mei | Wide-angle and fisheye lenses |
| Equidistant | equidistant | Fisheye / 180° lenses |
calibrationdata, then run:mei or equidistant for --camera-model if your lens requires it. The tool writes a YAML calibration file that you reference from your config.Set IMU noise parameters
The IMU section of the config file has four noise parameters. Accurate values improve estimator convergence and reduce bias drift. Obtain them from your IMU datasheet or from an Allan variance analysis:
Set extrinsic parameters
The If you have precise factory calibration data, set
body_T_cam0 (and body_T_cam1 for stereo) fields define the rigid-body transform from the IMU frame to each camera frame as a 4×4 homogeneous matrix.estimate_extrinsic: 0. If your extrinsics are approximate, set it to 1 so VINS-Fusion refines the transform online during the first few seconds of motion.Configure feature tracker settings
The defaults from the EuRoC config work well as a starting point:Reduce
max_cnt on hardware with limited CPU budget. Increase min_dist in scenes with dense, repetitive texture.Online temporal calibration
If your camera and IMU are not hardware-synchronized, enable online time-offset estimation:Reference config templates
| Dataset | Config path | Mode |
|---|---|---|
| EuRoC MAV (stereo + IMU) | config/euroc/euroc_stereo_imu_config.yaml | Aerial, indoor |
| EuRoC MAV (mono + IMU) | config/euroc/euroc_mono_imu_config.yaml | Aerial, indoor |
| EuRoC MAV (stereo only) | config/euroc/euroc_stereo_config.yaml | Aerial, indoor |
| KITTI Odometry (sequences 00–02) | config/kitti_odom/kitti_config00-02.yaml | Outdoor, driving |
| KITTI raw with GPS | config/kitti_raw/kitti_10_03_config.yaml | Outdoor, driving |
| Car demo | config/vi_car/vi_car.yaml | Outdoor, driving |