# rpng/open_vins

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/rpng-open-vins).**

2,758 stars · 795 forks · C++ · gpl-3.0

## Links

- GitHub: https://github.com/rpng/open_vins
- Homepage: https://docs.openvins.com
- awesome-repositories: https://awesome-repositories.com/repository/rpng-open-vins.md

## Topics

`ekf-localization` `msckf` `open-vins` `research-platform` `robotics` `sensor-calibration` `slam` `vio` `visual-inertial-odometry`

## Description

Open_vins is a visual-inertial odometry framework and SLAM system designed for robotic state estimation. It uses an Extended Kalman Filter to fuse high-frequency inertial sensor data with visual feature tracks to estimate the position and orientation of a moving device.

The system features a sensor calibration suite for calculating intrinsic and extrinsic parameters, as well as temporal offsets between cameras and inertial measurement units. It includes a manifold interpolator that uses B-Spline curves over the special Euclidean group to produce smooth trajectory paths between discrete pose estimates.

The project covers visual processing for feature extraction, tracking, and triangulation, utilizing multiple camera models to correct lens distortion. It implements inertial preintegration to reduce computational load, supports both stationary and dynamic state initialization, and employs a secondary-thread loop closure process to correct global drift.

Additional utilities provide multi-sensor data simulation, trajectory performance evaluation, and tools for exporting map optimization data.

## Tags

### Hardware & IoT

- [State Estimation Libraries](https://awesome-repositories.com/f/hardware-iot/embedded-robotics/robotics-autonomous-systems/localization-mapping/state-estimation-libraries.md) — Uses Extended Kalman Filters to track a robot's velocity and pose while correcting for sensor drift.
- [Visual-Inertial Odometry Frameworks](https://awesome-repositories.com/f/hardware-iot/visual-inertial-odometry-frameworks.md) — Fuses inertial data and visual feature tracks using an Extended Kalman Filter to determine device position and orientation. ([source](https://docs.openvins.com/annotated.html))
- [EKF-Based State Estimators](https://awesome-repositories.com/f/hardware-iot/ekf-based-state-estimators.md) — Implements an Extended Kalman Filter to fuse inertial measurements and visual features for real-time tracking.
- [Visual SLAM Implementations](https://awesome-repositories.com/f/hardware-iot/embedded-robotics/robotics-autonomous-systems/localization-mapping/slam-algorithms/visual-slam-implementations.md) — Implements a full visual SLAM system to build environmental maps and correct global positioning errors.
- [Sparse Feature Mapping](https://awesome-repositories.com/f/hardware-iot/embedded-robotics/robotics-autonomous-systems/localization-mapping/slam-algorithms/visual-slam-implementations/sparse-feature-mapping.md) — Tracks sparse visual features across multiple representations to maintain a map and improve long-term state estimation. ([source](https://docs.openvins.com/namespaceov__msckf.html))
- [Dynamic State Initializations](https://awesome-repositories.com/f/hardware-iot/dynamic-state-initializations.md) — Recovers initial velocity and gravity by solving a linear system while the platform is moving. ([source](https://docs.openvins.com/namespaceov__init.html))
- [Stationary State Initializations](https://awesome-repositories.com/f/hardware-iot/stationary-state-initializations.md) — Determines initial orientation by aligning the state with the gravity frame while the platform remains still. ([source](https://docs.openvins.com/namespaceov__init.html))

### Artificial Intelligence & ML

- [Computer Vision Features](https://awesome-repositories.com/f/artificial-intelligence-ml/computer-vision-features.md) — Detects salient image points using grid-based patterns for uniform visual feature extraction. ([source](https://docs.openvins.com/namespaceov__core.html))
- [Visual Feature Tracking](https://awesome-repositories.com/f/artificial-intelligence-ml/computer-vision-features/visual-feature-tracking.md) — Follows point features across multiple camera configurations using KLT or descriptor-based methods. ([source](https://docs.openvins.com/))
- [Loop Closure Detection](https://awesome-repositories.com/f/artificial-intelligence-ml/loop-closure-detection.md) — Detects revisited locations in a background process to correct global drift via loop closure.
- [Visual Odometry Systems](https://awesome-repositories.com/f/artificial-intelligence-ml/visual-odometry-systems.md) — Implements a full visual-inertial odometry system using an EKF to estimate device state. ([source](https://docs.openvins.com/index.html))
- [Uniform Feature Distribution](https://awesome-repositories.com/f/artificial-intelligence-ml/computer-vision-systems/image-segmentation/grid-based-segmentations/uniform-feature-distribution.md) — Uses a spatial grid to ensure uniform visual coverage and prevent feature clustering during detection.

### Part of an Awesome List

- [Stereo Triangulation](https://awesome-repositories.com/f/awesome-lists/ai/3d-reconstruction/stereo-triangulation.md) — Estimates 3D positions of visual landmarks by analyzing their projections across multiple camera views. ([source](https://docs.openvins.com/namespaceov__core.html))
- [Sensor Calibration](https://awesome-repositories.com/f/awesome-lists/devtools/sensor-calibration.md) — Determines intrinsic and extrinsic parameters of cameras and IMUs for accurate spatial and temporal synchronization.
- [Manifold Pose Interpolations](https://awesome-repositories.com/f/awesome-lists/ai/pose-estimation/manifold-pose-interpolations.md) — Performs B-Spline interpolation over the SE(3) manifold to produce smooth pose estimates between samples. ([source](https://docs.openvins.com/annotated.html))
- [Online Sensor Calibrations](https://awesome-repositories.com/f/awesome-lists/devtools/sensor-calibration/online-sensor-calibrations.md) — Estimates camera and inertial parameters during operation to correct temporal offsets in real time. ([source](https://docs.openvins.com/namespaceov__msckf.html))

### Scientific & Mathematical Computing

- [Inertial Preintegration](https://awesome-repositories.com/f/scientific-mathematical-computing/inertial-preintegration.md) — Processes high-frequency inertial data into single constraints between image frames to reduce computational load.
- [Inertial Preintegrations](https://awesome-repositories.com/f/scientific-mathematical-computing/inertial-preintegrations.md) — Processes high-frequency inertial data into single constraints to reduce the computational load of the state filter. ([source](https://docs.openvins.com/annotated.html))
- [State Covariance Modeling](https://awesome-repositories.com/f/scientific-mathematical-computing/state-covariance-modeling.md) — Tracks error states and covariance indices to update manifold representations during filter corrections. ([source](https://docs.openvins.com/namespaceov__type.html))
- [Pinhole Camera Models](https://awesome-repositories.com/f/scientific-mathematical-computing/data-modeling-processing/geospatial-and-location-services/spatial-data-processing/spatial-geometry-libraries/camera-geometry-estimation/pinhole-camera-models.md) — Represents camera geometry using radial-tangential and fisheye equidistant projections to simulate lens behavior. ([source](https://docs.openvins.com/namespaceov__core.html))
- [Manifold Interpolations](https://awesome-repositories.com/f/scientific-mathematical-computing/spline-interpolators/manifold-interpolations.md) — Uses B-Spline curves over the special Euclidean group to produce smooth trajectories between state estimates.
- [SE(3) Manifold Interpolations](https://awesome-repositories.com/f/scientific-mathematical-computing/spline-interpolators/se-3-manifold-interpolations.md) — Uses B-Spline curves over the special Euclidean group to produce smooth trajectory paths between discrete poses.
- [Synthetic Sensor Simulation](https://awesome-repositories.com/f/scientific-mathematical-computing/synthetic-sensor-simulation.md) — Generates synthetic sensor measurements and trajectories to validate navigation algorithms in controlled virtual environments.

### Software Engineering & Architecture

- [Kalman Filter Localization](https://awesome-repositories.com/f/software-engineering-architecture/kalman-filter-localization.md) — Implements an Extended Kalman Filter for real-time robotic state estimation by fusing inertial and visual data.

### Graphics & Multimedia

- [Geometric Distortion Correction](https://awesome-repositories.com/f/graphics-multimedia/graphics-engines-rendering/rendering/post-processing-effects/lens-distortion/geometric-distortion-correction.md) — Corrects optical imperfections and geometric distortions using pinhole, fisheye, and radial-tangential models.

### Testing & Quality Assurance

- [Ground Truth Trajectory Generation](https://awesome-repositories.com/f/testing-quality-assurance/ground-truth-trajectory-generation.md) — Combines motion capture data with inertial information to create high-accuracy reference paths for evaluation. ([source](https://docs.openvins.com/))
- [State Estimation Performance Metrics](https://awesome-repositories.com/f/testing-quality-assurance/state-estimation-performance-metrics.md) — Includes a suite of metrics and scripts to quantify the precision and accuracy of state estimation results. ([source](https://docs.openvins.com/getting-started.html))
- [Trajectory Accuracy Evaluation](https://awesome-repositories.com/f/testing-quality-assurance/trajectory-accuracy-evaluation.md) — Compares estimated movement paths against ground truth data using absolute and relative pose error metrics.
- [Trajectory Alignment Tools](https://awesome-repositories.com/f/testing-quality-assurance/trajectory-alignment-tools.md) — Transforms and aligns two separate trajectories to enable a direct comparison of estimated paths. ([source](https://docs.openvins.com/annotated.html))
- [Trajectory Error Quantification](https://awesome-repositories.com/f/testing-quality-assurance/trajectory-error-quantification.md) — Calculates absolute trajectory error and relative pose error across varying segment lengths. ([source](https://docs.openvins.com/namespaceov__eval.html))
