1.简介
1.1 简要描述
- Vins-mono是香港科技大学开源的一个VIO算法,https://github.com/HKUST-Aerial-Robotics/VINS-Mono,是用紧耦合方法实现的,通过单目+IMU恢复出尺度,效果非常棒。
VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator 的设计思路主要突出两点:
- 针对于单目的鲁棒性很强的VIO 系统
- 通用性很强的VIO框架
1.2 vins-mon 概述
解读vins-mono
- 首先 Measurement Preprocessing (Vision Processing Front End + IMU Preintegration Processing)开始 ;
负责提取并跟踪每个新图像帧的特征,及帧间IMU数据预积分。 - 然后通过一个松耦合的方式来做初始化;
提供了激活非线性系统的必要初始值,如姿态、速度、重力向量、陀螺仪偏差及3D特征位置。 - 再通过一个紧耦合的方式来做 Local Visual-inertial Odometry;
通过联合优化所有的视觉、惯性信息求解滑窗内的状态。
下面为整个工程的流程图:
1.3 各文件夹功能
文件夹 | 主要功能 |
---|---|
ar_demo | 视觉定位的一个小demo |
benchmark_publisher | 订阅估计的estimated_odometry, 然后与 . csv_files 中的groundtruth对比 |
camera_model | 订阅相机的话题,保存成图片,用于相机校准,支持鱼眼相机,针孔相机 |
config | 配置参数文件 |
feature_tracker | 使用光流法追踪特征点 |
pose_graph | 后端优化 |
support_files | 帮助文档、Bow字典、Brief模板文件 |
vins_estimator | 状态估计 |
1.4 算法模块
- 预处理
图像特征光流跟踪
IMU数据预积分 - 初始化
纯视觉Sfm
Sfm与IMU积分的松耦合 - 基于滑动窗口的非线性优化实现紧耦合
- 回环检测与重定位
- 四自由度位姿图优化
Measurement Preprocessing 过程
- Visual Preprocessing 每一帧图像特征点提取和 KLT稀疏光流追踪
- IMU Preprocessing 两帧图像之间IMU预积分
- Keyframe Selection
2. 运行
2.1 ros运行
- roscore
- rosbag play MH_01_easy.bag --clock
- roslaunch vins_estimator euroc.launch
- roslaunch vins_estimator vins_rviz.launch