一文詳解ORB-SLAM3中的地圖管理

作者:小L

來源:微信公衆號|3D視覺工坊(系投稿)

3D視覺精品文章彙總:https://github.com/qxiaofan/awesome-3D-Vision-Papers/

 

想要理解ORB-SLAM3的地圖管理,僅看ORB-SLAM3的論文[3]是不夠的,因爲很多細節出現在之前的ORB-SLAM1/2[1][2],以及ORB-Atlas[4]這幾篇論文中。從頭到尾搞清楚這些論文中採用的地圖管理方法,就能理解ORB-SLAM3中的內容。本文介紹這幾篇論文中涉及地圖的部分,並不介紹特徵跟蹤、關鍵幀創建等內容。作者能力有限,在整理時難免出現疏漏,望讀者以原論文爲準。

一、ORB-SLAM1

首先介紹ORB-SLAM1中的一些基本概念。

1.基本概念

·共視圖 Covisibility Graph:

共視圖是一個加權無向圖,圖中每個節點是相機的位姿,如果兩個位姿的關鍵幀拍攝到的相同關鍵點的數量達到一定值(論文設定爲至少15個),則認爲兩個關鍵幀具有共視關係。此時兩個節點之間便生成了一條邊,邊的權重與共視點的數量有關。

·生成樹 Spanning Tree:

Spanning Tree用最少的邊連接了所有的關鍵幀節點(即共視圖中所有的節點)。當一個關鍵幀被加入到共視圖當中後,這個關鍵幀與共視圖中具有最多觀測點的關鍵幀之間建立一個邊,完成Spanning Tree的增長。

·Essential Graph:

根據共視關係得到的共視圖是一個連接關係非常稠密的圖,即節點之間有較多的邊,而這過於稠密而不利於實時的優化。於是構建了Essential Graph,在保證連接關係的前提下儘可能減少節點之間的邊。Essential Graph中的節點依舊是全部的關鍵幀對應的位姿,連接的邊包含三種邊:Spanning Tree的邊、共視圖中共視關係強(共視點數量超過100)的邊、以及迴環時形成的邊。

2.具體的使用

·利用局部地圖進行跟蹤

相機跟蹤時利用了局部地圖。具體來說,先從所有關鍵幀中選擇與當前幀有相同特徵點的關鍵幀集合,之後提取中每一個關鍵幀的共視幀的集合,之後利用兩個集合的關鍵幀的信息進行相機位姿的跟蹤

·迴環檢測

迴環檢測共包含四個部分:選擇候選幀、計算變換、迴環融合與Essential Graph優化。

1) 選擇候選幀

當每次獲得一個關鍵幀時,都會判斷是否與之前的關鍵幀發生了迴環。採用bag of words方法進行判斷是否是相同的觀測場景,論文采用了一個小技巧就是首先判斷了當前關鍵幀與其共視幀的匹配得分,其他關鍵幀如果低於這個得分不會判定爲迴環。如果某個關鍵幀與當前幀的匹配分數達到了閾值,還需要判斷共視的3個關鍵幀是否也滿足迴環的條件。只有都滿足時纔會判定發生了迴環。

2) 計算變換

通過3D地圖點計算迴環時,當前幀與迴環幀之間的SE(3)變換。

3) 迴環融合

迴環融合時,完成了以下工作:將重複的地圖點融合並更新共視圖;通過,糾正當前關鍵幀與當前幀相連關鍵幀的位姿,並進行迴環幀的地圖點與當前幀地圖點的融合;更新融合後的共視圖

4) Essential Graph的優化

通過優化,將回環得到的誤差均勻分配到整個Essential Graph當中,糾正建圖過程中積累的誤差。

二、 ORB-SLAM2

ORB-SLAM2與1相比,主要的改動有:BoW字典有所變化,以及在迴環檢測Essential Graph優化後,新增了一個全局的BA進一步優化。總得來說,在地圖部分,和1相比就是多了一個全局優化而已。具體可參考ORB-SLAM2的github下的issue(https://github.com/raulmur/ORB_SLAM2/issues/333)

三、ORB-Atlas

Atlas翻譯爲“地圖集”,即管理着一系列的子地圖(sub-map),這些子地圖共用同一個DBoW數據庫,使得能夠實現重定位迴環等操作。

當相機在正常跟蹤狀態,所生成關鍵幀所在的地圖稱爲“活動地圖(active map)”。如果跟蹤失敗,首先將進行重定位操作尋找地圖集中對應的關鍵幀,如果依舊失敗,則重新創建一個新的地圖。此時舊的地圖變成了“非活動地圖(non-active map)”,新的地圖作爲活動地圖繼續進行跟蹤與建圖過程。在跟蹤過程中,當前相機必然是位於活動地圖當中,可能存在零或多個子地圖。

每次插入關鍵幀時,都與完整地圖的DboW數據庫進行匹配。如果發現了相同的場景,且兩個關鍵幀同時位於活動地圖,則意味着發生了迴環,便按照迴環的方式進行融合處理;如果匹配上的關鍵幀位於非活動地圖,則需要將兩個子地圖進行拼接,這便是ORB-Atlas的創新之處。

地圖無縫融合時,當前活躍的地圖吞併對應的非活躍地圖。通過一系列步驟將非活躍地圖的信息補充到當前活躍地圖。具體步驟如下:

1. 檢測:首先由重識別模塊檢測出當前關鍵幀Ka與匹配上的待吞併關鍵幀Ks,並獲取兩個子地圖當中與匹配上的兩個關鍵幀具有共視關係的關鍵點和關鍵幀。

2. 位姿計算:通過Horn+RANSAC方法初步計算兩個關鍵幀之間的變換關係,之後將待吞併地圖的地圖點通過這個變換投射到當前關鍵幀Ka上,再利用引導匹配的方法獲得更豐富的匹配並進行非線性優化,獲得精確的變換。

3. 地圖點合併:將被吞併地圖的關鍵點變換到當前關鍵幀位姿下,融合重複的地圖點。之後將兩個地圖的關鍵幀融合,重新生成spanning tree和共視圖。

4. 銜接區域的局部BA優化:融合後與Ka具有共視關係的關鍵幀參與局部BA優化,爲避免gauge freedom,固定之前活躍地圖中的關鍵幀而移動其他的關鍵幀。優化完成後再次進行地圖點的合併與spanning tree/共視圖的更新。

5. 完整地圖的位姿圖優化:對整個合併後的地圖進行位姿圖優化。

小結

Atlas的方法使得在跟蹤丟失時能夠重新創建一個地圖,並在回到原有位置時利用原地圖的信息,使得SLAM更加魯棒。Atlas的方法也用在了ORB-SLAM3中

四、ORB-SLAM3

ORB-SLAM3中的地圖,大致上採用了ORB-SLAM1/2和ORB-Atlas的方法完成了重定位、迴環和地圖融合。

1. 重定位

ORB-SLAM3在重定位的策略上做了一些改進。爲了保證重定位不出錯,重定位常常設置了嚴苛的條件,保證高精準率而識別率較低。舊的方法(ORB-SLAM1/2)中當3個關鍵幀完全匹配上後才判定爲重定位成功。然而作者發現,三個關鍵幀經過了很長的時間。主要改進是,噹噹前關鍵幀與數據庫的關鍵幀匹配上後,檢測與當前關鍵幀具有共視關係的關鍵幀是否也能夠匹配,如果可以則判定爲重定位成功;否則才繼續使用接下來的關鍵幀進行判定。

2. 視覺地圖融合

視覺地圖融合方式與ORB-Atlas的大致相同,對融合的區域起了一個新的名字叫做“銜接窗口(welding window)”。同時指明在銜接後進行完整位姿圖融合時,銜接窗口的關鍵幀固定以保證不會出現gauge freedom。

3. 閉環

閉環檢測部分與ORB-Atlas的基本相同。

參考文獻

[1]. ORB-SLAM: a Versatile and Accurate Monocular SLAM System

[2]. ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras

[3]. ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial and Multi-Map SLAM

[4] ORBSLAM-Atlas: a robust and accurate multi-map system

論文打包:在公衆號「3D視覺工坊」,後臺回覆「地圖管理」,即可直接獲得。

3D視覺工坊-ORB-SLAM3源碼學習交流羣

已建立3D視覺工坊-ORB-SLAM3微信交流羣!想要進ORB-SLAM3源碼學習交流羣的同學,可以直接加微信號:CV_LAB 。加的時候備註一下:ORB-SLAM+學校+暱稱,即可。然後就可以拉你進羣了。

強烈推薦大家關注小凡 知乎賬號和3D視覺工坊微信公衆號,可以快速瞭解到最新優質的3D視覺論文。

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