【论文】TagSLAM: Robust SLAM with Fiducial Markers
I. INTRODUCTION
很多的SLAM框架都在努力地解決一些很難的問題。像重新辨認(rèn)之前見過的landmark,另一個是如何保存與維護(hù)landmark(這個回很費內(nèi)存空間)。維護(hù)這些點都是為了能夠?qū)崿F(xiàn)loop closeure 。
但是在很多的估計實驗中是可以使用一些方法來溫和地避開一些與環(huán)境的交互問題的。
通過放置一些Tag是可以創(chuàng)建一小撮的landmark,特別是在特征點小于100個時候尤其有用。TagSLAM是專門對一些特征點不多的場景,內(nèi)存與計算速度的要求不高,而且對于回環(huán)檢測的要求很高的場景。如果有至少一個Tag被camera觀察到,就可以進(jìn)行一次回環(huán)處理了。
Tag可以為觀察到的實體提供幾何上的約束。比如說可以預(yù)先確定好的放置的Tag的位置。或者說可以使用一些laser工具來測算實體與tag之間的距離。當(dāng)一個tag被移動的相機(jī)認(rèn)出來之后,會在相應(yīng)的位置創(chuàng)建一個軌跡。這個tag的方法可以大大增強(qiáng)現(xiàn)有的SLAM系統(tǒng)和VIO系統(tǒng)。
這個TagSLAM是使用GTSAM來實現(xiàn)優(yōu)化的,需要估計一個良好的初值,不然的話可能會收斂失敗。
值得注意的是,SLAM是一個想當(dāng)通用的方法。如果你知道了相機(jī)的位姿,那么相對的,你就可以知道landmark的位置,同理 如果你知道了landmark 的位置,那么就可以知道相機(jī)的位姿。TagSlam繼承了這個特征,可以實現(xiàn)相機(jī)是靜止的情況下,可以估計出移動Tag 的位置。
II. RELATED WORK
重點提到了一個SPM-SLAM作用與其相近。
SPM-SLAM是和一般的SLAM一樣使用過的是關(guān)鍵幀模式,而TagSLAM是所有幀都是關(guān)鍵幀然后再利用iSAM2進(jìn)行稀疏化(這里不是很懂)。
對于長路程的話SPM-SLAM是優(yōu)于TagSLAM,TagSLAM可以滿足更加多的場景需求。
SPM-SLAM不可以包含關(guān)鍵點的測量,但是這個缺點在后來UcoSLAM中被解決了。
SPM-SLAM使用兩幀之間的關(guān)系測量出Tag 的位姿,TagSLAM則是不會立刻使用Tag 的關(guān)系,直到?jīng)]有二義性地確定了Tag 的位姿。
SPM-SLAM只注意他的模糊的測量,TagSLAM則是會額外考慮Tag 的觀測形狀等。
III. MODEL SETUP
符號表示:
A坐標(biāo)系下的X,乘上A坐標(biāo)系下到B坐標(biāo)的變換矩陣,得到B坐標(biāo)系下的X坐標(biāo)
body:是與tag和camera所相聯(lián)系的。body的位姿可以是靜態(tài)的,也可以是動態(tài)的。
Tag:必須是獨一無二的,同時每一個Tag必須與body相聯(lián)系,沒有相聯(lián)系的tag將會無視它。不同于body,tag的位姿只能是靜態(tài)的。
camera pose:就像tag位姿是靜態(tài)的。是來源于body所鏈接的相機(jī)位姿的(應(yīng)該是先驗的意思)。所來源于的body,對于camera來說被稱為rig。
IV. FACTOR GRAPH
這個優(yōu)化是才用貝葉斯公式進(jìn)行最大似然估計的方法來優(yōu)化的,利用最大似然估計的值作為優(yōu)化值。默認(rèn)所有的概率分布都是高斯分布。
優(yōu)化的對象是各種位姿,一共包括了4種約束:
Absolute Pose Prior
利用一個特定的T0幀(可能就是前面說的body)來形成約束:
Relative Pose Prior.
利用相鄰的AB幀之間重投影誤差來形成約束 。
動態(tài)的body幀之間的也是這樣形成約束:
Tag Projection Factor.
利用tag的四個頂點來重投影誤差來確定相機(jī)的位姿。S是tag角點坐標(biāo),c表示的是4個角點。
圖優(yōu)化表示:
方塊是約束,圓是優(yōu)化點。PT是4元邊,Pr是二元邊。
V. ROBUST INITIALIZATION
非線性優(yōu)化使用的是GSTAM庫。
很多的認(rèn)為因素都會導(dǎo)致優(yōu)化出錯。所以初始化的過程是很重要的。
重要:實驗表明,如果只能看到一個tag,其實對于確定位姿是很不準(zhǔn)的。至少在畫面中需要出現(xiàn)兩個tag或者是多個相機(jī)觀察到tag并且直到他們之間的內(nèi)參的時候,這個約束才是有用的。(所以定位起碼需要兩個tag)。
單純的PnP得出來的結(jié)果是沒有魯棒性的。優(yōu)于這個原因,論文中所有的基于單位來獲取位姿初始化都只能來自于一組最小的tag,也就是需要有最小的tag數(shù),并且需要考慮這些tag的是使用與他的使用順序。(這里的初始化表示的是某一個位姿的創(chuàng)建)
為了盡可能地利用歷史的觀測,這個系統(tǒng)維護(hù)了兩個graph:保存了所有factor的完全圖 和 直到當(dāng)前時間變量使用的所有測量值,也就是說是只保存滿足當(dāng)前變量優(yōu)化約束的factor的優(yōu)化圖。
A. Subgraph discovery
當(dāng)新測量值來到的時候可能會導(dǎo)致當(dāng)前的某個位姿可以確定下來,也可能會導(dǎo)致以前的某個位姿可以確定下來。所以可以確定產(chǎn)生確定下來的位姿的fator和變量都會加入到subgraph中。并且按照這些約束的產(chǎn)生順序,加入到initialization list中。這個順學(xué)在后面的處理中將會有很大的作用。
已經(jīng)發(fā)現(xiàn)的subgraph是會依賴于新發(fā)現(xiàn)的factor的,一個新的factor 會可以加入到subgraph中。在通常情況下,subgraph是相連的,一個組新的factor 會僅產(chǎn)生一個subgraph。
本文的方法中會嚴(yán)格控制tag的位姿約束進(jìn)入到subgraph中,除非是tag的位姿已經(jīng)確定了或者是已經(jīng)給了一個位姿先驗。,亦或者是觀察他的角度小于60度(這樣的重投影誤差會比較明顯)。
所有進(jìn)入到subgraph中過的變量都應(yīng)該是已經(jīng)確定的(有初值),對于那棟動態(tài)的位姿,也應(yīng)該有個約束或者是先驗信息。上面這個圖就是和Fig2對比,t時刻的動態(tài)位姿雖然沒有確定,但是也會有先驗位姿。
B. Order of subgraph discovery
進(jìn)入到subgraph是會按照下面的順序的:
1、任何與先驗位姿相關(guān)聯(lián)的factor
2、任何與tag的重投影相關(guān)聯(lián)的factor
3、任何不建立位姿的factor
讀后感想
相較于常規(guī)的SLAM系統(tǒng),用了一些新的設(shè)計思路。
1、subgraph系統(tǒng),tag只會在確定了位姿之后才會加進(jìn)去因子圖中。
2、所有幀都會加入進(jìn)去,同時也是用了body節(jié)點的概念。
3、優(yōu)化的思想是基于最大似然估計,而不是常規(guī)的最小二乘。
4、參考系可以相互轉(zhuǎn)轉(zhuǎn)化,可以在相機(jī)不動的情況下,獲得觀察的tag的位姿。
缺點:
1、因為架構(gòu)的不同,加入到別的SLAM框架里面的難度加大。
2、所有幀都會參與優(yōu)化,計算量比較大,不適合于移動平臺。
總結(jié)
以上是生活随笔為你收集整理的【论文】TagSLAM: Robust SLAM with Fiducial Markers的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用 Python 编写干净、可测试、高质
- 下一篇: 30s了解fori和foreach的区别