最近百度開(kāi)源了個(gè)slam系統(tǒng)ice-ba,測(cè)試發(fā)現(xiàn)性能強(qiáng)大,代碼方面工程優(yōu)化做了很多,總的來(lái)說(shuō)前端使用了光流,后端正是論文提出上的增量式BA了。
這個(gè)增量式的ice-BA主要分為三個(gè)部分,全局BA,局部BA以及relative-marg,前兩者采用了增量式方法提升了后端速度,后者保證了local-BA和global-BA的一致性對(duì)精度有所貢獻(xiàn)。
Global BA
論文最先提及的是他們先前已經(jīng)在Robust Keyframe-based Dense SLAM with an RGB-D Camera發(fā)表過(guò)的Global BA方法,這個(gè)方法認(rèn)為在BA的時(shí)候,之前已經(jīng)算過(guò)的那些量再次計(jì)算對(duì)精度并不會(huì)有太大的改善,從而沒(méi)必要重新線(xiàn)性化(因?yàn)榧词咕€(xiàn)性化了,算出來(lái)的雅可比矩陣也沒(méi)啥變化),更進(jìn)一步,沒(méi)必要每次在求解線(xiàn)性方程組的時(shí)候還去把那些沒(méi)有重新線(xiàn)性化的部分做舒爾消元,只需要挑選一部分算一下即可。

之后求解舒爾消元完畢那個(gè)線(xiàn)性方程組的的時(shí)候,使用PCG進(jìn)行計(jì)算。更多的算法細(xì)節(jié)不再過(guò)多的說(shuō)明,僅僅對(duì)挑選策略簡(jiǎn)單說(shuō)明一下,總的來(lái)說(shuō)有兩個(gè):
- 新加入的一些楨和點(diǎn),無(wú)腦線(xiàn)性化
- 如果點(diǎn)的更新量大于某個(gè)閾值,更新點(diǎn),并對(duì)那個(gè)點(diǎn)連接的一部分重新線(xiàn)性化
Local BA
對(duì)于local-BA,上訴方法帶來(lái)的提升就有限了,由于幾乎每個(gè)點(diǎn)都被window里面所有的楨看到,因此即使只重新線(xiàn)性化一部分點(diǎn),也會(huì)帶來(lái)很大的改動(dòng),因此在local-ba這個(gè)環(huán)節(jié),提出了一個(gè)更高效的針對(duì)local-ba的后端設(shè)計(jì)Sub-Track based IBA (ST-IBA)。這個(gè)方法的主要思路是把長(zhǎng)期跟蹤的點(diǎn)分成很多短期跟蹤段。

這樣每次重新算點(diǎn)的時(shí)候,重新線(xiàn)性化的區(qū)域減小,而且做了舒爾消元后,引入的稠密矩陣快也有限,因此提高了效率。
relative-marginalization
對(duì)于vio系統(tǒng),在local-window中,往往都有marg這一步,把有些本應(yīng)該出了window的信息以另一種形式存儲(chǔ)下來(lái)。但是有g(shù)lobal-ba存在時(shí),marg的效果未必有很大的提升,反而可能會(huì)下降,一方面global-ba本身就會(huì)利用那些沒(méi)在window中的信息,另一方面,由于誤差的累計(jì),反而marg帶來(lái)的先驗(yàn)可能反而會(huì)最終的精度,原因如下:

浩敏師兄這篇論文提出了一種marg的方法,保持了 marginalization prior和global BA的一致性,具體操作如圖所示,我就不做過(guò)多的翻譯

基本思想其實(shí)比較簡(jiǎn)單,之前做marg的時(shí)候,考慮的坐標(biāo)系都是全局坐標(biāo)系,或者說(shuō)選定的Identity坐標(biāo)系,這個(gè)會(huì)導(dǎo)致每次的先驗(yàn)信息在“告訴”local-ba:“我在哪里”。長(zhǎng)期不斷積累的誤差,會(huì)導(dǎo)致這個(gè)先驗(yàn)越來(lái)越差,于是為了避免這個(gè)誤差因?yàn)樵蚍e累,只需要把每次相對(duì)與Identity變成相對(duì)于最新的global坐標(biāo)就行了,也就是需要讓這個(gè)先驗(yàn)相對(duì)量轉(zhuǎn)化為相對(duì)于剛剛出窗口的那個(gè)關(guān)鍵幀,從而避免了誤差的累積。