VINS-Mono和VINS-Mobile是香港科技大學沈劭劼團隊開源的單目視覺慣導SLAM方案。是基於優化和滑動窗口的VIO,使用IMU預積分構建緊耦合框架。並且具備自動初始化,在線外參標定,重定位,閉環檢測,以及全局位姿圖優化功能。
方案最大的貢獻是構建了效果很好的融合算法,視覺閉環等模塊倒是使用了較為常見的算法。
系列博客將結合課題組發表的paper,從代碼層面,逐步剖析系統的各個模塊,達到對單目VIO整體的把握,幫助自己理解各類算法,並開發出針對應用場景的視覺慣導SLAM系統。最終目標是使用在AR應用中(Android)。
系統pipeline
主要分為五部分
1. 傳感器數據處理:
- 單目相機Monocular Camera: Feature detection and Tracking
- IMU: Pre-integration
2. 初始化:
- 僅使用視覺構建SfM
- 將SfM結果和IMU預積分結果對齊
3. 基於滑動窗口的非線性優化:
4. 閉環檢測:
5. 4自由度全局位姿圖優化:
主要依賴的庫只有OpenCV, Eigen和Ceres Solver,代碼目錄如下
核心算法都在feature_tracker和vins_estimator包中。
按照REDEME步驟跑EuRoC/MH_05_difficult.bag錄好的數據結果如下:
使用rqt_graph得到系統的node和topic關系:
rosbag將記錄好的imu數據和單目相機獲取的圖像數據分別發布到/imu0和/cam0/image_raw話題;/feature_tracker節點通過訂閱/cam0/image_raw話題獲取圖像數據,/vins_estimator節點通過訂閱/imu0話題獲取imu數據,同時/feature_tracker節點將提取出的圖像特征發布到/feature_tracker/feature話題,由/vins_estimator訂閱獲取。
因此,/feature_tracker節點負責視覺提取和跟蹤,/vins_estimator則是融合系統的主要部分。
為了方便看代碼,整理了一下各個部分架構圖(更新中):