前言:ORB SLAM共有兩個(gè)版本,其中發(fā)表于2015的《ORB-SLAM:a Versatile and Accurate Monoculor SLAM System》詳細(xì)介紹了單目ORB-SLAM的系統(tǒng)組成和算法流程。而與2017年發(fā)表的《ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras》則是在前一版本的基礎(chǔ)上增加了雙目立體視覺(jué)和深度相機(jī)的ORB-SLAM 實(shí)現(xiàn),總體框架與前一版本基本一致,因此本文主要介紹ORB-SLAM v1。
orb slam 文獻(xiàn)《ORB-SLAM:a Versatile and Accurate Monoculor SLAM System》
開(kāi)放源碼:?github
orb slam 2 文獻(xiàn)《ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras》
開(kāi)放源碼??github
ORB-SLAM 論文解析
0、系統(tǒng)總體框架

簡(jiǎn)述:
1.兩個(gè)重要模塊 BoW (bags of words) Place Recognition ,Map;
2.三個(gè)并行線程:Tracking 線程,Local Mapping 線程,Loop Closing 線程。
1、BoW Place Recognition 模塊
????這個(gè)模塊主要包括離線訓(xùn)練獲得的視覺(jué)詞匯表和增量式數(shù)據(jù)庫(kù)。視覺(jué)詞匯表是基于DBoW2庫(kù)訓(xùn)練得到的,針對(duì)不同的視覺(jué)場(chǎng)景,需要提前訓(xùn)練獲得包含盡可能多的視覺(jué)詞匯。識(shí)別數(shù)據(jù)庫(kù)則是建立起特征點(diǎn)ORB描述子與能夠看見(jiàn)這個(gè)特征點(diǎn)的關(guān)鍵幀之間的逆檢索對(duì),本文中的識(shí)別數(shù)據(jù)庫(kù)在搜索特征點(diǎn)匹配對(duì)時(shí)發(fā)揮了較大作用,主要用于重定位,閉環(huán)檢測(cè)和插入新的地圖點(diǎn)步驟中。
2、Map 模塊
Map Points: 地圖點(diǎn),即經(jīng)過(guò)單目視覺(jué)的深度估計(jì),然后進(jìn)行優(yōu)化之后的 3D 空間點(diǎn),如果后續(xù)工作需要使用 ORB-SLAM 產(chǎn)生的地圖(當(dāng)然這種稀疏地圖好像除了定位也沒(méi)有什么太大用處),這個(gè)地圖點(diǎn)是重要產(chǎn)物。在Map Point 中主要包含以下信息:
地圖點(diǎn)在世界坐標(biāo)系(起始幀對(duì)應(yīng)的相機(jī)坐標(biāo)系)中的三維坐標(biāo)Xw,i
觀測(cè)方向ni,即所有能觀測(cè)到該地圖點(diǎn)的關(guān)鍵幀對(duì)應(yīng)的相機(jī)光心與該地圖點(diǎn)連線的單位平均向量
最佳描述子Di,與該地圖點(diǎn)對(duì)應(yīng)的ORB描述子中海明距離最短的描述子
該點(diǎn)能被觀測(cè)到的最近距離dmin和最遠(yuǎn)距離dmax
KeyFrames:關(guān)鍵幀,為了減少優(yōu)化的計(jì)算量(以及地圖點(diǎn)的數(shù)量),ORB-SLAM 對(duì)普通的視頻幀進(jìn)行篩選,得找數(shù)量較小,質(zhì)量較高(冗余特征點(diǎn)少)的關(guān)鍵幀,只有這些關(guān)鍵幀才能進(jìn)入局部地圖和閉環(huán)檢測(cè)的線程中,這是ORB-SLAM之所以能夠在普通CPU上運(yùn)行的重要原因(當(dāng)然也是地圖稀疏的主要原因)。關(guān)鍵幀中主要包含以下信息:
相機(jī)位姿Tiw(從世界坐標(biāo)系到當(dāng)前關(guān)鍵幀的變換)
相機(jī)內(nèi)參,焦距,光心位置
所有特征點(diǎn)的ORB描述子,是否與地圖點(diǎn)匹配
?Co-visibility Graph , Essential Graph, Spanning Tree:所謂共視,是指相機(jī)在兩個(gè)位姿下(兩個(gè)相機(jī))觀測(cè)到了同一個(gè)地圖點(diǎn)。而共視圖則是一種無(wú)向有權(quán)圖,以相機(jī)(關(guān)鍵幀)的姿態(tài)為圖節(jié)點(diǎn),節(jié)點(diǎn)之間是否存在邊(相連),則是依據(jù)這兩個(gè)節(jié)點(diǎn)是否是共視節(jié)點(diǎn),邊的權(quán)重則是相連節(jié)點(diǎn)間共視的地圖點(diǎn)個(gè)數(shù)。本文在共視圖中判斷兩個(gè)關(guān)鍵幀是否是共視的依據(jù)是:共視的地圖點(diǎn)至少為15個(gè)。Spanning Tree則只保留每個(gè)節(jié)點(diǎn)與其他節(jié)點(diǎn)有最多共視地圖點(diǎn)的邊。 而Essential Graph本質(zhì)上也是共視圖,只不過(guò)判斷共視的依據(jù)是:共視的地圖點(diǎn)至少為100個(gè),在此基礎(chǔ)上再加上Spanning Tree。因此,就地圖規(guī)模而言,共視圖最大,Essential Graph次之,Spanning Tree 最小。
3、地圖自動(dòng)初始化
????這個(gè)“自動(dòng)”,指的是ORB-SLAM系統(tǒng)會(huì)根據(jù)不同的初始條件(特征點(diǎn)共面或接近共面,視差小歸為一類(lèi),其他情況歸為另一類(lèi)),自動(dòng)選擇是采用單應(yīng)性矩陣進(jìn)行運(yùn)動(dòng)恢復(fù)(計(jì)算初始相機(jī)位姿),還是使用基礎(chǔ)矩陣進(jìn)行運(yùn)動(dòng)恢復(fù)。由于單目視覺(jué)系統(tǒng)無(wú)法直接獲取特征點(diǎn)的深度信息,所以在系統(tǒng)運(yùn)行的初始階段,需要依靠對(duì)極約束和單應(yīng)性約束進(jìn)行運(yùn)動(dòng)恢復(fù),才能對(duì)特征點(diǎn)進(jìn)行跟蹤(Tracking線程)。流程圖如下:
