rpng/open_vins

GitHub: rpng/open_vins

一个基于扩展卡尔曼滤波的开源视觉惯性导航研究平台,提供模块化的状态估计框架和丰富的传感器标定功能。

Stars: 2792 | Forks: 815

# OpenVINS [![ROS 1 Workflow](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3b35294b13123111.svg)](https://github.com/rpng/open_vins/actions/workflows/build_ros1.yml) [![ROS 2 Workflow](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6baa5f520c123116.svg)](https://github.com/rpng/open_vins/actions/workflows/build_ros2.yml) [![ROS Free Workflow](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/352844db63123121.svg)](https://github.com/rpng/open_vins/actions/workflows/build.yml) 欢迎来到 OpenVINS 项目! OpenVINS 项目包含一些核心计算机视觉代码以及一个最先进的基于滤波器的视觉惯性估计器。核心滤波器是一个 [扩展卡尔曼滤波器 (Extended Kalman filter)](https://en.wikipedia.org/wiki/Extended_Kalman_filter),它将惯性信息与稀疏视觉特征轨迹融合。这些视觉特征轨迹利用 [多状态约束卡尔曼滤波器 (MSCKF)](https://ieeexplore.ieee.org/document/4209642) 滑动窗口公式进行融合,这允许 3D 特征更新状态估计,而无需直接在滤波器中估计特征状态。受基于图的优化系统启发,所包含的滤波器具有模块化特性,允许通过适当的基于类型的系统方便地进行协方差管理。请查看下面的功能列表,以获取有关系统支持内容的完整详细信息。 * Github 项目页面 - https://github.com/rpng/open_vins * 文档 - https://docs.openvins.com/ * 入门指南 - https://docs.openvins.com/getting-started.html * 发表文献 - https://pgeneva.com/downloads/papers/Geneva2020ICRA.pdf ## 新闻 / 活动 * **2023年5月11日** - 作为 v2.7 版本的一部分,发布了惯性内参支持,以及一些错误修复和对立体 KLT 跟踪的改进。请查看 [发布页面](https://github.com/rpng/open_vins/releases/tag/v2.7) 了解详情。 * **2023年4月15日** - v2.6.3 的小型更新,支持下游应用的主动特征增量三角化,更快的零速更新,小错误修复,一些示例 realsense 配置,以及缓存的快速状态预测。请查看 [发布页面](https://github.com/rpng/open_vins/releases/tag/v2.6.3) 了解详情。 * **2023年4月3日** - 我们发布了一个名为 [ov_plane](https://github.com/rpng/ov_plane) 的单目平面辅助 VINS,它利用了 OpenVINS 项目。两者现在都支持发布的 [Indoor AR Table](https://github.com/rpng/ar_table_dataset) 数据集。 * **2022年7月14日** - 改进了 >100hz 跟踪的特征提取逻辑,一些错误修复和更新的脚本。见 v2.6.1 [PR#259](https://github.com/rpng/open_vins/pull/259) 和 v2.6.2 [PR#264](https://github.com/rpng/open_vins/pull/264)。 * **2022年3月14日** - 动态初始化初始开源,异步订阅惯性读数和发布里程计,支持低频特征跟踪。详情见 v2.6 [PR#232](https://github.com/rpng/open_vins/pull/232)。 * **2021年12月13日** - 新的 YAML 配置系统,ROS2 支持,Docker 镜像,基于视差的鲁棒静态初始化,内部日志系统以减少冗余,图像传输发布器,动态特征数量支持,以及其他小修复。详情见 v2.5 [PR#209](https://github.com/rpng/open_vins/pull/209)。 * **2021年7月19日** - 相机类,掩码支持,对齐工具,和其他小修复。详情见 v2.4 [PR#117](https://github.com/rpng/open_vins/pull/186)。 * **2020年12月1日** - 发布了改进的内存管理,主动特征点云发布,限制更新中的特征数量以限制计算量,以及其他小修复。详情见 v2.3 [PR#117](https://github.com/rpng/open_vins/pull/117)。 * **2020年11月18日** - 发布了真值生成工具包 [vicon2gt](https://github.com/rpng/vicon2gt),用于在动作捕捉室中创建真值轨迹,以评估 VIO 方法。 * **2020年7月7日** - 发布了用于车辆应用的零速更新和静止时的直接初始化。详情见 [PR#79](https://github.com/rpng/open_vins/pull/79)。 * **2020年5月18日** - 发布了基于 [VINS-Fusion](https://github.com/HKUST-Aerial-Robotics/VINS-Fusion) 的二级位姿图示例仓库 [ov_secondary](https://github.com/rpng/ov_secondary)。OpenVINS 现在发布边缘化特征轨迹、特征 3D 位置以及首个相机内参和外参。详情和讨论见 [PR#66](https://github.com/rpng/open_vins/pull/66)。 * **2020年4月3日** - 发布了代码库的 [v2.0](https://github.com/rpng/open_vins/releases/tag/v2.0) 更新,包含一些关键重构,无 ros 构建,改进的数据集支持,以及单逆深度特征表示。请查看 [发布页面](https://github.com/rpng/open_vins/releases/tag/v2.0) 了解详情。 * **2020年1月21日** - 我们的论文已被 [ICRA 2020](https://www.icra2020.org/) 接收发表。期待在那里见到大家!我们还添加了系统在不同数据集上运行的几个视频链接。 * **2019年10月23日** - OpenVINS 在 [IROS 2019 FPV 无人机竞速 VIO 竞赛](http://rpg.ifi.uzh.ch/uzh-fpv.html) 中获得第一名。我们将于 11 月 8 日在澳门的 [研讨会](https://wp.nyu.edu/workshopiros2019mav/) 上于 12:45 进行简短演示。 * **2019年10月1日** - 我们将在 [IROS 2019](https://www.iros2019.org/) 的 [视觉惯性导航:挑战与应用](http://udel.edu/~ghuang/iros19-vins-workshop/index.html) 研讨会上进行展示。提交的研讨会论文可以在[这里](http://udel.edu/~ghuang/iros19-vins-workshop/papers/06.pdf)找到。 * **2019年8月21日** - 开源了 [ov_maplab](https://github.com/rpng/ov_maplab),用于将 OpenVINS 与 [maplab](https://github.com/ethz-asl/maplab) 库连接。 * **2019年8月15日** - OpenVINS 仓库和文档网站的初始版本发布! ## 项目特性 * 滑动窗口视觉惯性 MSCKF * 模块化协方差类型系统 * 全面的文档和推导 * 可扩展的视觉惯性模拟器 * 流形上的 SE(3) B 样条 * 任意数量的相机 * 任意传感器频率 * 自动特征生成 * 五种不同的特征表示 1. Global XYZ 2. Global inverse depth 3. Anchored XYZ 4. Anchored inverse depth 5. Anchored MSCKF inverse depth 6. Anchored single inverse depth * 传感器内参和外参标定 * 相机到 IMU 的变换 * 相机到 IMU 的时间偏移 * 相机内参 * 惯性内参(包括 g-sensitivity) * 环境 SLAM 特征 * OpenCV ARUCO 标签 SLAM 特征 * 稀疏特征 SLAM 特征 * 视觉跟踪支持 * 单目相机 * 立体相机(同步) * 双目相机(同步) * 基于 KLT 或描述符 * 掩码跟踪 * 静态和动态状态初始化 * 零速检测和更新 * 开箱即用的 EuRocMav、TUM-VI、UZH-FPV、KAIST Urban 和其他 VIO 数据集评估 * 广泛的评估套件(ATE, RPE, NEES, RMSE 等) ## 代码库扩展 * **[ov_plane](https://github.com/rpng/ov_plane)** - 一个利用环境平面的实时单目视觉惯性里程计 (VIO) 系统。其核心提出了一种高效鲁棒的基于单目的平面检测算法,不需要额外的传感模式,如立体、深度相机或神经网络。平面检测和跟踪算法允许将点特征实时正则化到环境平面上,这些平面要么作为长期平面保持在状态向量中,要么为了效率而被边缘化。平面规律性应用于状态内 SLAM 和状态外 MSCKF 点特征,由于平面的巨大空间体积,能够实现长期的点到平面回环检测。 * **[vicon2gt](https://github.com/rpng/vicon2gt)** - 创建此工具是为了使用动作捕捉系统(例如 Vicon 或 OptiTrack)生成真值轨迹,用于评估视觉惯性估计系统。具体来说,我们以相机频率速率计算惯性 IMU 状态(全 15 自由度),并生成类似于 EurocMav 数据集提供的真值轨迹。执行惯性和动作捕捉信息的融合,并估计两个传感器之间所有未知的空间-时间校准。 * **[ov_maplab](https://github.com/rpng/ov_maplab)** - 此代码库包含接口包装器,用于将 [OpenVINS](https://github.com/rpng/open_vins) 的视觉惯性运行结果导出到 [maplab](https://github.com/ethz-asl/maplab) 采用的 ViMap 结构中。当 OpenVINS 运行数据集时,状态估计和原始图像被附加到 ViMap 中。数据集完成后,使用 maplab 的特征系统重新提取和三角化特征。这可用于合并多会话地图,或在首先通过 OpenVINS 运行数据后执行批处理优化。提供了一些示例以及一个辅助脚本,用于将轨迹导出为标准真值格式。 * **[ov_secondary](https://github.com/rpng/ov_secondary)** - 这是一个示例二级线程,以松耦合方式为 [OpenVINS](https://github.com/rpng/open_vins) 提供回环检测。这是对 HKUST aerial robotics group 最初开发的代码的修改,可以在他们的 [VINS-Fusion](https://github.com/HKUST-Aerial-Robotics/VINS-Fusion) 仓库中找到。这里我们要强调这是一种松耦合方法,因此没有信息返回给估计器以改进底层的 OpenVINS 里程计。此代码库在几个关键领域进行了修改,包括:暴露更多回环检测参数,订阅相机内参,简化配置以便仅需要提供话题,以及一些对回环检测的调整以提高频率。 ## 演示视频
## 致谢 / 许可 此代码由特拉华大学的 [机器人感知与导航小组 (RPNG)](https://sites.udel.edu/robot/) 编写。如果您对代码有任何问题,请在我们包含相关实现细节和参考的 github 页面上开启一个 issue。对于利用或对比此工作的研究人员,请引用以下内容: ``` @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}} } ``` 代码库和文档根据 [GNU General Public License v3 (GPL-3)](https://www.gnu.org/licenses/gpl-3.0.txt) 授权。您必须在您的衍生作品中保留版权和许可声明,并在同一许可下公开带有修改的完整源代码([见此](https://choosealicense.com/licenses/gpl-3.0/);这不是法律建议)。
标签:C++, DNS解析, IMU, MSCKF, ROS, ROS2, SLAM, VIO, 传感器融合, 位姿估计, 位姿图, 卡尔曼滤波, 多状态约束卡尔曼滤波, 定位, 开源项目, 惯性测量单元, 扩展卡尔曼滤波, 数据擦除, 无人机, 机器人导航, 特征跟踪, 状态估计, 科研平台, 移动机器人, 立体视觉, 自动驾驶, 视觉惯性导航, 计算机视觉, 请求拦截