ROS(機(jī)器人操作系統(tǒng))是一個(gè)廣泛使用的開源框架,提供了多種建圖算法的實(shí)現(xiàn),以滿足不同應(yīng)用場(chǎng)景的需求。本文將對(duì)多種建圖算法進(jìn)行比較和分析,探討它們的優(yōu)勢(shì)和劣勢(shì),以幫助決策者選擇適合其特定應(yīng)用的最佳建圖算法(包括Gmapping、Hector、Karto、Cartographer)。
01.
Gmapping
Gmapping是應(yīng)用最為廣泛的2D slam方法,主要是利用RBPF(Rao-Blackwellized Particle Filters)方法,所以需要了解粒子濾波的方法(利用統(tǒng)計(jì)特性描述物理表達(dá)式下的結(jié)果)。
Gmapping在RBPF算法上做了兩個(gè)主要的改進(jìn):改進(jìn)提議分布和選擇性重采樣。
隨著場(chǎng)景增大所需的粒子增加,因?yàn)槊總€(gè)粒子都攜帶一幅地圖,因此在構(gòu)建大地圖時(shí)所需內(nèi)存和計(jì)算量都會(huì)增加。因此不適合構(gòu)建超大型場(chǎng)景地圖。
并且沒有回環(huán)檢測(cè),因此在回環(huán)閉合時(shí)可能會(huì)造成地圖錯(cuò)位,雖然增加粒子數(shù)目可以使地圖閉合但是以增加計(jì)算量和內(nèi)存為代價(jià)。
Gmapping可以實(shí)時(shí)構(gòu)建室內(nèi)與室外中小場(chǎng)景地圖,在構(gòu)建中小場(chǎng)景地圖所需的計(jì)算量較小且導(dǎo)航方案精度較高。
建圖效果較為良好。
相比Hector SLAM對(duì)采集傳感器頻率要求低、魯棒性高(Hector 在機(jī)器人快速轉(zhuǎn)向時(shí)很容易發(fā)生錯(cuò)誤匹配,建出的地圖發(fā)生錯(cuò)位,原因主要是優(yōu)化算法容易陷入局部最小值);
而相比Cartographer在構(gòu)建小場(chǎng)景地圖時(shí),Gmapping不需要太多的粒子并且沒有回環(huán)檢測(cè)因此計(jì)算量小于Cartographer而精度并沒有差太多。
所以Gmapping不能像cartographer那樣構(gòu)建大的地圖,雖然無法一次性生成幾萬平米的地圖,但實(shí)際我們使用i5 8代芯片作為處理核心,建的地圖可以使用拼接方案達(dá)到使用效果,在上萬㎡使用也并未出現(xiàn)問題 。
Hector
Hector slam 利用高斯牛頓方法解決 scan-matching 問題,對(duì)傳感器要求較高。
其無需使用里程計(jì),所以在不平坦區(qū)域?qū)崿F(xiàn)建圖的空中無人機(jī)及地面小車具有運(yùn)用的可行性,利用已經(jīng)獲得的地圖對(duì)激光束點(diǎn)陣進(jìn)行優(yōu)化,估計(jì)激光點(diǎn)在地圖的表示和占據(jù)網(wǎng)絡(luò)的概率,獲得激光點(diǎn)集映射到已有地圖的剛體變換,為避免局部最小而非全局最優(yōu)出現(xiàn),地圖使用多分辨率。
需具備高更新頻率且測(cè)量噪音小的激光掃描儀,所以,在制圖過程中,robot的速度要控制在較低的情況下才會(huì)有比較理想的建圖效果,這也是它沒有回環(huán)的一個(gè)后遺癥。另外在里程計(jì)數(shù)據(jù)比較精確的情況下無法有效利用里程計(jì)信息。
優(yōu)點(diǎn):
不需要使用里程計(jì),所以使得空中無人機(jī)及地面小車在不平坦區(qū)域建圖存在運(yùn)用的可行性;利用已經(jīng)獲得的地圖對(duì)激光束點(diǎn)陣進(jìn)行優(yōu)化, 估計(jì)激光點(diǎn)在地圖的表示,和占據(jù)網(wǎng)格的概率;
利用高斯牛頓方法解決scan-matching 問題,獲得激光點(diǎn)集映射到已有地圖的剛體變換;為避免局部最小而非全局最優(yōu),使用多分辨率地圖;導(dǎo)航中的狀態(tài)估計(jì)加入慣性測(cè)量系統(tǒng)(IMU),利用EKF濾波;
缺點(diǎn):
成本高 ,需要掃描傳感器或雷達(dá)(LRS)的更新頻率較高滿足測(cè)量噪點(diǎn)小,但是在制圖過程中需要機(jī)器人速度控制在比較低的情況下,建圖效果才會(huì)比較理想,
這也是它沒有回環(huán)(loop close)的一個(gè)后遺癥;且在里程計(jì)數(shù)據(jù)比較精確的時(shí)候,無法有效利用里程計(jì)信息,造成數(shù)據(jù)的浪費(fèi) 。
建圖效果標(biāo)準(zhǔn),必須要機(jī)器人速度控制在比較低的情況下建圖效果才能好一點(diǎn)兒,以上建圖由于速度過快導(dǎo)致地圖發(fā)生偏移。在大地圖,低特征(distinctive landmarks)場(chǎng)景中,
hector的建圖誤差高于gmapping。這是由于hector過分依賴scan-match。特別是在長(zhǎng)廊問題中,誤差更加明顯。hector_slam通過最小二乘法匹配掃描點(diǎn),
且依賴高精度的激光雷達(dá)數(shù)據(jù),因此掃描角度很小且噪點(diǎn)較大的外圍是不行的,匹配時(shí)會(huì)陷入局部點(diǎn),地圖比較混亂。
Karto
KartoSLAM是基于圖優(yōu)化的方法,用高度優(yōu)化和非迭代 cholesky矩陣進(jìn)行稀疏系統(tǒng)解耦作為解,圖優(yōu)化方法利用圖的均值表示地圖,
每個(gè)節(jié)點(diǎn)表示機(jī)器人軌跡的一個(gè)位置點(diǎn)和傳感器測(cè)量數(shù)據(jù)集,箭頭指向的連接表示連續(xù)機(jī)器人位置點(diǎn)的運(yùn)動(dòng),每個(gè)新節(jié)點(diǎn)加入,地圖就會(huì)依據(jù)空間中的節(jié)點(diǎn)箭頭的約束進(jìn)行計(jì)算更新。
ROS版本的KartoSLAM,其中采用的稀疏點(diǎn)調(diào)整(the Spare Pose Adjustment(SPA))與掃描匹配和閉環(huán)檢測(cè)相關(guān)。landmark越多,內(nèi)存需求越大,然而圖優(yōu)化方式相比其他方法在大環(huán)境下制圖優(yōu)勢(shì)更大,在某些情況下KartoSLAM更有效,
因?yàn)樗麅H包含點(diǎn)的圖(robot pose),求得位置后再求map。Karto最重要的點(diǎn)就是引入了后端優(yōu)化與回環(huán)檢測(cè)。在Karto之前誕生的激光SLAM如GMapping,Hector,都是沒有后端優(yōu)化與回環(huán)檢測(cè)的。
建圖效果較為良好。Karto的出現(xiàn)在激光SLAM的歷史上是個(gè)里程碑的事件。在Karto之前的激光SLAM中,如GMapping,Hector 都只有前端部分,也就是使用雷達(dá)數(shù)據(jù)進(jìn)行掃描匹配以及建圖2個(gè)功能。
Karto將后端優(yōu)化與回環(huán)檢測(cè)引入到激光SLAM中,通過位姿圖結(jié)構(gòu)的優(yōu)化,來減小累計(jì)誤差。
Cartographer
Cartographer是基于圖優(yōu)化的方法建圖算法,其主要通過閉環(huán)檢測(cè)來消除構(gòu)圖過程中產(chǎn)生的累積誤差。用于閉環(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整體可以分為兩個(gè)部分:Local SLAM和Global SLAM。
Local SLAM
·利用里程計(jì)(Odometry)和IMU數(shù)據(jù)進(jìn)行軌跡推算,給出小車位姿估計(jì)值
·將位姿估計(jì)值作為初值,對(duì)雷達(dá)數(shù)據(jù)進(jìn)行匹配,并更新位姿估計(jì)器的值
·雷達(dá)一幀幀數(shù)據(jù)經(jīng)過運(yùn)動(dòng)濾波后,進(jìn)行疊加,形成子圖(submap)
Global SLAM
回環(huán)檢測(cè)后端優(yōu)化,全部子圖形成一張完整可用的地圖
優(yōu)點(diǎn):
累計(jì)誤差低,能天然的輸出協(xié)方差矩陣,后端優(yōu)化的輸入項(xiàng)。成本較低的雷達(dá)也能跑出不錯(cuò)的效果。沒有imu和odom,只有雷達(dá)也可以建圖,還可以手持建圖。
缺點(diǎn):
內(nèi)存占用較大,算法體量較大,需要花上很久的時(shí)間才能稍微看得懂。
建圖效果優(yōu)異。它與Karto都是圖優(yōu)化框架,但有諸多不同,例如Karto采取的是spa圖優(yōu)化方法,而Cartographer采用的是google的ceres構(gòu)建problem優(yōu)化,Karto的前后端是單線程進(jìn)行,而Cartographer采取的是多線程后端優(yōu)化。
而Cartographer也支持多傳感器融合建圖,可以處理來自激光雷達(dá)、IMU、里程計(jì)等傳感器的數(shù)據(jù)并給予這些數(shù)據(jù)進(jìn)行地圖的構(gòu)建。
Cartographer在建圖的過程中可以隨意移動(dòng)機(jī)器人,由于它的后端優(yōu)化,回環(huán)檢測(cè)的能力比較強(qiáng),所以地圖一直保持很好的狀態(tài)。在建大圖的時(shí)候更能體現(xiàn)出來魯棒性良好。
獨(dú)特的算法們
總之,ROS機(jī)器人操作系統(tǒng)為機(jī)器人開發(fā)者提供了豐富的建圖算法選擇,每種算法都有其獨(dú)特的優(yōu)點(diǎn)和適用場(chǎng)景。在選擇建圖算法時(shí),開發(fā)者應(yīng)根據(jù)機(jī)器人的任務(wù)需求、硬件配置和環(huán)境特點(diǎn)來權(quán)衡各種算法的優(yōu)劣。
無論是使用激光雷達(dá)、攝像頭還是其他傳感器,ROS都為不同的應(yīng)用提供了多種選擇,從SLAM到視覺SLAM,再到深度學(xué)習(xí)方法,都可以在ROS中找到相應(yīng)的解決方案。隨著機(jī)器人技術(shù)的進(jìn)一步發(fā)展,我們可以期待更多創(chuàng)新的建圖算法出現(xiàn),為機(jī)器人的自主導(dǎo)航和環(huán)境感知能力帶來更大的提升。
希望本文的比較和分析能夠幫助開發(fā)者在選擇合適的建圖算法時(shí)做出明智的決策,從而推動(dòng)機(jī)器人技術(shù)的不斷進(jìn)步。
OS-NANO具有多重導(dǎo)航算法功能開發(fā)和研究能力,歡迎大家使用學(xué)習(xí)。