Skip to main content

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.

The EuRoC MAV dataset is the primary validation dataset for VINS-Fusion. Recorded aboard micro aerial vehicles in indoor environments, it provides synchronized stereo images, IMU measurements, and accurate ground-truth poses—making it ideal for benchmarking all three sensor configurations that VINS-Fusion supports: monocular camera with IMU, stereo cameras with IMU, and stereo cameras alone.

Download the dataset

Download the EuRoC MAV Dataset and extract the bag files to a folder of your choice, referred to below as YOUR_DATASET_FOLDER. The examples on this page use the MH_01_easy sequence.
The EuRoC sequences vary in difficulty. Start with MH_01_easy or V1_01_easy before attempting faster sequences such as V2_03_difficult.

Run the estimator

Open four terminals. In each one you will run a separate process: RViz for visualization, the VINS odometry node, optionally the loop fusion node, and finally the bag player. All three sensor configurations share the same terminal layout—only the config file and mode differ.
This mode uses a single camera combined with IMU measurements. It is the most constrained configuration and requires accurate IMU noise parameters for good performance.
# Terminal 1 — visualization
roslaunch vins vins_rviz.launch

# Terminal 2 — VIO estimator
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

# Terminal 3 — loop closure (optional)
rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

# Terminal 4 — play the bag
rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

Loop closure

The loop_fusion_node runs as a separate process alongside the main estimator. It detects previously visited places using a DBoW2 vocabulary and corrects accumulated drift by adding loop-closure constraints to the pose graph.
Loop closure is evaluated separately from the raw odometry. The KITTI Odometry Benchmark results reported in the VINS-Fusion paper were produced without loop closure enabled.
Running loop_fusion_node is optional: omitting terminal 3 still gives you full VIO odometry. When it is running, both paths are published simultaneously.

RViz visualization

Starting RViz with roslaunch vins vins_rviz.launch loads the pre-configured display layout. Two trajectory paths are shown:
ColorSource
GreenVIO odometry from vins_node
RedLoop-closure-corrected odometry from loop_fusion_node
The red path only appears when loop_fusion_node is running. If you are not running loop closure, only the green path is displayed.

Running with Docker

If you built VINS-Fusion inside Docker, use the run.sh script from the docker/ directory instead of calling rosrun directly:
# Monocular + IMU
./run.sh ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

# Stereo + IMU with loop fusion
./run.sh -l ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
After launching via Docker, open a separate terminal and play the bag file as usual with rosbag play.
See the custom device setup page if you want to run VINS-Fusion on your own camera and IMU using a config file modeled after the EuRoC templates.

Build docs developers (and LLMs) love