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