學習ORB_SLAM3時在IMU初始化時,有些疑問故以筆記的形式記錄下來:
ORB_SLAM3 IMU初始化是基於論文《Inertial-Only Optimization for Visual-Inertial Initialization》分3步:第一步把冰箱門打開。。。。
1.Vision-only MAP estimation(純視覺的最大后驗估計)
2.Inertial-only MAP estimation(純慣導的最大后驗估計)
3.Visual-inertial MAP estimation(視覺&慣導的最大后驗估計)
1.Vision-only MAP estimation(純視覺的最大后驗估計):
初始化純單目SLAM,在初始的兩幀使用FAST提取和ORB描述子做2D-2D匹配,然后使用本質矩陣和單應矩陣模型計算變換矩陣,然后使用評分高的模型進行初始化運動和三角化特征點,初始化成功后以比較高的頻率(4 Hz to 10 Hz)插入關鍵幀,在關鍵幀之間需要進行IMU的預積分。要進行IMU的外參標定。
2.Inertial-only MAP estimation(純慣導的最大后驗估計):
僅使用IMU數據,通過軌跡被固定,也就是關鍵幀的位姿被固定,對IMU的參數進行優化。
關鍵幀狀態,除了位置其他參數定義如下:
放縮尺度
重力方向的旋轉
6軸的零偏:三軸(X,Y,Z)加速度零偏,三軸角(Pitch,Yaw,Roll)速度零偏
0~K幀關鍵幀除去尺度的3軸(X,Y,Z)速度
第0到第k關鍵幀幀的IMU積分
從第0到第k幀的IMU測量值固定,第k關鍵幀數據分布概率
第k關鍵幀數據固定, 從第0到第k幀的可能的IMU測量值分布概率
第k關鍵幀數據分布概率
最大后驗估計:
第二行,log函數單調性
第三行,最大值=取反最小值
第四行,根據貝葉斯公式:
第五行,log展開
第六行,刪除無關項
第七行,似然展開
如果IMU預積分和先驗的滿足高斯誤差分布,最大后驗問題等效於:
先驗殘差
幀間殘差
對應代碼部分:
Optimizer::InertialOptimization
圖優化對應3種類型的邊:
EdgePriorAcc =>先驗加速度零偏殘差
EdgePriorGyro=>先驗角速度零偏殘差
EdgeInertialGS=>幀間殘差
TODO: