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.

Visual-inertial odometry accumulates drift over time. VINS-Fusion includes an optional loop closure module (loop_fusion) that detects revisited places and corrects this drift through pose graph optimization.

How it works

1

Keyframe selection

The main estimator publishes keyframes to the loop_fusion node. Each keyframe includes the image, pose, and tracked feature points.
2

Place recognition

DBoW2 compares BRIEF descriptors from the current keyframe against a vocabulary database built from previous keyframes to find loop candidates.
3

Geometric verification

Candidate matches are verified geometrically using feature correspondences to reject false positives.
4

Pose graph optimization

Confirmed loop closures are added as edges in a pose graph. 4-DOF optimization (x, y, z, yaw) corrects accumulated drift while keeping the local VIO trajectory smooth.

Running loop closure

The loop fusion node is optional and runs as a separate process:
rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
In RViz, the green path shows raw VIO odometry and the red path shows the loop-closure-corrected trajectory.

Persistent pose graph

The pose graph can be saved and reloaded across sessions:
load_previous_pose_graph: 1
pose_graph_save_path: "~/output/pose_graph/"
save_image: 1
Setting load_previous_pose_graph: 1 allows the estimator to recognize places visited in previous runs, enabling long-term localization.
Loop closure does not affect the real-time VIO estimate — it refines the global trajectory asynchronously. The local estimator window remains unaffected.

Build docs developers (and LLMs) love