ORBSLAM-Altas:多地图SLAM
ORBSLAM-Atlas:多地圖SLAM
- 這篇博客
- ORBSLAM-Altas
- 這個系統(tǒng)
- 系統(tǒng)方法
- 兩類子地圖
- 新地圖的構建
- 相機位姿的可觀測性
- 子地圖融合
- 系統(tǒng)線程
- 結尾
這篇博客
?最近ORB-SLAM3橫空出世,馬上跑去GitHub膜拜。然后在項目的相關工作中看到了ORB-SLAM3使用了一個多地圖方法。這個方法對應的論文介紹的就是ORBSLAM-Atlas系統(tǒng)的。為了之后更好地理解ORB-SLAM3和代碼,抓緊跑去把這個多地圖的論文給看一遍,再默默地記下筆記。
【轉載聲明】本篇文字均為原創(chuàng),如轉載請注明出處
ORBSLAM-Altas
這個系統(tǒng)
?系統(tǒng)摘要:
?ORBSLAM-Atlas系統(tǒng)是ORB-SLAM向多地圖領域的一個擴展研究,它在機器跟蹤丟失時不會直接停止地圖更新(ORB-SLAM會停止更新地圖,然后等著機器回來以后進行重定位),而是馬上重新構建一個新的子地圖,之前的地圖先保存起來。
?如果當前在使用的地圖與之前的保存的地圖存在閉環(huán),則將兩個地圖進行融合。之后使用融合后的地圖繼續(xù)進行跟蹤操作。
系統(tǒng)方法
?圖1是ORBSLAM-Atlas系統(tǒng)的結構框圖。
?可以看出,系統(tǒng)框圖和ORB-SLAM的框圖十分相似。區(qū)別明顯的地方有有:
1、系統(tǒng)中有兩類子地圖:Active map和Non-active map;
2、跟蹤線程要判斷是否需要構建新的地圖以供跟蹤;
3、檢測的閉環(huán)可以是在同一個子地圖中,也可以在不同子地圖中。
?下面就針對上述內容進行介紹。
兩類子地圖
?ORBSLAM-Atlas系統(tǒng)會保留兩類子地圖:Active map和Non-active map。其中Active map是當前跟蹤線程所使用的地圖(Active Map >=Local Map),Non-active則是之前跟蹤丟失后保留下來的所有地圖。如果Active map與Non-active map存在閉環(huán),那么就會將兩個存在閉環(huán)的地圖融合起來,然后系統(tǒng)使用融合后的地圖作為新的Active map使用。
?每個子地圖都是獨立的,它們的第一參考幀也都是獨立的。系統(tǒng)使用一個能夠適應于所有子地圖的DBoW2詞袋來描述每一個子地圖,以便完成地圖融合操作。
?這種做法的好處有:
1、在跟蹤丟失后系統(tǒng)通過創(chuàng)建新的地圖來繼續(xù)工作;
2、構建多個子地圖可以降低誤差的累積;
3、所有子地圖融合后獲得完整地圖。這個融合后的地圖相比于ORB-SLAM構建的一整個地圖,在精度方面會有所提高(有部分原因是剔除了一些精度較低或是跟蹤丟失的軌跡)。
新地圖的構建
?ORBSLAM-Atlas系統(tǒng)的跟蹤線程需要判斷是否跟蹤丟失,再決定是否構建新的地圖。新地圖構建和初始化的過程相同,最重要的是何時構建新地圖。論文闡述了兩個條件來判斷跟蹤是否丟失:
1、當前幀跟蹤到的地圖點數目:設NNN為當前幀跟蹤到的局部地圖中的地圖點數量。如果NNN大于給定閾值,則認為跟蹤良好,否則跟蹤丟失。
2、相機位姿的可觀測性:如果NNN中的地圖點的幾何條件較差,則認為當前幀的位姿估計值精度較低,認為跟蹤丟失。
?第一條很好理解,第二條則是論文提出的一種新的判斷丟失的標準(更加嚴格)。第二條可以通過下圖來理解:
?從圖中可以看到,當前幀跟蹤到的地圖點數量NNN很多,肯定能滿足第一條標準。但是跟蹤到的點大多距離相機很遠(遠在天邊~)。太遠的地圖點會降低在平移運動上的估計值的精度(如:走一兩步幾乎不會影響遠點在當前圖像上的成像)。所以最后的估計的位姿精度較差,如果保留這些較差的估計值,那么就會直接影響到之后圖優(yōu)化的精度。
?所以系統(tǒng)將這些較差的位姿剔除,從這時開始構建一個新的子地圖。這樣就將那些誤差較大的軌跡排除在外了。下圖就是這種作法的一個例子。
?圖中的P1是一部分精度較差的位姿估計值,P2、P3則是一個閉環(huán)。圖b因為保留了P1,以至于影響到了最后閉環(huán)優(yōu)化的精度。而下面的圖則直接剔除了P1部分,保證了最終軌跡的一個估計精度。論文也給了“相機位姿可觀測性”的具體判斷公式:
相機位姿的可觀測性
?通過相機位姿的誤差協(xié)方差來估計其位姿的觀測性。首先假設 Active map 中的地圖點都是精確的,然后用Ωi,j\Omega _{i,j}Ωi,j?表示地圖點觀測xi,jx_{i,j}xi,j?的不確定性,其中xi,jx_{i,j}xi,j?表示的是地圖點 jjj 在第 iii 個相機上的觀測值。
?定義T^i,w?SE(3)\hat{T}_{i,w} \epsilon SE(3)T^i,w??SE(3)是當前相機的位姿估計值,用εi\varepsilon _{i}εi?表示估計值的不確定性(εi\varepsilon _{i}εi?是六維向量且服從均值為0的高斯分布)。然后有以下式子:
其中CiC_{i}Ci?表示估計位姿的精度,Ji,jJ_{i,j}Ji,j?是第 i 個相機的位姿估計值關于第 j 個地圖點的雅可比矩陣。然后通過 公式 (1) 就能判斷相機的可觀測性了:
子地圖融合
?如果在兩個地圖之間檢測到了閉環(huán),那么就要進行地圖融合。然后用融合后的地圖替換掉那兩個地圖。下面介紹具體的融合方法,以及融合后的優(yōu)化操作。以下用 a,s,ma , s , ma,s,m 下標分別標記:Active map,Non-active map和融合后地圖(用 a地圖a地圖a地圖表示Active map,s地圖s地圖s地圖表示Non-active map,m地圖m地圖m地圖表示融合后的地圖)。
?1、檢測到Active 和Non-active 兩地圖間的閉環(huán),產生兩個匹配的KFs:Ka,KsKFs:Ka,KsKFs:Ka,Ks,以及兩個地圖間匹配的地圖點集合Ma,MsMa,MsMa,Ms。
?2、估計兩個地圖之間的對齊變換矩陣。對齊變換矩陣(在雙目情況下屬于SE3SE3SE3,單目則是Sim3Sim3Sim3)用來完成 s地圖s地圖s地圖中地圖和關鍵幀到 a地圖a地圖a地圖坐標系的轉換。具體分為兩步:
??1)通過MaMaMa和MsMsMs這些匹配的地圖點來進行初始估計,并用 RANSAC 算法提高估計值精度。
??2)再根據 MaMaMa在 KsKsKs 上的匹配點,構建重投影誤差。最后由非線性優(yōu)化來優(yōu)化重投影誤
??差,以獲得最終的位姿估計值。
?3、融合子地圖:完成地圖對齊后,將兩個地圖中重疊的地圖點進行融合、更新,獲得精度更高的地圖點。兩個子地圖的可視圖也保留在融合后的m地圖m地圖m地圖中。
?4、在子地圖的閉環(huán)部分進行局部 BA 優(yōu)化。在融合后的m地圖m地圖m地圖中,找到KaKaKa和KsKsKs。根據a地圖a地圖a地圖原有的可視圖,確定a地圖a地圖a地圖中哪些KFsKFsKFs是固定的(不再 Local Map 中)。這些固定的KFsKFsKFs在m地圖m地圖m地圖中仍然固定。然后對m地圖m地圖m地圖中剩余的KFsKFsKFs進行 BA 優(yōu)化。
?5、對 m地圖m地圖m地圖 進行完整的位姿圖優(yōu)化。
?如果是在Active map中檢測到閉環(huán),那么就和ORB-SLAM中的操作一樣,只對Active map進行閉環(huán)操作。
系統(tǒng)線程
?論文還提到了各線程之間的一些關系。地圖融合會在一個單獨的線程中進行。在融合開始前,會將Local Mapping線程暫停,以防止新的KFKFKF產生。在地圖融合的過程中,跟蹤線程會繼續(xù)使用 Active map 來達到實時工作的目的。當融合結束后,跟蹤線程會將融合后的地圖作為新的 Active map 來使用。
結尾
?至此,這篇博客的主要內容就結束了。ORBSLAM-Atlas系統(tǒng)主要提供一種多地圖SLAM的思路。它能夠提高系統(tǒng)的魯棒性和精度。但看完論文后我產生了一下幾個疑問:
1、這個系統(tǒng)會剔除掉那些由第二條丟失判斷標準找出的KFsKFsKFs。這會使最后的地圖出現(xiàn)一個缺口,降低地圖的完整性。
2、如果有些子地圖沒有機會進行融合,那最后該怎么處理?是否會被直接拋棄?
?先把這些問題記在小本本上,等學的更加深入后,也許就會有解決疑問的靈感了。
總結
以上是生活随笔為你收集整理的ORBSLAM-Altas:多地图SLAM的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视觉惯性SLAM:VINS-Mono
- 下一篇: 白头开头的成语有哪些啊?