視覺life(第3期)cartographer從入門到精通: 原理深剖+源碼逐行詳解
?Cartographer理論概述
Cartographer主要理論是通過閉環(huán)檢測(cè)來消除構(gòu)圖過程中產(chǎn)生的累積誤差[1]。用于閉環(huán)檢測(cè)的基本單元是submap。一個(gè)submap是由一定數(shù)量的laser scan構(gòu)成。將一個(gè)laser scan插入其對(duì)應(yīng)的submap時(shí),會(huì)基于submap已有的laser scan及其它傳感器數(shù)據(jù)估計(jì)其在該submap中的最佳位置。submap的創(chuàng)建在短時(shí)間內(nèi)的誤差累積被認(rèn)為是足夠小的。然而隨著時(shí)間推移,越來越多的submap被創(chuàng)建后,submap間的誤差累積則會(huì)越來越大。因此需要通過閉環(huán)檢測(cè)適當(dāng)?shù)膬?yōu)化這些submap的位姿進(jìn)而消除這些累積誤差,這就將問題轉(zhuǎn)化成一個(gè)位姿優(yōu)化問題。當(dāng)一個(gè)submap的構(gòu)建完成時(shí),也就是不會(huì)再有新的laser scan插入到該submap時(shí),該submap就會(huì)加入到閉環(huán)檢測(cè)中。閉環(huán)檢測(cè)會(huì)考慮所有的已完成創(chuàng)建的submap。當(dāng)一個(gè)新的laser scan加入到地圖中時(shí),如果該laser scan的估計(jì)位姿與地圖中某個(gè)submap的某個(gè)laser scan的位姿比較接近的話,那么通過某種?scan match策略就會(huì)找到該閉環(huán)。Cartographer中的scan match策略通過在新加入地圖的laser scan的估計(jì)位姿附近取一個(gè)窗口,進(jìn)而在該窗口內(nèi)尋找該laser scan的一個(gè)可能的匹配,如果找到了一個(gè)足夠好的匹配,則會(huì)將該匹配的閉環(huán)約束加入到位姿優(yōu)化問題中。Cartographer的重點(diǎn)內(nèi)容就是融合多傳感器數(shù)據(jù)的局部submap創(chuàng)建以及用于閉環(huán)檢測(cè)的scan match策略的實(shí)現(xiàn)。
cartographer代碼結(jié)構(gòu)
common:定義了基本數(shù)據(jù)結(jié)構(gòu)以及一些工具的使用接口。
sensor:定義了雷達(dá)數(shù)據(jù)及點(diǎn)云等相關(guān)的數(shù)據(jù)結(jié)構(gòu)。
transform:定義了位姿的數(shù)據(jù)結(jié)構(gòu)及其相關(guān)的轉(zhuǎn)換。
kalman_filter:?主要通過kalman濾波器完成對(duì)IMU、里程計(jì)及基于雷達(dá)數(shù)據(jù)的估計(jì)位姿的融合,進(jìn)而估計(jì)新進(jìn)的laser scan的位姿。
mapping:定義了上層應(yīng)用的調(diào)用接口以及局部submap構(gòu)建和基于閉環(huán)檢測(cè)的位姿優(yōu)化等的接口。
mapping_2d和mapping_3d:對(duì)mapping接口的不同實(shí)現(xiàn)。