原来如此!简单总结SLAM中的各种地图

人工智能 智能汽车
本文整理了一些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领域常见的地图,但并没有细致讨论每种地图的优缺点以及应用场景。

责任编辑:张燕妮 来源: 自动驾驶之心
相关推荐

2010-08-25 21:50:36

配置DHCP

2009-04-29 01:39:57

破解美萍万象

2024-10-14 13:07:40

Spring框架Boot

2012-07-04 13:36:08

无线网络H3C

2018-01-05 12:39:23

网吧电脑故障

2022-01-12 23:42:48

网页复制鼠标

2020-03-09 17:46:49

AMD7nmN7P

2020-10-26 07:03:35

机器学习算法

2023-06-06 07:08:27

网络防火墙应用网关

2022-09-27 07:00:58

QoS服务带宽

2017-09-15 18:13:57

机器学习深度学习语音识别

2022-12-06 07:24:26

2020-10-27 11:01:40

5G网络移动

2022-10-08 00:00:04

网络快捷支付TCP

2023-05-30 07:48:25

2023-06-13 07:29:22

2024-11-05 10:02:26

2019-02-19 18:26:28

华为

2023-10-08 07:37:44

SQL连接

2020-02-20 16:07:45

IT需求
点赞
收藏

51CTO技术栈公众号