ORBSLAM2之LocalMapping執行緒

2021-10-07 14:01:43 字數 2079 閱讀 2920

一、 處理新關鍵幀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...