原來如此!簡單總結(jié)SLAM中的各種地圖
本文經(jīng)自動駕駛之心公眾號授權(quán)轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系出處。
自己搞了這么多年SLAM,使用的主要還是點(diǎn)云地圖。雖然知道種種地圖表征,但一直沒有梳理過。最近集中時間學(xué)習(xí)了一下各種地圖,在這里進(jìn)行整理與分享。能力有限,難免有不恰之處,請批評指正。
1、地圖的不同分類方式
地圖有多種不同的分類方式,網(wǎng)上有不少帖子介紹各種各樣的地圖,但并沒有非常完整的總結(jié)地圖應(yīng)該怎么分類。論文[1]中將地圖分成以下幾種:拓?fù)涞貓D、度量地圖、度量-語義地圖和混合地圖。我覺得按照這種方式進(jìn)行歸類相對比較科學(xué)。
1.1 拓?fù)涞貓D
拓?fù)涞貓D(Topological Map)使用節(jié)點(diǎn)和邊來表示環(huán)境,其中節(jié)點(diǎn)表示重要位置(如拐角、門口),邊表示這些位置之間的可達(dá)路徑。拓?fù)涞貓D注重表示環(huán)境的連接關(guān)系,而不是具體的幾何細(xì)節(jié)。這種地圖表示方法適用于大型、復(fù)雜環(huán)境中的高效路徑規(guī)劃和導(dǎo)航。個人簡單理解為,是一種表示拓?fù)潢P(guān)系、不存在準(zhǔn)確距離信息的地圖,例如:我家地圖是,客廳在中間,周圍連著臥室、書房、廚房、衛(wèi)生間,書房又連著陽臺。
1.2 度量地圖/尺度地圖/幾何地圖
度量地圖(Metric Map)或幾何地圖(Geometric Map)是SLAM種較為常用的一種表示方法,常見的點(diǎn)云(PointCloud)、八叉樹地圖(OctoMap)、柵格地圖(Grid Map)等都屬于度量地圖,下一節(jié)會展開介紹。個人簡單的理解為,能夠從這個地圖中獲取具體的尺度信息,例如某個點(diǎn)距離某個點(diǎn)多遠(yuǎn)、XXX障礙物面積有多大。
根據(jù)地圖的稠密程度,度量地圖還可進(jìn)一步分為:稀疏地圖、稠密地圖。稀疏地圖例如視覺SLAM建立的特征點(diǎn)地圖,是稀疏的,一般多用于自身定位而難以直接導(dǎo)航;而RGBD或LiDAR可以建立稠密地圖。
根據(jù)地圖是連續(xù)的還是離散的,還可進(jìn)一步分為:離散地圖、連續(xù)地圖。柵格地圖、體素地圖(Voxel Map)就是典型的離散地圖,把空間進(jìn)行了劃分,然后離散化表達(dá);連續(xù)地圖是采用高斯過程或者NeRF方式建立的地圖。
離散地圖(左)與連續(xù)地圖(右)
1.3 語義地圖
語義地圖(Semantic Map)是包含了語義信息的地圖,語義信息可以是物體的種類、姿態(tài)和形狀等描述。例如,無人駕駛需要知道地圖中那些是車道、哪些是障礙。需要注意的是,只要包含于語義信息就可以算是語義地圖,尺度地圖、拓?fù)涞貓D也可以是語義地圖。
帶語義信息的點(diǎn)云地圖(左)和帶語義信息的拓?fù)涞貓D(右)
1.4 混合地圖與多層級地圖
混合地圖(Hybrid Map)是一種結(jié)合多種地圖表示的地圖,例如在大范圍導(dǎo)航時,我們可能既需要拓?fù)湫畔ⅲ◤目蛷d到臥室),又需要尺度信息(走多少米),這就需要混合地圖。
分層級地圖(Hierarchy Map)顧名思義,是多層次的地圖表示,通過將環(huán)境信息組織成不同層次以提高數(shù)據(jù)管理和處理的效率。例如無人駕駛時,頂層地圖表示全局的道路網(wǎng)絡(luò),底層表示局部的道路詳細(xì)結(jié)構(gòu),可以理解成“分辨率”從粗到細(xì)的過程,以適應(yīng)不同的任務(wù)需求。
2、尺度地圖細(xì)分
2.1 特征地圖
特征地圖(Feature Map)是僅保留特征的地圖,常見于視覺SLAM。一些場景,例如水下的定位放置一些標(biāo)志物,這樣建立的地圖就是特征點(diǎn)地圖。視覺SLAM一般提取特征點(diǎn)匹配后建立特征點(diǎn)地圖。除了點(diǎn)特征意外,線特征和面特征也可以建立地圖,但也屬于是特征地圖的一種。
左:水下聲吶建立的聲吶目標(biāo)特征點(diǎn)地圖;中:vSLAM建立的特征點(diǎn)地圖;右:線+面特征地圖
2.2 點(diǎn)云地圖
點(diǎn)云地圖(Point Cloud Map)是利用點(diǎn)云形式表示地圖,常見的激光雷達(dá)SLAM建立的都是點(diǎn)云地圖。
2.3 柵格地圖
柵格地圖(Grid Map)將空間劃分為均勻的網(wǎng)格,每個網(wǎng)格存儲一個值,表征地圖的屬性。一種常見的方式,用三種狀態(tài):占用、空閑、未知,表示某個柵格是否被占用,這種表達(dá)方式稱作“占用柵格地圖”(Occupancy Grid Map),機(jī)器人導(dǎo)航常用柵格地圖,在“空閑”柵格中規(guī)劃運(yùn)動軌跡。一般來說,柵格地圖指的是二維平面地圖。
2.4 體素地圖
體素地圖(Voxel Map)可以理解為三維的柵格地圖,當(dāng)然也包括占用體素地圖(Occupancy Grid Map)。如果是無人機(jī)這類的導(dǎo)航,一般需要用到3D的柵格地圖。和點(diǎn)云地圖相比,體素地圖的“分辨率”更低,對點(diǎn)云地圖進(jìn)行了離散化。
室內(nèi)場景的占用柵格地圖(左)和用于無人機(jī)導(dǎo)航的占用柵格地圖(右)
2.5 高程地圖
高程地圖(Elevation Map)也稱2.5D地圖。如果是平坦地面、二維場景,用柵格地圖就可以;如果是無人機(jī),需要用到三維場景體素地圖;但如果是無人車在非平坦路面運(yùn)行、或者是四足/輪式機(jī)器人在野外的行進(jìn),需要對地形進(jìn)行建模,常用的方式就是高程地圖,例如經(jīng)典的elevation mapping就是建立的高程地圖[2]。在柵格地圖的基礎(chǔ)上增加了一個維度即高度。
2.6 神經(jīng)輻射場地圖
神經(jīng)輻射場地圖(Neural Radiance Fields, NeRF)是一種新興的三維場景表示和渲染技術(shù),通過神經(jīng)網(wǎng)絡(luò)隱式地表示三維空間中的顏色和密度場。其特點(diǎn)是高精度、連續(xù)表示、數(shù)據(jù)驅(qū)動。具體可參考[6]。
2.7 八叉樹地圖、ikdtree地圖、哈希地圖等
這些我認(rèn)為不屬于具體的地圖表征形式,只是地圖存儲的數(shù)據(jù)結(jié)構(gòu)。具體來說:
- 八叉樹地圖(Octree Map)是利用八叉樹數(shù)據(jù)結(jié)構(gòu)存儲體素地圖,可以節(jié)省數(shù)據(jù)存儲空間。具體實(shí)現(xiàn)例如 OctoMap[3]
- ikdtree地圖是動態(tài)kd-tree的地圖,存儲的是原始點(diǎn)云形式,由Fastlio2[4]采用,專門用于處理點(diǎn)云數(shù)據(jù)的高效存儲、增量更新和查詢
- 哈希地圖(Hash Map)使用哈希函數(shù)將二維或者三維空間坐標(biāo)映射到哈希表中,用于存儲和檢索空間信息,節(jié)省存儲空間,存取速度快,可以存儲點(diǎn)云地圖、體素地圖
除此之外,還有其他改進(jìn)例如i-octree[5]等,不展開介紹。
3、一些討論
這里記錄一些自己學(xué)習(xí)的困惑,或者其他地方的討論。
3.1 為什么要關(guān)注地圖的表示?
對于最基礎(chǔ)的SLAM而言,實(shí)現(xiàn)了定位與建圖任務(wù)就可以了。但問題是,建立的地圖要干什么、如何服務(wù)后面的任務(wù)?如果不加以考慮、忽視建圖,就完全是一個定位過程了。所以,需要根據(jù)后續(xù)任務(wù)決定建立什么地圖。
3.2 無人駕駛的高精度地圖是什么?
個人簡單總結(jié),就是:尺度地圖的絕對坐標(biāo)精度更高,所包含的道路交通信息元素豐富細(xì)致。按照第一部分的分類,應(yīng)該數(shù)據(jù)多層級地圖。
4、小結(jié)
本文整理了一些SLAM領(lǐng)域常見的地圖,但并沒有細(xì)致討論每種地圖的優(yōu)缺點(diǎn)以及應(yīng)用場景。