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