一、跟蹤模塊簡介
在ORB-SLAM或其他SLAM系統中,跟蹤的主要任務是根據相機或視頻輸入的圖像幀實時輸出相機位姿。在ORB-SLAM中,跟蹤模塊的主要任務是實時輸出相機位姿和篩選關鍵幀,完成一個沒有經過優化或者說全局優化的視覺里程計。通常根據相機的不同采用的方法也不相同,如單目除了需要進行初始化外通常根據特征匹配結果使用PnP算法求解相機位姿。
二、跟蹤模塊分析
如圖 是ORB-SLAM跟蹤模塊的技術流程圖
其流程為首先獲取第一張彩色圖像,然后轉為灰度圖,提取ORB特征,通常第一幀會構建為關鍵幀;
然后進入跟蹤過程(以單目為例),如果沒有初始化則會進入自動初始化模塊:定義參考幀和當前幀,提取ORB特征,進行特征匹配,然后分別計算單應矩陣和基礎矩陣(雙線程),使用H,F的判別模型判斷在當前環境下使用哪個模型進行位姿求解,最后使用對應的求解方法求解H或F矩陣獲取相機初始位姿,並使用三角測量計算匹配特征點的深度信息,獲得3D點;
ORB-SLAM中關於跟蹤狀態有兩種選擇(1)只進行跟蹤不建圖(2)同時跟蹤和建圖,這里以(2)為例。初始化之后ORB-SLAM有三種跟蹤模型可供選擇,首先假設相機恆速(即Rt和上一幀相同),然后計算匹配點數(如果匹配足夠多則認為跟蹤成功),如果匹配點數目較少,說明恆速模型失效,則選擇參考幀模型(即特征匹配,PnP求解),如果參考幀模型同樣不能進行跟蹤,說明兩幀鍵沒有相關性,這時需要進行重定位,即和已經產生的關鍵幀中進行匹配(看看是否到了之前已經到過的地方)確定相機位姿,如果重定位仍然不能成功,則說明跟蹤徹底丟失,要么等待相機回轉,要不進行重置;
假如通過一種模型完成了初始相機的位姿估計,則進一步跟蹤局部地圖,即和當前幀相關聯的地圖點做聯合優化,獲得一個較為准確的相機位姿;
輸出相機位姿說明跟蹤過程已經完成,下面就是根據一定的判定條件判斷當前幀是否可以作為關鍵幀輸出,判定關鍵幀的條件一般為距上一關鍵幀過去了多少幀,和上一關鍵幀之間的匹配點的數量等。
三、跟蹤模塊總結
從上面的流程可以看出,如果想進一步提升跟蹤的速度,第一是從ORB特征的提取和建立描述符入手,第二是從局部地圖跟蹤入手,而相機初始位姿估計可能優化的余地不是很大。
后面想根據代碼具體談一談跟蹤過程的實現方式。