ORB-SLAM2:一種開源的VSLAM方案(譯文)

摘要:前端

   ORB-SLAM2是基於單目,雙目和RGB-D相機的一套完整的SLAM方案。它可以實現地圖重用,迴環檢測和從新定位的功能。不管是在室內的小型手持設備,仍是到工廠環境的無人機和城市裏駕駛的汽車,ORB-SLAM2都可以在標準的CPU上進行實時工做。ORB-SLAM2在後端上採用的是基於單目和雙目的光束法平差優化(BA)的方式,這個方法容許米制比例尺的軌跡精確度評估。此外,ORB-SLAM2包含一個輕量級的定位模式,該模式可以在容許零點漂移的條件下,利用視覺里程計來追蹤未建圖的區域而且匹配特徵點。git

   咱們用29個普遍使用的公共數據測試的結果顯示,在大多數狀況下,本文方案比此前方案精度更高,此外,咱們開源了ORB-SLAM2源代碼,不只僅是爲了整個SLAM領域,同時也但願可以爲其餘領域研究者提供一套SLAM的解決方案。github

引言:算法

  SLAM(同時定位與地圖重建)在過去的20年中,一直是計算機視覺和機器人領域的熱門話題,同時也吸引了不少高科技公司的關注。SLAM技術是在未知的環境當中創建一個地圖而且可以在地圖當中實時的定位。在不一樣類型的傳感器當中,相機十分廉價,而且可以提供豐富的環境信息,受到研究者的青睞。相機提供的圖像信息能夠用做魯棒的和精確的位置識別。位置識別是SLAM系統中迴環檢測的關鍵模塊(例如,當傳感器檢測到一個已經建好圖的位置的時候,能夠進行修正在探索過程當中的偏差)以及,可以修正因爲劇烈的震動或者在系統進行初始化的時候在相機跟蹤失敗後的從新定位。所以以相機爲核心的視覺SLAM在過去的一年中獲得快速的發展。 數據庫

   視覺SLAM僅僅經過一個單目相機就可以完成。單目相機也是最便宜也是最小巧的傳感器設備。然而深度信息沒法從單目相機中觀測到,地圖的尺度和預測軌跡是未知的。此外,因爲不能從第一幀當中進行三角測量化,單目視覺SLAM系統的啓動每每須要多個視角或者濾波技術才能產生一個初始化的地圖。最後,單目SLAM可能會形成尺度漂移,以及在探索的過程當中執行純旋轉的時候可能會失敗。經過使用一個雙目或者RGB-D相機將會解決這些問題,而且可以成爲一種更加有效的視覺SLAM的解決方案。後端

   在這篇文章當中,咱們在單目ORB-SLAM[1]的基礎上提出ORB-SLAM2,有如下貢獻:微信

    1. 這是首個基於單目,雙目和RGB-D相機的開源SLAM方案,這個方案包括,迴環檢測,地圖重用和重定位。多線程

    2. 咱們的RGB-D結果說明,光速法平差優化(BA)比ICP或者光度和深度偏差最小方法的更加精確。框架

    3. 經過匹配遠處和近處的雙目匹配的點和單目觀測,咱們的雙目的結果比直接使用雙目系統更加精確。ide

    4. 針對沒法建圖的狀況,提出了一個輕量級的定位模式 ,可以更加有效的重用地圖。

(a)雙目輸入:帶有屢次迴環檢測的城市環境軌跡和稀疏重建

(b) RGB-D輸入:房間關鍵幀和稠密點雲已經一次迴環檢測圖,這些點雲經過對深度圖的關鍵幀的位姿進行映射獲得,不進行渲染(融合)

圖1 是ORB-SLAM2處理雙目和RGB-D輸入評估相機的軌跡並建圖。這個系統可以保證在高精度和魯棒性的前提下,作到在標準CPU上進行實時的,迴環檢測,重定位以及地圖重用。

 圖a中顯示的是雙目和RGB輸入下的ORBSLAM2的輸出。雙目例子顯示的是最後軌跡和稀疏重建的地圖。這裏的數據集來源於KITTI的Sequence00數據集。這個城市數據集是ORB-SLAM2屢次成功提取特徵,而且迴環檢測而來。

  RGB-D例子是來源於TUM 的RGB-D 數據庫中的fr1_room的數據集,而且進行關鍵幀的位姿評估而來。經過評估關鍵幀的位姿,映射深度圖,最終造成一個稠密的點雲圖。指的注意的一點是,ORB-SLAM2雖不像Kinect Fusion同樣進行數據融合,可是卻可以很精確的估計關鍵幀的位姿。更多的例子在附件視頻中展現。在餘下的篇章當中,咱們將會在第二部分討論相關的工做。在第三部分談論ORB-SLAM2系統框架。第四部分評價ORB-SLAM2,第五部分得出結論。

2、相關工做

在這個章節,咱們將會討論雙目和RGB-D SLAM的相關工做。評估部分咱們放在第四部分,本章咱們主要討論的是SLAM的方法。

2.1雙目SLAM

最先研究雙目SLAM方案的是Paz 等人[5],基於條件獨立分割和擴展SLAM,其顯著特色是可以在大場景中運行。更重要的是,這是第一個使用近特徵點和遠特徵點(例如,因爲雙目相機差別較小,致使點的深度不能準確的估計)的雙目SLAM系統,使用一個逆深度參數進行估計。經驗值代表若是深度小於40倍雙目的基線,那麼這個點就能被三角測量化。咱們就是跟隨的這樣思想來處理遠近不一樣的特徵點,具體解釋放在第三部分。

       目前大多數雙目系統都是基於特徵匹配和局部BA優化的方式,來得到尺度。Strasdat等人[8]採用在一個輸出窗口的關鍵幀[7]和位姿的BA聯合優化算法。在全局不一致性的狀況下,經過限制窗口的大小的方式,實現了約束了時間的複雜程度的目的。Mei等人[9]在限定時間複雜度的條件下,使用路標和位姿相關性的方式的實現了RSLAM解決方案,而且提出和實現了在活動的區域的BA優化算法。即便在全局不一致的條件下,RSLAM也可以進行閉環,同時會擴大回環兩側的活動區域。

       Pire等人[10]把局部的BA運用到了鄰近S-PTAM上面來,可是,這種方法缺乏大量的迴環檢測。與此類似的是,咱們對局部關鍵幀採用BA優化,所以,這個地圖的大小和複雜程度的大小是獨立的,進而,咱們能夠在一個大場景當中運行。然而,咱們目標是創建一個全局不變的地圖。所以,咱們的系統首先在迴環的兩端執行。這與RSLAM很類似,以便於可以使用舊的地圖進行定位,以後進行位姿估計,即將回環產生的累積漂移最小化。

       Engel等人[11]提出鄰近雙目LSD-SLAM方案,採用的是一種直接的半稠密方法,最小化高梯度的圖像區域中的光度偏差。這種方法但願可以在不依賴特徵提取的條件下,可以在紋理不清或者模糊運動的過程當中得到更高的魯棒性。然而,直接法的性能會因爲滾動(捲簾)快門,或者非朗伯反射的未建模的因素影響而降低。

2.2 RGB-D SLAM

最先和最著名的RGB-DSLAM系統是有Newcombe等人[4]提出的KinectFusion,這種方法將深度數據進行融合,深度數據來源於傳感器到深度模型,經常使用ICP算法來跟蹤相機的位姿。因爲體積的表現形式和缺少迴環檢測,這種算法只能工做在小的工做空間。Whelan 等人[12]提出的Kintinuous可以在大環境中運行。它經過使用一個滾動循環緩衝器和包括使用位置定位和位姿優化來達到迴環檢測的目的。

第一個開源的RGB-DSLAM方案是由Endres[13]提出的,這是一種基於特徵點提取的系統,他的前端採用提取和匹配特徵點和ICP來計算幀與幀之間的運動。

後端採用位姿圖優化的方式,迴環檢測約束條件來源於一個啓發式搜索。類似的是,Kerl 等人[14]提出的DVO-SLAM,是在關鍵幀與關鍵幀之間的優化位姿圖,視覺里程計經過計算最小化光度和深度偏差來計算約束條件。DVO-SLAM同時在之前的全部幀當中,搜索迴環的候選者,而不依賴於位置識別。

  Whelan等人[15]提出的鄰近ElasticFusion算法,是創建在基於肯定環境的地圖。這是一種以地圖爲中心的方法。這種方法忽略了非剛性形變地圖的位姿和迴環檢測的性能,也是否是一個標準的位姿圖優化。這種方法在重建和定位的精度都是十分優秀的,可是目前的應用十分有限對於一個房間大小的地圖,因爲在地圖當中面元的數量影響計算的複雜程度。

Strasdat等人[8]提出ORB-SLAM2這種方法,這個方法使用深度信息去合成一個三維座標,可以精確的提取到一副圖像的信息。ORB-SLAM2可以處理來自雙目和RGB-D的圖像,與上述方法不一樣的是,咱們的後端是用的BA算法,來創建一個全局的稀疏的地圖重建,所以咱們的方法更加輕量級而且可以在標準的CPU上面運行。咱們的目標是長時間而且全局精準定位,而不是創建一個有不少細節的稠密地圖。然而,高精度的關鍵幀的位姿,可以融合深度圖像以及在計算中獲得精準的重建,或者可以處理全部的關鍵幀和深度圖,以及全部的BA而且獲得一個精準的3D模型。

3、ORB SLAM2

針對雙目相機和RGB-D相機的ORB-SLAM2創建在單目ORB-SLAM的基礎上,它的核心組件,如圖2所示。

圖2 ORB-SLAM2由三個平行的線程組成,跟蹤,局部建圖和迴環檢測。在一次迴環檢測後,會執行第四個線程,去執行BA優化。跟蹤的線程在雙目或者RGB-D輸入以前進行,所以剩下的系統模塊可以跟傳感器模塊獨立運行。單目的ORB-SLAM2工做圖也是這幅圖。

這個系統主要有3個並行的線程:

        一、經過尋找對局部地圖的特徵,而且進行匹配,以及只運用BA算法來最小化重投影偏差,進行跟蹤和定位每幀的相機。

        二、運用局部的BA算法設置局比地圖而且優化。

        三、迴環檢測檢可以經過執行位姿圖的優化來更正累計漂移偏差。在位姿優化以後,會啓動第四個線程來執行全局BA算法,來計算整個系統最優結構和運動的結果。

這個系統是一個基於DBoW2[16]的嵌入式位置識別模型,來達到重定位,防止跟蹤失敗(如遮擋),或者已知地圖的場景重初始化,和迴環檢測的目的。這個系統產生關聯可見的圖[8],鏈接兩個關鍵幀的共同點,鏈接全部關鍵幀的最小生成樹方面。這些關鍵幀的圖結構可以獲得一個關鍵幀的局部的窗口,以便於跟蹤和局部建圖,而且在大型的環境當中的迴環檢測部分,做爲一種圖優化的結構。

        這個系統使用相同的ORB特徵進行跟蹤,建圖和位置識別的任務。這些特徵在旋轉不變和尺度不變性上有良好的魯棒性,同時對相機的自動增益,曝光和光線的變化表現出良好的穩定性。而且可以迅速的提取特徵和進行匹配,可以知足實時操做的需求,可以在基於詞袋的位置識別過程當中,顯示出良好的精度[18]。

        在本章的剩下的部分當中,我將會展現雙目或者深度信息是如何利用,和到底會影響系統中的那些部分。對每一個系統塊更詳盡的描述,可參見論文[1]

3.1 單目、近處雙目和遠處雙目特徵點

ORB-SLAM2做爲一種基於特徵提取的方法,在一些關鍵的位置上的提取進行預處理,如圖2b所示,系統的全部運行都是基於輸入圖像的特徵展開,而不依賴於雙目或者RGB-D的相機。咱們的系統處理單目或者雙目的特徵點,分紅遠處特徵點和近處特徵點兩類。

        雙目特徵點 經過三個座標定義當中,是這個左邊圖像的座標,是右圖當中的水平座標。對於雙目相機而言,咱們提取兩幅圖像當中的ORB特徵,對於每一個左邊的ORB特徵咱們對其匹配到右邊的圖像中。這對於建設雙目圖像校訂十分有效,所以極線是水平的。以後咱們會在左邊的圖像產生雙目的ORB特徵點,和一條水平的線向右邊的圖像進行匹配,經過修補相關性來從新定義亞像素。對於RGB-D相機,正如Strasdat等人[8]所言,咱們提取在圖像通道上提取ORB特徵點,。咱們將深度值和已經處理的深度地圖,和基線在結構光投影器和紅外相機進行匹配,對每一幀的圖像與右邊圖像的座標系進行融合。這是kinect和華碩 Xtion 精度大約是8cm。

       近雙目特徵點的定義是:匹配的深度值小於40倍雙目或者RGB-D的基線,不然的話,是遠特徵點。近的特徵點可以從一幀的深度值可以三角測量化,是精確的估計,而且可以提供尺度,平移和旋轉的信息。另一方面,遠的特徵點,可以提供精確的旋轉信息,可是不多的尺度和平移信息。當提供多視圖的時候,咱們才能三角化那些遠的點。

        單目的特徵點經過右邊圖像的兩個座標當中的定義,必須保證全部的ORB特徵是一致的,不然雙目特徵點的提取將不可以完整,或者在RGB-D的狀況下,有產生一個無效的深度值。這些點僅可以從多視圖中三角測量化而且不可以提供尺度信息,可是能夠提供旋轉和平移的估計信息

3.2 系統引導

        使用雙目和RGB-D相機的主要優點在於,咱們能夠直接得到深度信息,咱們不須要像單目狀況中那樣作一個特定的SFM初始化。在系統初始化的時候,咱們就創造了一個關鍵幀(也就是第一幀),將他的位姿進行初始化,從全部的立體點中創造一個初始化地圖。

 

3.3 使用單目或者雙目光束優化法

        咱們的系統採用光束優化法(BA),優化在跟蹤過程(純運動BA)中相機的位姿,優化本地窗口的關鍵幀和局部地圖的特徵點(局部BA),而且在迴環檢測以後優化全部的關鍵幀和特徵點(全局BA)。咱們在g2o當中使用Levenberg-Marquadt方法[19]。

 

        純運動BA,優化相機旋轉矩陣和位置,最小化世界座標系下匹配3D點雲特徵點(單目的或雙目的,其中)的重投影偏差:

        在這個式子當中,是強健的Huber的cost函數,是協方差矩陣,關聯對於特徵點的尺度。這個投影函數,單目的時候使用,修正雙目的時候用,他們的定義以下:

       在這個式子當中是焦距,是主要點(象點),b是基線,全部的這些參數都是經過標定得到。

 

        局部BA 採用一系列可用的關鍵幀和全部在關鍵幀可觀點,全部的其餘關鍵幀是,而不是,觀察當中全部的特徵點用於代價函數,可是在優化中是固定的。定義中關鍵幀k的一系列匹配特徵點,這個優化問題以下:

       全局BA是 局部光束法的一個特例,這個方法除了初始幀全部的關鍵幀和點在地圖當中都會被優化.初始幀是固定的,用來消除隨機化。

 

3.4 閉環檢測和全局BA

        迴環檢測有兩步:首先,一個迴環信息被肯定檢測到,而後利用這個迴環糾正和優化位姿圖。相比於單目的ORB-SLAM中可能出現尺度漂移的地方[20],這個雙目或者深度的信息將會使得尺度信息可觀測。而且,幾何校驗和位姿圖優化將再也不須要處理尺度漂移,並且是基於剛體變換的,而不是基於類似性。

 

        在ORB-SLAM2的位姿優化後,咱們包含一個全局的BA優化,爲了實現一個優化方案,咱們必須採用一個獨立的線程,容許系統可以持續的建圖,而且檢測到迴環信息。可是這將會再次觸發全局BA優化與當前地圖的合成。若是在優化運行時檢測到新的循環,咱們將停止優化並繼續關閉循環,這將再次啓動完整的BA優化。當完整的BA結束時,咱們須要將更新的關鍵幀子集和由完整BA優化的點與未更新的關鍵幀和在優化運行時插入的點合併。最後經過更新更新關鍵幀校訂(例如,這個變換從未優化到已優化)到一個未更新關鍵幀經過生成樹當中。根據校訂參考幀來改造呢些未更新的特徵點。

 

3.5 關鍵幀的插入

        ORB-SLAM2遵循在單目ORB-SLAM中提的法則,即常常插入關鍵幀而且剔除上一幀的冗餘。在遠近特徵點的差別爲咱們插入一個新的關鍵幀提供了條件,這在大場景的條件下是相當重要的,如圖3所示。

圖3 高速公路的跟蹤點。綠色的特徵點深度小於40倍雙目的基線,藍色特徵點大於40倍雙目的基線,在這種數據集當中,須要插入大量的關鍵幀,以便於可以讓近處的特徵點更加精確的估計平移和尺度,遠處的特徵點來估計方向,可是不可以計算平移和尺度。

 

        在這樣的環境中,咱們須要一個大量的近點用以精確估計平移,於是若是這個被跟蹤近點小於而且這個幀將會創造個新鄰近立體點,這個系統將會插入一個新的關鍵幀,咱們經驗值認爲,當的條件下咱們效果最好。

 

3.6 定位模式

        ORB-SLAM2包括一個定位模式,該模式適用於輕量級以及在地圖已知狀況下長期運行,只要那個環境沒有發生劇烈變化。在該模式中,局部建圖和迴環檢測的線程中是停用的,而且這個相機始終都是在經過追蹤進行重定位。在這個模式下,追蹤模塊使用視覺里程計進行匹配圖像的點雲。視覺里程計匹配在當前幀的ORB算子和由雙目或者深度相機收集的3D點雲。這些匹配使得在沒有地圖的區域也可以精確從新定位,可是漂移將會被累加。地圖點雲匹配要確保在一個已經存在的地圖當中零漂移定位,這個模型在附帶的video當中會顯示。

 

IV. 評估

        咱們使用三個著名的數據集來評估ORB-SLAM2的算法的性能。咱們在一臺16G的RAM,Intel Core i7-4790的臺式機運行,以低於傳感器的幀率,對處理跟蹤時間求平均。咱們運行數據集5次,取中間值,來消除多線程系統的不肯定性。咱們開源了在運行這幾個系統的數據集的方法包括標定具體操做實現。

 

4.1 KITTI數據集

        KITTI數據集包含雙目數據,這些數據從一個正在高速公路上行駛的車上採集到的。這個雙目傳感器有個小於54釐米的基線而且在在1392*512像素上,以10Hz的採樣速率進行採樣,其中序列00,02,05,06,和09包含迴環。咱們的ORB-SLAM2可以檢測出迴環而且可以地圖重用,除了09序列之外,09序列的迴環只發生在尾端少數的幾幀當中。表1顯示的這個結果11個訓練數據,這是一個公開的真實數據,對比於原先的LSD-SLAM算法,咱們展現了的雙目SLAM系統測試數據結果。咱們使用兩個不一樣的米制,均方根偏差在論文[3]中提到,而且取平均相關平移和旋轉偏差在論文[2],咱們的系統在大多數序列當中比雙目的LSD-SLAM要優秀不少,而且可以得到的相關偏差低於1%。這個序列01如圖3所示,是一個高速公路的序列,做爲訓練集,以及轉換偏差。轉換偏差是在這個序列當中難以評估的,由於只有幾個很近的點可以被偵測,因爲很高的速度和較低的幀率。然而這個方向可以被精確的評估,得到的偏差是每100米作0.21度。不少較遠的點可以被檢測,如圖4所示,顯示了一些評估的例子。

表1兩種SLAM在測試KITT,I數據的精度對比

圖4 在KITTE數據集01,05,07和08數據集,估計軌跡(黑色線)和以及實際運動(紅色線)

 

4.2 EuRoC 數據集

        EuRoC 數據集包含了11個雙目的序列,經過一個微型飛行器(MAV)採集到的數據,飛行在兩個不一樣的房間和大量的工業環境。這個雙目傳感器有一個小於11cm的基線和可以提供20HZ的WVGA格式的圖像,這個序列分紅,簡單、中等、和困難,這取決於MAV(微型飛行器)的速度,照明和場景的紋理。在全部的序列當中,MAV(微型飛行器)再次訪問這個環境的時候,ORB-SLAM2可以重用地圖,迴環檢測。這個表格2顯示的是ORB-SLAM2的最小均方偏差的絕對值變換,對於全部序列而言。相比較對雙目的LSD-SLAM的結果。

        ORB-SLAM2可以實現一個釐米級精準的定位,而且比雙目的LSD-SLAM更加的精確。跟蹤部分可能會在V2_ 03_ difficul,序列當中跟丟,因爲一些運動模糊。在第22篇論文解釋的狀況,這個序列在處理的過程當中是使用IMU信息,如圖5所示,顯示的一些估計軌跡對真實的世界相比的例子。

圖5 在EuRoC V1_02_medium,V2_02_medium,MH_03_medium和MH_05_數據集測試結果,其中估計軌跡(黑色)實際運動軌跡(紅色)

 

4.3 TUM RGB-D數據集

        TUM RGB-D數據集包含一些室內的序列,在不一樣的紋理下,不一樣的光照和不一樣的結構條件,從RGB-D傳感器採集到的數據中分別去評估物體的重建和SLAM/視覺里程計的性能。和大多數RGB-DSLAM方法同樣,咱們將實驗結果展現在一個序列子集當中,在表格3當中,咱們比較咱們的精準性和其餘方法,例如ElasticFusion,Kintinuous,DVO-SLAM以及RGB-DSLAM,ORB-SLAM2是惟一一種基於光束流差法,而且比其餘的方法都更加優秀。咱們已經注意到RGB-DSLAM,深度地圖對於freiburg2序列有一個4%的尺度偏差,偏差可能來自錯誤的標定,咱們已經在運行過程當中,進行了必定程度的補償。這可以部分解釋咱們取得好的結果的緣由。圖6顯示的點雲的結果來源於後端映射的傳感器深度的地圖,從計算關鍵幀的位姿在四個序列當中。實驗的結果顯示,ORB-SLAM2很好的展現了桌子和海報的輪廓線,以及高精度的重定位。

圖6 TUM RGB-D數據的fr3office, fr1 room, fr2 desk and fr3 nst 序列的經過評估關鍵幀的位姿和深度圖進行稠密的點雲重建圖

 

V. 結論

        本文呈現了一個基於於單目,雙目和RGB-D傳感器的完整SLAM框架,在實時和標準的CPU的前提下可以進行從新定位和迴環檢測,以及地圖的重用。在實驗當中,咱們關心的是在大場景中創建可用的地圖和長期的定位。與此前的SLAM方案進行對比,在大多數的狀況下,ORB-SLAM2展示出同樣好的精確程度。

 

        值得注意的是,咱們的RGB-D實現的結果顯示,若是相機的定位精度更好,那麼BA將會比直接法或者ICP的方法更好,將會減小一些額外的計算量。咱們開放了咱們系統的源碼,和一些例子和指導,以便於可以更加方便爲其餘研究者而使用。將來的方向可能包含,測試更多的序列,多視角相機,魚眼相機或者其餘全相相機的,大場景的稠密重建,以及聯合建圖或者增長運動模糊的魯棒性。

 

VI. 參考文獻

[1]R. Mur-Artal, J. M. M. Montiel, and J. D. Tardos, 「ORB-SLAM: a´versatile and accurate monocular SLAM system,」 IEEE Transactionson Robotics,vol. 31, no. 5, pp. 1147–1163, 2015

[2]https://github.com/raulmur/ORB_SLAM2

[3]https://www.youtube.com/watch?v=ufvPS5wJAx0&feature=youtu.be

這篇真的是太讚了,我是轉載自【泡泡機器人SLAM】微信公衆號的,但願能夠你們一塊兒學習~~~

相關文章
相關標籤/搜索