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