ORB-SLAM: A Versatile and Accurate Monocular SLAM Syetem 講解 1

ORB-SLAM: A Versatile and Accurate Monocular SLAM Syetem 講解 1 轉自http://blog.csdn.net/c602273091/article/details/54348202謝謝博主

轉載請註明:http://blog.csdn.net/c602273091/article/details/54348202

對該論文進行講解,同時看看自己有什麼不懂的地方。

摘要

ORB-SLAM是一種基於特徵的稀疏法的視覺SLAM,它不僅僅可以用於單目,還可以用於雙目、RGBD(其實能夠用於單目的一般都能夠用於雙目,單目的做法就是把連續的幾幀串了起來,假設汽車的速度不變,那麼連續兩幀不就是可以看做雙目了麼?)

ORB-SLAM可以實時運行,看ORB-SLAM的官網,你可以看到它們做到了手機上。ORB-SLAM魯棒性很高,可以在室內外,大小環境中都有較好的表現。與此同時,ORB-SLAM可以在運動劇烈的環境中工作,它可以檢測出較大的閉環,在追蹤丟失以後,它可以重新計算位姿,而且可以自動初始化(不像PTAM需要手動選兩張圖片初始化)

這篇論文可以看做是這幾年來做視覺SLAM稀疏法(特徵法)算法的集大成者,而且作者優美的代碼,給這個工作增色不少。整個SLAM系統採用了多線程,分成了追蹤、建圖、重定位(Relocalization)、閉環檢測。在這個SLAM裏面,作者又增加了不少小技巧,來選擇關鍵點(在3D中你可以叫它點雲)和關鍵幀來進行數據去冗餘,(不去除冗餘的話,你試試跑幾個小時的數據,那是驚人的,更不用說你要跑辣麼久)同時使得這種方法會使建的圖更加精確。作者在kitti上測試了ORB-SLAM,說他的ORB-SLAM是單目中最牛叉的。而我看到的是ORB-SLAM2上面顯示是雙目的呀,另外SVO2可是超過你了呀,SVO2是直接法裏面最牛叉的了吧?
這裏寫圖片描述

關鍵詞: 超長期建圖、定位、單目視覺、識別、SLAM。

介紹

Bundle Adjustment(BA)是一種估計相機位姿和幾何重建常用的工具,但是長期以來在實時的視覺SLAM裏面用這個被認爲是一種不現實的事情。視覺SLAM的任務是估計相機位姿和建圖,用BA再合適不過了。作者知道了爲了達到較高的正確率,在非概率性的計算代價下(之前很多SLAM用的濾波法,計算的代價就是概率的代價)。我們需要給BA(g2o)提供以下數據:

1、將觀測到的特徵點和關鍵幀聯繫起來(要知道特徵點對應的是那幾幀);
2、關鍵幀越來越多,需要剔除冗餘;
3、關鍵幀和關鍵點的網絡具有很好的配置(就是graph-slam優化的時候參數設置,關鍵點選多少,關鍵幀多少幀取一幀合適)
4、初始化關鍵幀的位姿和關鍵點位置,用於非線性優化;
5、局部圖的優化關注在於取得可擴展性;
6、快速的閉環檢測,最好實時。

ORB-SLAM一直被認爲是PTAM的改進版,因爲PTAM提出的關鍵幀選取、特徵匹配、特徵點的三角化、相機位姿計算、重定位、多線程等等都被ORB-SLAM吸取。但是PTAM沒有閉環檢測、沒有自動初始化等等。ORB-SLAM對此進行了改進和增加。

這篇論文的貢獻在於:
1、所有步驟都是採樣一樣的特徵:ORB特徵。2、可以在大的環境中使用,這就是很多公司想做的高精度地圖吧。這得益於covisibility-graphy的使用,這種圖使得建圖的時候可以先建立局部圖(俗稱map partition),再合併。3、在做閉環檢測的時候,使用的就是essential graph(我覺得這個就是對總的covisibility graph進行一個精簡,成爲最小生成樹);4、魯棒性高,因爲關照影響暫時不能使用,之後又可以重新定位回來。5、新的自動初始化技巧,可以在平面和非平面的情況下使用;6、一系列技巧用於提高魯棒性和去除冗餘。

聽起來真棒,具體怎麼做的呢?

相關工作

地點識別

之前說到了ORB-SLAM在PTAM上增加了閉環檢測,那麼我們就需要進行圖片比較,來確定是不是經過了同一個地方。閉環匹配呢有圖片到圖片的匹配,有圖片到地圖的匹配,也有地圖到地圖的匹配。目前來看,圖片到圖片的匹配精度最高了。所以ORB-SALM使用的就是圖片到圖片的匹配。

在匹配的時候,這裏用到了DBoW2的一個庫,這個庫就是做兩幅圖片匹配,計算相似度的。原本用到的特徵是fast特徵,BRIEF描述子。但是BRIEF不像SURF、SIFT那樣具有大小、方向不變性。所以作者提出了一種具有方向(Oriented)的BRIEF特徵——ORB。作者使用的是DBoW2的庫,使用ORB特徵進行圖片匹配,進而做閉環檢測。在這裏,需要說一下DBoW2的原理,它首先是對大量圖片提取出visual word,然後使用k-shift進行特徵聚類,就有了字典,然後我們描述一幅圖片的時候,就用visual word進行描述,通過對比不同圖片之間visual word的“距離”大小,我們就得到了它的相似度。(具體細節看Bags of binary words for fast place recognition in image sequences)在速度上的話,因爲BRIEF是二進制,操作相當快。10k的圖片的匹配少於39ms。具體在ORB-SLAM裏面,作者有很聰明的地方,他不僅僅是看最高的匹配度,還有匹配的兩幅圖片的連續那幾副的匹配程度來決定最後的閉環檢測結果。

地圖初始化

一種是濾波法,初始化的位置有很大的不確定性,後面就是越來越高的置信度。目前半稠密的方法就用到了這種初始化方法。還有的就是假設初始化的位置是平面的,用homography或者是五點法求關鍵矩陣(essential matrix)但是在非平面情況下呢?這裏就使用8點法計算fundamental matrix(這些東西都在MVG裏面)

所以呢作者就根據一種啓發的方式選擇使用的模型是用於平面還是非平面。在大多數情況下,更傾向於選擇平面模型。

單目的SLAM

單目SLAM有filter-based和key frame-based兩大類。filter-based計算冗餘度大,而且容易誤差累計。key frame-based(基於關鍵幀)的方法,更容易進行BA,可以進行局部圖的優化。

PTAM是第一個使用多線程的,使用於AR。但是它的閉環檢測能力較差,對不同視角看同一個物體的魯棒性低。所以作者使用7DoF的相似度約束於閉環檢測中,然後可以檢測大的環。

LSD-SLAM和SVO分別是稠密法和半稠密法的代表,它們一個是定位不準確、一個是沒有閉環。發現ORB-SLAM特別喜歡拿loop closure。它真是一個巨無霸,非常完整。

系統概述

千言萬語不如底下這幅圖清楚:
這裏寫圖片描述

特徵選擇

最好是在追蹤、閉環檢測都可以用到。最好速度要快(排除SIFT、SURF、A-KAZE)、最好可以scale invariant、最好方向invariant(排除BRIEF、LDB) 然後差不多隻有ORB了。ORB就是有方向的BRIEF。

三線程結構

三個線程:追蹤、局部地圖構建、閉環檢測。

追蹤就是前端部分,提取ORB特徵,計算攝像頭位姿、判別何時插入關鍵幀。最開始的特徵匹配是和前面的幀匹配,優化的方法是motion-only BA。 如果追蹤丟失的話,那麼追蹤模塊就啓動全局重定位。把當前的圖片和之前的所有關鍵幀做一個比較,期待可以找到相似的進行重新定位。這個時候就用到了place recognition。

當進來新的一幀,如果相機的位姿初始化和特徵匹配完成的話,局部可見地圖就會進行一個檢索,通過對covisibility graph檢索就可以得到與這一幀有聯繫的局部地圖。然後把這新的一幀的特徵點進行逆映射回之前的關鍵幀,這個時候相機的位姿再次優化。最後,Tracking部分決定是否要插入新的關鍵幀到局部地圖中。插入新的關鍵幀之後,就進行local BA進行優化。對新插入的關鍵幀上的新的特徵點會進行一個exigent point culling的操作來去除低質量的特徵點。同時,局部地圖這個線程會進行局部關鍵幀剔除的工作以減少冗餘。

閉環檢測這部分會運行,只有新的一幀插入的時候。如果有環檢測到,那麼就是用Sim3優化。在檢測到環的時候,會有一個essential graph(是covisibility graph的最小生產樹)

文中的圖優化使用的是g2o這個工具,算法是LM。

點雲、關鍵幀的選取

每個點雲的組成:pi
1、3D座標Xw,i 在世界座標的表示;
2、視角:ni
3、ORB的描述子:Di 這個是與其它對同一點雲比較而言,距離最近的一個描述子。
4、該點雲可以被觀察到的最大dmax, 根據的是ORB特徵的尺寸不變約束。

每個關鍵幀Ki的組成:
1、相機位姿:Tiw,是真是世界座標到相機座標的一個剛體旋轉;
2、相機內參(焦距和Principal point)
3、該幀上所有的ORB特徵。

這些點雲和關鍵幀的生產都是比較寬鬆的,因爲後期會有嚴格的去除冗餘的操作。

covisibility graph和essential graph

在建圖的過程中,每個關鍵幀可以看成一個節點,每條邊就是它們都可以看到的點雲。權重就是可以看到的點雲的個數,點雲個數要大於15,就連一條邊。

但是covisibility graph會太稠密了,存儲的信息很多。essential graph就是cg的壓縮版本。eg的邊就是觀測到最多點雲的集合。eg的閾值就是100。用eg做full BA就會有很高的精度。

DBoW2

可以用於重定位和閉環檢測。

離線製作visual word的字典,然後使用。

使用閉環檢測的時候,使用多covisibility graph的相鄰幀進行匹配,高於75就算檢測到閉環。在進行比較的時候,作者使用了一種字典樹進行快速的暴力匹配。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章