技術分享 | 近期很火的VINS,不打算進來看看嗎?
前言 隨著自動駕駛技術的快速發展,多感測器融合的方案顯得愈發成熟,本文就簡單介紹下近幾年很火的VINS-Mono。傳統的單目視覺SLAM尺度具有不確定性,融合了IMU之後,可以有效的解決單目尺度不確定性的問題,並且視覺還可以消除IMU的積分漂移,極大的提升系統的魯棒性。除此之外,在後端初始化中,IMU和視覺的融合事實上僅是一個松耦合,定位精度有效媲美OKVIS,而且具有比OKVIS更加完善和魯棒的初始化以及閉環檢測過程。那麼接下來本文就簡單介紹下VINS的原理。
1.VINS-mono VINS-Mono是由一個單目相機和一個低成本IMU組成的魯棒通用的單目視覺慣性系統。通過融合預積分的IMU測量值和特徵觀測值來獲得高精度的視覺慣性里程計,在結合閉環檢測和圖優化,構成了一個完整的單目VIO-SLAM系統。
1.1演算法框架 大體流程如下:
- 從單目相機得到視覺圖片,對採集到的圖片做一次自適應直方圖均衡化處理,然後基於FAST演算法提取Harris角點特徵,這裡直接呼叫了OpenCV中的cv::goodFeaturesToTrack函式,並採用KLT金字塔光流演算法進行特徵點跟蹤。對跟蹤到的特徵點放入一個佇列中,五點法求出本質矩陣後,用隨機一致性取樣剔除Outliers。隨後進行IMU的預積分,主要是為防止重新傳播IMU觀測值,加大運算難度。選用IMU預積分模型,從世界座標系轉為本體座標系。離散狀態下采用中值積分的預積分。
- 初始化完成後,採用基於滑窗的非線性優化方法來估計body的狀態。其中body的狀態包括滑窗中關鍵幀的IMU狀態(位置,速度,旋轉,加速度bias和角速度bias);
- 當系統檢測到迴環時,在1中提到的代價函式中新增閉環檢測得到的視覺測量殘差部分,對狀態進行重定位。其中閉環檢測採用的DBoW2的方法。
- 在閉環檢測後,對位姿中會產生漂移的4個引數進行位姿圖優化,四個引數為X,Y, Z,yaml。 由於篇幅限制,下面就只介紹邊緣化方法和IMU預積分。
1.2 IMU預積分 IMU是慣性測量單元,在VINS中,IMU具有兩個裝置,分別為陀螺儀和加速度計,其中陀螺儀測量IMU座標系的旋轉角速度,加速度計測量IMU座標系下線性加速度。附上參考連結: http://zhuanlan.zhihu.com/p/133666509。
為什麼需要預積分?因為一個剛體在同一個慣性座標系進行平移運動,其平移量對時間的一階導和二階導即速度和加速度。
預積分:
下一次的狀態可以通過當前的狀態迭代求解,如下:
預積分項: 因為IMU採集的資料是離散的,所以這裡採用的積分方式為中值積分
由於公式過多,下面就不再推導公式,需要的可以自行查閱。我們需要知道預積分的目的是為了解決我們後端優化非線性優化時,需要迭代更新第k幀v和R,這將導致我們需要根據每次迭代後的值重新進行積分,計算量非常大。所以將優化變數從IMU的預積分項中分離開來。
1.3邊緣化 根據前面討論的基於高斯牛頓的非線性優化理論可知 需要注意的是,上式中的狀態變數並非一定為相機位姿和路標點部分,而是希望Marg掉的和保留的部分。VINS中則真正需要邊緣化的是滑動視窗中的最老幀或者次新幀,目的是希望不再計算這一幀的位姿或者與其相關的路標點,但是希望保留該幀對視窗內其他幀的約束關係。我們不能直接丟棄變數,因為它包含了對其他變數的約束,直接丟棄會缺少約束,丟失資訊。需要採用Schur complement進行消元。 那我們就可以直接算出
,並且不會丟失任何約束,因此不會丟失資訊。 VINS根據次新幀是否為關鍵幀,分為兩種邊緣化策略:通過比對次新幀和次次新幀的視差量,來決定marg掉次新幀或者最老幀。把上一次先驗項中的殘差項傳遞給當前先驗項,並從中去除需要丟棄的狀態量。
當次新幀不是關鍵幀時,MARGIN_SECOND_NEW,我們將直接扔掉次新幀及它的視覺觀測邊,而不對次新幀進行marg,因為我們認為當前幀和次新幀很相似,也就是說當前幀跟路標點之間的約束和次新幀與路標點的約束很接近,直接丟棄並不會造成整個約束關係丟失過多資訊。但是值得注意的是,我們要保留次新幀的IMU資料,從而保證 IMU預積分的連貫性。通過以上過程先驗項就構造完成了,在對滑動視窗內的狀態量進行優化時,把它與 IMU殘差項和視覺殘差項放在一起優化,從而得到不丟失歷史資訊的最新狀態估計的結果。
1.4資料集上對比 對比幾個開源框架OKVIS,VINS不帶回環,VINS帶回環三種方法在EuRoC資料集下15個數據子集的效果。
2.VINS_Fusion 2.1基本介紹 VINS_Fusion是繼VINS_Mono和VINS_Moblie後,港科大開源的雙目視覺慣導SLAM方案,VINS_Fusion是一種基於優化的多感測器狀態估計器,可實現自主應用的精確定位。是VINS-Mono的擴充套件,支援多種視覺慣性感測器型別。開源專案組還展示了將VINS於GPS融合的模組示例。
特徵如下:
- 多感測器支援(立體攝像機/單聲道攝像機+IMU/立體攝像機 + IMU)
- 線上空間校準(相機和IMU之間的轉換)
- 線上時間校準(相機和IMU之間的時間偏移)
- 視覺迴圈閉合 基本原理和Mono一樣,這裡不再贅敘。
2.2Mono和Fusion對比 雙目SLAM對比之前單目SLAM,主要一個好處在於初始化過程中,可以靜止進行初始化。另一方面由於尺度資訊不一定完全依靠IMU,因此不會造成尺度不客觀的情況。但是由於視覺誤差誤匹配等各種原因,造成實際上雙目的精度會比單目來的差一點。不過魯棒性上考慮,雙目明顯優於單目。 本次實驗使用的感測器是D435i,實驗效果如下:
結束語 通過學習VINS的原理,我們可以瞭解VINS中最具創新性的地方,即預積分過程。這為我們以後改進自己的SLAM方案提供了不錯的思路。
- End -
技術發展的日新月異,阿木實驗室將緊跟技術的腳步,不斷把機器人行業最新的技術和硬體推薦給大家。看到經過我們培訓的學員在技術上突飛猛進,是我們培訓最大的價值。如果你在機器人行業,就請關注我們的公眾號,我們將持續釋出機器人行業最有價值的資訊和技術。 阿木實驗室致力於前沿IT科技的教育和智慧裝備,讓機器人研發更高效!
- 技術分享 | 還不來看!!! 讓ROS人機互動更加有趣--基於Qt ROS開發
- AirSim動態 | 還在為AirSim中配置感測器而煩惱嗎?
- 技術分享 | ROS與Gazebo的通訊機制
- 技術分享 | ROS與Gazebo的通訊機制
- 技術分享 | 工程開發利器-Homer高頻寬、多介面、可組網資料傳輸鏈路
- 技術分享 | Prometheus避障—A_star演算法程式碼閱讀
- 技術分享 | 嵌入式常用濾波演算法的matlab實現
- 技術分享 | 嵌入式常用濾波演算法的matlab實現
- PX4官方動態 | AirSim初見面
- 技術分享 | 詳解在docker中更新映象——基於Prometheus
- PX4官方動態 | 帶你走進官方教學(三)
- 技術分享 | 基於人工勢場法的無人機,機間避撞實現
- 從模擬到實飛,Prometheus自主無人機開發全覆蓋!快來參加阿木實驗室線下集訓吧!
- 技術分享 | turtlebot3自動駕駛之道路訊號檢測
- 新品釋出 | P450迎來新配置升級! NANO/NX版本,視覺自主精準降落.....
- 技術分享 | ROS2下控制PX4模擬無人機
- 技術分享 | turtlebot3自動駕駛之識別道路
- PX4官方動態 | 帶你走進官方教學(二)
- 技術分享 | 無人機叢集——分散式控制演算法
- PX4官方動態 | Prometheus專案組將作為演講者參加PX4-2021開發者峰會