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.x 八叉树地图、ikdtree地图、哈希地图等
这些我认为不属于具体的地图表征形式,只是地图存储的数据结构。具体来说:
- 八叉树地图(Octree Map)是利用八叉树数据结构存储体素地图,可以节省数据存储空间。具体实现例如 OctoMap[3]
- ikdtree地图是动态kd-tree的地图,存储的是原始点云形式,由Fastlio2[4]采用,专门用于处理点云数据的高效存储、增量更新和查询
- 哈希地图(Hash Map)使用哈希函数将二维或者三维空间坐标映射到哈希表中,用于存储和检索空间信息,节省存储空间,存取速度快,可以存储点云地图、体素地图
除此之外,还有其他改进例如i-octree[5]等,不展开介绍。
3、一些讨论
这里记录一些自己学习的困惑,或者其他地方的讨论。
3.1 为什么要关注地图的表示?
对于最基础的SLAM而言,实现了定位与建图任务就可以了。但问题是,建立的地图要干什么、如何服务后面的任务?如果不加以考虑、忽视建图,就完全是一个定位过程了。所以,需要根据后续任务决定建立什么地图。
3.2 无人驾驶的高精度地图是什么?
个人简单总结,就是:尺度地图的绝对坐标精度更高,所包含的道路交通信息元素丰富细致。按照第一部分的分类,应该数据多层级地图。
4、小结
本文整理了一些SLAM领域常见的地图,但并没有细致讨论每种地图的优缺点以及应用场景。
参考文献
[1] Survey on Active Simultaneous Localization and Mapping: State of the Art and New Frontiers
[2] GitHub - ANYbotics/elevation_mapping: Robot-centric elevation mapping for rough terrain navigation
[3] https://octomap.github.io/
[4] FAST-LIO2: Fast Direct LiDAR-inertial Odometry
[5] zhujun:【ICRA 2024】i-Octree:快速、轻量级的动态八叉树
[6] LONER: LiDAR Only Neural Representations for Real-Time SLAM
https://zhuanlan.zhihu.com/p/708050126
SLAM中的各种地图的更多相关文章
- Slam(即时定位与地图构建) 知识篇
Slam即时定位与地图构建 技术解释 同步定位与地图构建(SLAM或Simultaneous localization and mapping)是一种概念:希望机器人从未知环境的未知地点出发,在运动过 ...
- 视觉SLAM中相机详解
视觉SLAM中,通常是指使用相机来解决定位和建图问题. SLAM中使用的相机往往更加简单,不携带昂贵的镜头,以一定的速率拍摄周围的环境,形成一个连续的视频流. 相机分类: 单目相机:只是用一个摄像头进 ...
- 视觉SLAM中的数学基础 第三篇 李群与李代数
视觉SLAM中的数学基础 第三篇 李群与李代数 前言 在SLAM中,除了表达3D旋转与位移之外,我们还要对它们进行估计,因为SLAM整个过程就是在不断地估计机器人的位姿与地图.为了做这件事,需要对变换 ...
- C# 程序中嵌入百度地图
本例是对WinForm中使用百度地图的简要介绍.百度地图目前支持Android开发,IOS开发,Web开发,服务接口,具体可以参照'百度地图开放平台'. [动态加载百度地图]涉及到的知识点: WebB ...
- 在ionic/cordova中使用百度地图插件
在ionic项目中,如果想实现定位功能,可以使用ng-cordova提供的cordova-plugin-geolocation. 但由于高墙的缘故,国内andorid环境下,此插件不起作用(ios环境 ...
- 视觉SLAM中的数学基础 第四篇 李群与李代数(2)
前言 理解李群与李代数,是理解许多SLAM中关键问题的基础.本讲我们继续介绍李群李代数的相关知识,重点放在李群李代数的微积分上,这对解决姿态估计问题具有重要意义. 回顾 为了描述三维空间里的运动,我们 ...
- SLAM中的EKF,UKF,PF原理简介
这是我在知乎上问题写的答案,修改了一下排版,转到博客里. 原问题: 能否简单并且易懂地介绍一下多个基于滤波方法的SLAM算法原理? 目前SLAM后端都开始用优化的方法来做,题主想要了解一下之前基于 ...
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
标签: Android百度地图API Key 分类: Android 百度地图开发(2) 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...
- cocos2d-x中的Tiled地图
cocos2d-x中的瓦片地图是通过tiledMap软件制作的,存档格式是.tmx格式.此软件的使用步骤简单总结如下: (1)制作瓦片地图 1 打开软件,软件界面如下图. 2. 新建地图(文件-> ...
- Android应用中使用百度地图API并加入标注(一)
网上一些资料这样的的内容已经过时了,这里是最新的内容,假设哪里不正确,请吐槽... 1)下载百度地图移动版API(Android)开发包 要在Android应用中使用百度地图API,就须要 ...
随机推荐
- 面向分布式强化学习的经验回放框架(使用例子Demo)——Reverb: A Framework for Experience Replay
相关前文: 面向分布式强化学习的经验回放框架--Reverb: A Framework for Experience Replay 论文题目: Reverb: A Framework for Expe ...
- 实验室服务彻底死机记录——硬件故障——主板pcie槽坏掉或显卡坏掉
2022年11月8日 后记(最新更新) 服务器送售后,售后给厂家技术打电话,厂家技术说可能是显卡的电源线松了,于是我们打开机箱把显卡的电源线紧了紧,然后神奇的事情发生了,故障解除了...... 一 ...
- Chrome(Google) 浏览器安装Vue2、Vue3插件方法 (亲测有效)
1.背景 2.步骤 步骤一:下载插件 网站:https://chrome.zzzmh.cn/#/search 百度网盘下载: 链接:https://pan.baidu.com/s/1xdEK-7qVx ...
- python分布式事务方案(二)基于消息最终一致性
荐
python分布式事务方案(二)基于消息最终一致性 上一章采用的是tcc方案,但是在进行批量操作时,比如说几百台主机一起分配策略时,会执行很长时间,这时体验比较差. 由于zabbix隐藏域后台,而这个 ...
- AvaloniaChat—从源码构建指南
AvaloniaChat介绍 一个使用大型语言模型进行翻译的简单应用. 我自己的主要使用场景 在看英文文献的过程中,比较喜欢对照着翻译看,因此希望一边是英文一边是中文,虽然某些软件已经自带了翻译功能, ...
- Microsoft Build 2023 After Party (Placeholder)
一年过去了,微软BUILD又回来了! https://build.microsoft.com/en-US/home This is a placeholder page for Microsoft B ...
- 一个小小空格问题引起的bug
程序员会遇到一种情况,一个bug排查到最后是由一个很小的问题导致的.在昨天的日常搬砖中遇到一个问题,耽搁了我大半天的时间,最后查明原因让我很无语. 首先介绍一下背景,我是做算法模型训练,目前手上的工作 ...
- python pyqt6 设定窗口置顶
self.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint)即可效果一般,页面会出现闪烁一次, # 置顶按钮 self.top_button = QPu ...
- python pyqt6 QPushButton 设定快捷键
import os import sys from PyQt6.QtWidgets import QPushButton from PyQt6.QtGui import QIcon from Py ...
- Android升 Androidx 语系切换失效
背景: 一个很旧的Android项目,android升androidx 切换语系失败,debug的时候,传的语系值是对的,但是确实没有国际化效果 原因: 经过一番学习,原因是使用 implementa ...