VINS-mono是當前常用的VIO框架之一,出自港科大的沈劭劼老師團隊。VINS-mono是基於優化的緊耦合方案,精度、速度、魯棒性俱佳。
1、整體框架
從上圖可得,VINS-mono可以分爲4個部分,跟蹤、初始化、滑窗優化、迴環優化。
2、跟蹤
2.1、視覺跟蹤
這裏採用的是光流跟蹤的前端,一般過程是通過特徵點匹配獲得本質矩陣或者基礎矩陣,然後恢復出R,t;之後再將特徵點三角化,後面就可以通過pnp求解位姿。
對於關鍵幀的選擇有以下兩個準則:
1、當前幀相對最近的關鍵幀的特徵平均視差大於一個閾值就爲關鍵幀(因爲視差可以根據平移和旋轉共同得到,而純旋轉則導致不能三角化成功,所以這一步需要IMU預積分進行補償)
2、當前幀跟蹤到的特徵點數量小於閾值視爲關鍵幀,這個標準是爲了避免完全喪失特徵的情況
2.2、IMU預積分
根據IMU中陀螺儀和加速度計的測量方程:
可以得到k+1時刻,IMU位置、速度、姿態的積分公式:
上面的積分公式中,爲t時刻的世界座標系姿態。作爲待優化變量,在每次更新後就意味着重新積分。爲了減少計算量,預積分的結果被轉換到相對位姿,即:
相應的積分項爲:
離散化形式:
3、初始化
這裏需要標定陀螺儀的偏差,重力加速度,相機與IMU之間的相對位姿。
3.1、SfM
首先需要利用SfM獲得一段較精確的圖像估計位姿。
3.2、標定陀螺儀的偏移
由於旋轉不受尺度影響,可以根據下面的約束獲得陀螺儀的偏移
在求得偏移後,需要重新計算IMU預積分。
具體過程可參考:https://xhy3054.github.io/vins-gyro-bias/
3.3、標定速度、重力加速度和尺度
待標定的所有變量:
根據位置和速度的預積分公式
轉化爲:
求解下式即可
3.4、重力修正
一般情況下,重力的模值是固定的,所以重力向量只有兩個自由度。可以據此對上面的變量進一步優化。
具體過程參考:https://xhy3054.github.io/vins-scale-gravity-velo/
4、滑窗優化
待優化變量爲:
殘差項:
這裏的殘差項包括邊緣化誤差、IMU測量誤差、視覺測量誤差。
- IMU測量誤差:
- 圖像測量誤差:
- 邊緣化誤差:
原文中未給出公式
5、迴環優化
目標函數:
位姿圖中的優化變量僅有如下的4個自由度,因爲橫滾角和俯仰角對於IMU是可觀的。