README 未给出具体安装步骤,需参考官方 getting-started 文档;部分功能依赖 ROS 1 或 ROS 2 环境;评估数据集需另行下载
open_vins
rpngGPL-3.0更新放缓开源视觉惯性导航研究平台,提供 MSCKF 与 EKF 定位、传感器标定和 VIO 算法实现,方便机器人研究者做 SLAM 与状态估计实验。
An open source platform for visual-inertial navigation research.
git clone https://github.com/rpng/open_vins.gitREADME 未说明显存或 GPU 要求,也未列出支持的 GPU 厂商与型号
基于 MSCKF 的开源视觉惯性导航研究平台,提供滤波估计器与仿真评估工具
开源视觉惯性导航研究平台,提供 MSCKF 与 EKF 定位、传感器标定和 VIO 算法实现,方便机器人研究者做 SLAM 与状态估计实验。
核心能力
- 用 MSCKF 滑窗融合 IMU 与稀疏视觉特征轨迹
- 提供模块化协方差类型系统管理滤波器状态
- 支持单目、双目与双相机同步视觉跟踪
- 可标定相机内外参、相机-IMU 时偏与惯性内参
- 内置可扩展视觉惯性仿真器与 ATE/RPE/NEES 评估套件
容易踩的坑
- v2.7Develop v2.7最新正式版2023-06-20 · 2023-06-20 00:06 UTC
This has been one of the larger releases with significant changes to the propagation to support IMU intrinsics and analytical integration. The documentation has been split into the original discrete derivations and analytical with IMU intrinsics to hopefully allow for comparison and learning between these two.
The IMU intrinsics code was released in relation to the following publication:
Yang, Yulin, Patrick Geneva, Xingxing Zuo, and Guoquan Huang. "Online Self-Calibration for Visual-Inertial Navigation: Models, Analysis and Degeneracy." IEEE Transactions on Robotics, 2023. https://pgeneva.com/downloads/preprints/Yang2023TRO.pdf
Bug Fixes
- Fix #333 in ov_eval utility
- Stereo tracking improvements
- Fix #332 chance reject of features out of bounds
- Fix bad masking logic, so features should be detected more reliably
- Fix documentation #340 of feat init optimization Jacobian
Key Changes
- IMU intrinsic support has been added
- Support corrections to IMU readings using intrinsics
- Online calibration of parameters
- Simulator support to verify performance
- Updated documentation
- Discrete and analytical IMU propagation docs have been separated out
- FEJ docs has been expanded
- A few other improvements throughout the codebase
Example fixed masks in stereo tracking:
https://github.com/rpng/open_vins/assets/2222562/bd6f6927-96e6-4275-8ce8-93be25d00da4
- v2.6.3Develop v2.6.32023-04-15 · 2023-04-15 22:53 UTC
查看更新说明
In general a bunch of smaller changes and bug fixes. Thanks to all the contributors that opened issues and PRs to address the problems. We also have recently released a monocular plane-aided VINS, termed ov_plane, which leverages the OpenVINS project. We hope that those interested can check it out.

Bug Fixes
- fix: incorrect zero-velocity bias evolution code in https://github.com/rpng/open_vins/commit/38610105652a7bc9843f3fb35c7b93a528725680
- fix: link errors by @FinleyPan in https://github.com/rpng/open_vins/pull/272
- fix: display problem if the track length of feature is very long by @CanCanZeng in https://github.com/rpng/open_vins/pull/267
- fix: bug in get_oldest_time from FeatureDatabase by @wang-lq in https://github.com/rpng/open_vins/pull/287
- fix: Segmentation fault in State.h by @pritzvac in https://github.com/rpng/open_vins/pull/306
- fix: newer matplotlib version in https://github.com/rpng/open_vins/commit/04293902a78a49ad395de1211948430832b10d65
- fix: pointcloud publishing extra (0,0,0) features in https://github.com/rpng/open_vins/commit/70b0ae385fb1300faadf2b148c8dab5583305ff4
- fix: gram-schmidt bug if gravity was along the e1 vector in https://github.com/rpng/open_vins/commit/b39717823e88040623c8706b61ee39f323d2fa9c
- fix: using sample config info on KAIST (see https://github.com/rpng/open_vins/issues/300 and https://github.com/rpng/open_vins/commit/d171a03abc3ccb8641855acbc107a70d00a104ba)
What's Changed
- release mode is no longer the default CMAKE mode to allow for debugging using native asserts
- cleanup some ROS-free install location logic by @goldbattle in https://github.com/rpng/open_vins/pull/318
- cache our fast propagate values so we don't reintegrate by @goldbattle in https://github.com/rpng/open_vins/pull/321
- incremential feature triangulation for active features in https://github.com/rpng/open_vins/commit/8600ceeadce43297192d328653f016254e4594b5
- use measurement compression for zero velocity update by @ccchu0816 in https://github.com/rpng/open_vins/commit/01fb6e931ec404c1dd73454edc7c543fe5f69e88
- example T265 and D455 realsense configuration files in https://github.com/rpng/open_vins/commit/4ed7927c7fea4bdc92987f2c66e77b7837034f85
- support for the Indoor AR Table Visual-Inertial Datasets in https://github.com/rpng/open_vins/commit/cd781f99bc8f5fc5bb43c8072205afe551ae0810 (see documentation website)
New Contributors
- @FinleyPan made their first contribution in https://github.com/rpng/open_vins/pull/272
- @CanCanZeng made their first contribution in https://github.com/rpng/open_vins/pull/267
- @wang-lq made their first contribution in https://github.com/rpng/open_vins/pull/287
- @pritzvac made their first contribution in https://github.com/rpng/open_vins/pull/306
Full Changelog: https://github.com/rpng/open_vins/compare/v2.6.2...v2.6.3
- v2.6.2Develop v2.6.22022-08-01 · 2022-08-01 18:27 UTC
查看更新说明
- Fixes covariance init bug #262
- Do not use global publish namespace, use the specified one (both ROS1 and ROS2)
- Fix ROS2 IMU subscribe not being sensor QoS
rclcpp::SensorDataQoS() - NEW: Allow specifying the number of threads for parallelization / OpenCV (removes the
multi_threadingconfig value) - NEW: Histogram timing plot to allow better insight

- v2.6.1Develop v2.6.12022-07-18 · 2022-07-18 15:57 UTC
查看更新说明
- Bug fix accidental deletion of IMU when time tracking was lost (fixes #246)
- Fix ROS2 param reading in visualizer (fixes #249)
- Fix bug that the first ever IMU reading is not past into the VioManger
- Dynamic initialization is now disabled by default on most datasets
- Now use predeclared classes and move headers to cpp files to improve compile time
- Rename ov_init simulator to
SimulatorInitto prevent name conflicts - Faster feature extraction logic by only extracting in sub-grids which need features (150hz for mono, 60hz for stereo)
- New simplified serial reader which doesn't use iterators
- Publishing of feature track information (image) is now in a separate thread and at 20hz. This visualization can take a while depending on image size and number of features. This means more multi-threading mutexes were added to the tracker classes.
- Configuration and scripts were updated for those which use OpenVINS as a baseline
- v2.6Develop v2.6 - Dynamic Initialization and Async Publishing2022-03-21 · 2022-03-21 19:17 UTC
查看更新说明
Key Changes
- Dynamic initialization has been added alongside the current static one.
- New dependency requirement of ceres-solver to support the MLE refinement
- Recovered covariance still requires some inflation (likely due to being close to degenerate motion)
- Tested on existing datasets, seems to work reasonable well, but please let us know
- Closes #204 and #222
- The frontend now has two threads. The IMU will always publish the state odometry at its rate, along with recording the IMU readings. This should help deployment on real robots were the latency is key.
- Odometry publish is now in the local frame to match the ROS spec (fixes #224)
Dynamic initialization is an implementation based on:
Dong-Si, Tue-Cuong, and Anastasios I. Mourikis. "Estimator initialization in vision-aided inertial navigation with unknown camera-IMU calibration." 2012 IEEE/RSJ International Conference on Intelligent Robots and Systems. IEEE, 2012.
- https://ieeexplore.ieee.org/abstract/document/6386235
- https://tdongsi.github.io/download/pubs/2011_VIO_Init_TR.pdf
- https://pgeneva.com/downloads/reports/tr_init.pdf
Demo Youtube Video: https://www.youtube.com/watch?v=eSQLWcNrx_I
https://user-images.githubusercontent.com/2222562/159347591-97b3f334-7b8b-4ff8-b41d-875aa04d2544.mp4
- Dynamic initialization has been added alongside the current static one.
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
OpenVINS
Welcome to the OpenVINS project! The OpenVINS project houses some core computer vision code along with a state-of-the art filter-based visual-inertial estimator. The core filter is an Extended Kalman filter which fuses inertial information with sparse visual feature tracks. These visual feature tracks are fused leveraging the Multi-State Constraint Kalman Filter (MSCKF) sliding window formulation which allows for 3D features to update the state estimate without directly estimating the feature states in the filter. Inspired by graph-based optimization systems, the included filter has modularity allowing for convenient covariance management with a proper type-based state system. Please take a look at the feature list below for full details on what the system supports.
- Github project page - https://github.com/rpng/open_vins
- Documentation - https://docs.openvins.com/
- Getting started guide - https://docs.openvins.com/getting-started.html
- Publication reference - https://pgeneva.com/downloads/papers/Geneva2020ICRA.pdf
News / Events
- May 11, 2023 - Inertial intrinsic support released as part of v2.7 along with a few bug fixes and improvements to stereo KLT tracking. Please check out the release page for details.
- April 15, 2023 - Minor update to v2.6.3 to support incremental feature triangulation of active features for downstream applications, faster zero-velocity update, small bug fixes, some example realsense configurations, and cached fast state prediction. Please check out the release page for details.
- April 3, 2023 - We have released a monocular plane-aided VINS, termed ov_plane, which leverages the OpenVINS project. Both now support the released Indoor AR Table dataset.
- July 14, 2022 - Improved feature extraction logic for >100hz tracking, some bug fixes and updated scripts. See v2.6.1 PR#259 and v2.6.2 PR#264.
- March 14, 2022 - Initial dynamic initialization open sourcing, asynchronous subscription to inertial readings and publishing of odometry, support for lower frequency feature tracking. See v2.6 PR#232 for details.
- December 13, 2021 - New YAML configuration system, ROS2 support, Docker images, robust static initialization based on disparity, internal logging system to reduce verbosity, image transport publishers, dynamic number of features support, and other small fixes. See v2.5 PR#209 for details.
- July 19, 2021 - Camera classes, masking support, alignment utility, and other small fixes. See v2.4 PR#117 for details.
- December 1, 2020 - Released improved memory management, active feature pointcloud publishing, limiting number of features in update to bound compute, and other small fixes. See v2.3 PR#117 for details.
- November 18, 2020 - Released groundtruth generation utility package, vicon2gt to enable creation of groundtruth trajectories in a motion capture room for evaulating VIO methods.
- July 7, 2020 - Released zero velocity update for vehicle applications and direct initialization when standing still. See PR#79 for details.
- May 18, 2020 - Released secondary pose graph example repository ov_secondary based on VINS-Fusion. OpenVINS now publishes marginalized feature track, feature 3d position, and first camera intrinsics and extrinsics. See PR#66 for details and discussion.
- April 3, 2020 - Released v2.0 update to the codebase with some key refactoring, ros-free building, improved dataset support, and single inverse depth feature representation. Please check out the release page for details.
- January 21, 2020 - Our paper has been accepted for presentation in ICRA 2020. We look forward to seeing everybody there! We have also added links to a few videos of the system running on different datasets.
- October 23, 2019 - OpenVINS placed first in the IROS 2019 FPV Drone Racing VIO Competition . We will be giving a short presentation at the workshop at 12:45pm in Macau on November 8th.
- October 1, 2019 - We will be presenting at the Visual-Inertial Navigation: Challenges and Applications workshop at IROS 2019. The submitted workshop paper can be found at this link.
- August 21, 2019 - Open sourced ov_maplab for interfacing OpenVINS with the maplab library.
- August 15, 2019 - Initial release of OpenVINS repository and documentation website!
Project Features
- Sliding window visual-inertial MSCKF
- Modular covariance type system
- Comprehensive documentation and derivations
- Extendable visual-inertial simulator
- On manifold SE(3) b-spline
- Arbitrary number of cameras
- Arbitrary sensor rate
- Automatic feature generation
- Five different feature representations
- Global XYZ
- Global inverse depth
- Anchored XYZ
- Anchored inverse depth
- Anchored MSCKF inverse depth
- Anchored single inverse depth
- Calibration of sensor intrinsics and extrinsics
- Camera to IMU transform
- Camera to IMU time offset
- Camera intrinsics
- Inertial intrinsics (including g-sensitivity)
- Environmental SLAM feature
- OpenCV ARUCO tag SLAM features
- Sparse feature SLAM features
- Visual tracking support
- Monocular camera
- Stereo camera (synchronized)
- Binocular cameras (synchronized)
- KLT or descriptor based
- Masked tracking
- Static and dynamic state initialization
- Zero velocity detection and updates
- Out of the box evaluation on EuRocMav, TUM-VI, UZH-FPV, KAIST Urban and other VIO datasets
- Extensive evaluation suite (ATE, RPE, NEES, RMSE, etc..)
Codebase Extensions
-
ov_plane - A real-time monocular visual-inertial odometry (VIO) system which leverages environmental planes. At the core it presents an efficient robust monocular-based plane detection algorithm which does not require additional sensing modalities such as a stereo, depth camera or neural network. The plane detection and tracking algorithm enables real-time regularization of point features to environmental planes which are either maintained in the state vector as long-lived planes, or marginalized for efficiency. Planar regularities are applied to both in-state SLAM and out-of-state MSCKF point features, enabling long-term point-to-plane loop-closures due to the large spacial volume of planes.
-
vicon2gt - This utility was created to generate groundtruth trajectories using a motion capture system (e.g. Vicon or OptiTrack) for use in evaluating visual-inertial estimation systems. Specifically we calculate the inertial IMU state (full 15 dof) at camera frequency rate and generate a groundtruth trajectory similar to those provided by the EurocMav datasets. Performs fusion of inertial and motion capture information and estimates all unknown spacial-temporal calibrations between the two sensors.
-
ov_maplab - This codebase contains the interface wrapper for exporting visual-inertial runs from OpenVINS into the ViMap structure taken by maplab. The state estimates and raw images are appended to the ViMap as OpenVINS runs through a dataset. After completion of the dataset, features are re-extract and triangulate with maplab's feature system. This can be used to merge multi-session maps, or to perform a batch optimization after first running the data through OpenVINS. Some example have been provided along with a helper script to export trajectories into the standard groundtruth format.
-
ov_secondary - This is an example secondary thread which provides loop closure in a loosely coupled manner for OpenVINS. This is a modification of the code originally developed by the HKUST aerial robotics group and can be found in their VINS-Fusion repository. Here we stress that this is a loosely coupled method, thus no information is returned to the estimator to improve the underlying OpenVINS odometry. This codebase has been modified in a few key areas including: exposing more loop closure parameters, subscribing to camera intrinsics, simplifying configuration such that only topics need to be supplied, and some tweaks to the loop closure detection to improve frequency.
Demo Videos
Credit / Licensing
This code was written by the Robot Perception and Navigation Group (RPNG) at the University of Delaware. If you have any issues with the code please open an issue on our github page with relevant implementation details and references. For researchers that have leveraged or compared to this work, please cite the following:
@Conference{Geneva2020ICRA,
Title = {{OpenVINS}: A Research Platform for Visual-Inertial Estimation},
Author = {Patrick Geneva and Kevin Eckenhoff and Woosik Lee and Yulin Yang and Guoquan Huang},
Booktitle = {Proc. of the IEEE International Conference on Robotics and Automation},
Year = {2020},
Address = {Paris, France},
Url = {\url{https://github.com/rpng/open_vins}}
}
The codebase and documentation is licensed under the GNU General Public License v3 (GPL-3). You must preserve the copyright and license notices in your derivative work and make available the complete source code with modifications under the same license (see this; this is not legal advice).