一、 處理新關鍵幀processnewkeyframe()
五、區域性ba
六、刪除冗餘關鍵幀keyframeculling()
七、將當前關鍵幀插入閉環檢測佇列
更新當前關鍵幀的共檢視updateconnections()
a) 遍歷當前關鍵幀的mp,更新共檢視
b) 更新當前關鍵幀的子關鍵幀與父關鍵幀
i. 與當前關鍵幀共視程度最高的幀作為當前關鍵幀的父關鍵幀
ii. 當前關鍵幀設為父關鍵幀的子關鍵幀
若待檢mp被其他幀匹配的次數/觀測到的次數<0.25,則置bad,否則繼續待檢
i. 被匹配到(tracking中increasefound),被觀測到(tracking中increasevisible),
若待檢mp距離被建立經歷了兩個關鍵幀,然而被關鍵幀觀測到的次數較少,則置bad,否則繼續待檢
若待檢mp已經經歷了三個關鍵幀還沒被置bad,則從待檢佇列中刪除
獲取當前關鍵幀的共視關鍵幀
計算當前關鍵幀與共視關鍵幀的基礎矩陣
極線約束搜尋特徵點searchfortriangulation
i. 遍歷當前關鍵幀的特徵點
ii. 通過bow加速當前關鍵幀特徵點p1與共視關鍵幀的特徵點p『匹配
iii. 匹配後進行極線檢測
1. p1*f12 為 pkf上的極線方程
2. 檢驗匹配特徵點p『到極線的距離是否小於閾值從而判斷是否匹配成功
3. 根據旋轉角剔除誤匹配
比較θ
3\theta_
θ3與max(
θ1,θ
2)\max \left(\theta_, \theta_\right)
max(θ1
,θ2
)關係若θ
3>
max(θ
1,θ2
)\theta_>\max \left(\theta_, \theta_\right)
θ3>
max(θ1
,θ2
),則利用兩幀恢復mp
若θ
3<
max(θ
1,θ2
)\theta_
θ3<
max(θ1
,θ2
),則利用1幀恢復mp
ii. 利用線性三角化恢復特徵點3d座標,方法見直接線性變換法(dlt)在slam中的應用
iii. 重投影檢測mp座標是否準確
iv. 檢測mp在兩幀下的尺度是否連續
當前關鍵幀mp與共視關鍵幀mp相互融合
i. 將當前關鍵幀mp與共視關鍵幀mp相互重投影進行匹配
ii. 若匹配上的特徵點有對應的mp則替換,若沒有則新增
更新當前關鍵幀的mp屬性
i. 平均觀測方向、描述子、最大最遠觀測距離
更新當前關鍵幀的共檢視
該執行緒中區域性ba與tracking中不同,
i. tracking中只利用跟蹤而來的mp找共檢視進行ba
ii. 此執行緒中是在mp融合後找到更多共檢視後才進行ba
iii. 該執行緒也優化mp,tracking中是pose-only ba
構造圖模型
i. 頂點: 1級鄰接關鍵幀的mp+能觀測到1級鄰接關鍵幀mp的所有關鍵幀
ii. 邊:mp和pose之間新增邊
優化策略:
i. 分幾輪優化,每輪優化後利用卡方分布檢查outlier,outlier不參與下次優化
ii. 使用魯棒核函式
更新區域性關鍵幀pose和1級鄰接關鍵幀mp屬性
遍歷當前關鍵幀的1級鄰接關鍵幀
若1級鄰接關鍵幀中90%以上的mp都能被其他至少3個關鍵幀觀測到,則刪除該關鍵幀
ORB SLAM2 定位模式
void load const string filename,systemsetting mysystemsetting,keyframedatabase mpkeyframedatabase 別忘了新增標頭檔案和命名空間中的類宣告。同樣,需要在map.cc檔案中修改load 函式。laod 函式...
ORB SLAM2詳解(四)跟蹤
這一部分是orb slam系統中最基本的一步,會對每一幀影象進行跟蹤計算。tracking執行緒執行在主線程中,主要思路是在當前幀和 區域性 地圖之間尋找盡可能多的對應關係,來優化當前幀的位姿。每次新採集到一幀影象,就是用下列介面將影象傳入slam系統就行處理。該 位於主程式中 pass the i...
ORBSLAM2 載入資料集
ifstream是操作檔案的輸入流類。建立乙個讀取檔案的fassociation物件。ifstream open的宣告為 void open const char filename,ios base openmode mode ios base in 需要乙個char 型的指標,strassocia...