本节摘要:环境塞不进内存,也用不着全塞进去——地图表示是"为任务裁剪环境"的决策。本节比较栅格、拓扑、点云、特征四类表示的存储代价与查询代价,并给出按任务选地图的判据。
一台 2D 激光雷达在 100 m × 100 m 的仓库里以 1 厘米分辨率建图,理论格子数是 10⁸——每格一个字节也要 100 MB,而其中 99% 的格子要么是空地要么永远没人查询。反过来,AGV 在固定仓库里日复一日跑同样的几条通道,它需要的其实只有"沿这几条通道哪里能走、哪里会撞"。两个方向都说明:地图表示的本质不是忠实记录环境,而是按任务需要保留环境。表示选错,后面所有算法都在替错误的表示打工。
| 表示 | 存储形式 | 存储代价 | 典型查询 | 短板 |
|---|---|---|---|---|
| 占据栅格 | 均匀网格,每格存占据概率 | O(面积/格²) | "这个格子能不能走" O(1) | 分辨率与存储互相锁死 |
| 拓扑地图 | 节点(路口)+ 边(通道) | O(路口数) | "从 A 区到 B 区怎么走" | 缺几何细节,避障靠不了它 |
| 点云地图 | 原始或滤波点集 | O(点数),最贵 | 配准定位、三维重建 | 存储与查询都重 |
| 特征地图 | 路标位置 + 描述子 | O(路标数) | 路标匹配定位 | 稀疏,避障细节不足 |
这四种不是竞争关系,是分层关系。真实的导航系统常常同时养着两三张地图:定位用点云或特征图(要跟实时扫描对齐),全局规划用拓扑或粗栅格(要快速搜路),局部避障用滚动的细栅格(要反映动态障碍)。

栅格存"占据概率"而非二值是 SLAM 带来的重要进步:单帧激光说某格空,可能是真的空,也可能只是角度偏了、被挡了。对数几率(log-odds)更新把每次观测叠加成后验:
l = log(p / (1 − p)) 占据几率的对数形式 l ← l + l_occ(命中)或 l_free(穿过) 每次观测微调 p = 1 / (1 + exp(−l)) 换回概率
穿越一次记一点"空",命中一次记一大笔"占"。噪声在累加中相互抵消,真障碍的概率迅速逼近 1。第 4 章的栅格 A* 直接在这张概率图上找路:概率高于 0.65 视为不可通行、0.5 到 0.65 计为代价惩罚——感知的置信度就这样传进了规划。
💡 关键直觉:地图不是环境的照片,是给规划器看的"任务摘要"。摘要写得对,粗糙的地图也能支撑可靠的导航;摘要写错,再高清的点云也救不了路径搜索。
均匀栅格在大场景下的存储爆炸,解法是放弃"所有地方同精度"。八叉树把空间递归八分:空旷区域只存一个大节点(该区域全空),障碍附近才细分到最细分辨率。同样一座仓库,均匀栅格 100 兆字节的内容,八叉树可以压到几兆。查询代价略增(要沿树下降),但对导航任务的典型查询("机器人周边一小块能不能走")影响甚微。多分辨率的另一个好处自然涌现:远处的粗分辨率天然匹配"远处不需要那么准"的感知现实——地图的精度梯度与感知的精度梯度对齐了。
地图不是建完就冻结的资产。货架搬动、装修改造、季节变化(室外场景的落叶积雪)都会让地图过时。工程上有两级响应:局部更新(运行时发现局部观测与地图长期不符,自动更新对应区域的占据概率,并记录变更区域);版本重建(变更积累到阈值,安排重新建图,新旧版本对照后切换)。版本管理的关键是"地图与定位的一致性"——切换新地图的瞬间,正在运行的机器人要能平滑过渡(通常在回环点或充电桩处切换)。这套机制与软件的版本管理同构,运维成熟的团队把地图当作"会老化的代码"来管理。
按"全局拓扑加局部度量"的两级结构。顶层是一张楼层间的拓扑图(楼梯、电梯为节点边),每层楼内各挂一张独立的度量地图。机器人跨层时,拓扑层给出"走哪个电梯到哪层",楼层内切换到对应度量地图做精细定位与规划。层间地图的坐标系由拓扑边的变换关系缝合(电梯口的位姿对齐)。这套结构还天然支持权限隔离:某层临时封闭,只需在拓扑层标记边不可通行,不必动任何一张度量地图。
补三类地图的工程取舍表:占据栅格(概率占据的二维网格)是移动机器人的默认选择——建图查询都是常数时间、可直接做路径规划的膨胀障碍,代价是分辨率与内存的取舍(五厘米格距下一万平方米约四百万格,完全可接受);拓扑地图(节点加边)适合结构化环境的大范围导航(楼层、走廊),存储极省但丢失几何细节;点云地图(三维点集)保真最高但直接用于规划太重,通常配分层索引(八叉树)或抽稀。实践中最常见的是混合方案:占据栅格做规划、点云做展示与定位特征源、拓扑做楼层间调度。选型判断只有一条:查询频率最高的操作(碰撞检查、最近障碍、可达性)决定数据结构——先列查询再选地图,顺序反了就会为不需要的保真度付出内存与更新的代价。
再补地图更新的一个实时性技巧:增量更新与全量重建的分工。占据栅格的实时更新只需沿激光束打到的单元格做概率更新(命中加占据、穿过的格减占据),单帧毫秒级;但累积误差(动态物体留下的残影、墙面轻微错位)需要周期性的全量或局部重建来清理——实践中每几分钟对机器人周边若干米做局部重绘即可。动态物体(走过的人)的处理用占据突变检测:某格长期空旷突然被占据又在数秒后恢复,标记为动态并从静态地图中剔除,同时为规划器生成临时障碍。这套增量加局部重绘加动态剔除的组合,是服务机器人在半动态环境(白天人流、晚上货架调整)里地图长期可用的三件套,缺一件都会在运行几周后出现机器人绕着空气走的怪象。