3.4 长程自主与环境表征:地图、记忆与重定位 SLAM 系统在 demo 里很完美,但真机部署要面对一个残酷现实:机器人会关机、会被搬到新地方、要在变了样的环境里工作。长程自主(Long-term Autonomy)才是 SLAM 真正的工程试金石。 3.4.1 长程自主的四大挑战 一个家庭服务机器人要稳定运行数月,必须解决: 挑战 | 描述 | 典型场景 重定位(Relocalization) | 关机重启后找回自己在地图中的位置 | 充电后唤醒 环境变化 | 物体被搬走、家具被移动、光照变化 | 白天 vs 夜晚、家里大扫除后 地图持久化 | 跨会话维护一份持续可用的地图 | 每天清扫同一套房子 大场景扩展 | 园区、楼宇级地图的存储与查询 | 商场送餐机器人 这些挑战在 demo
SLAM 系统在 demo 里很完美,但真机部署要面对一个残酷现实:机器人会关机、会被搬到新地方、要在变了样的环境里工作。长程自主(Long-term Autonomy)才是 SLAM 真正的工程试金石。
一个家庭服务机器人要稳定运行数月,必须解决:
| 挑战 | 描述 | 典型场景 |
|---|---|---|
| 重定位(Relocalization) | 关机重启后找回自己在地图中的位置 | 充电后唤醒 |
| 环境变化 | 物体被搬走、家具被移动、光照变化 | 白天 vs 夜晚、家里大扫除后 |
| 地图持久化 | 跨会话维护一份持续可用的地图 | 每天清扫同一套房子 |
| 大场景扩展 | 园区、楼宇级地图的存储与查询 | 商场送餐机器人 |
这些挑战在 demo 阶段都不存在(demo 总是从已知起点、在静态环境、单次运行),但在生产系统中是头号难题。
重定位(Relocalization) 是 SLAM 系统最重要的工程能力之一。问题定义:
给定一张地图和机器人当前的一帧(或多帧)观测,求机器人在地图中的位姿。
主流方法:
| 方法 | 思路 | 优势 | 劣势 |
|---|---|---|---|
| 基于词袋的位置识别 | DBoW2 检索最相似关键帧,再 PnP 求位姿 | 快速、成熟 | 依赖视觉相似性 |
| 深度学习位置识别 | NetVLAD、CosPlace 等学习全局描述子 | 鲁棒、抗光照变化 | 需训练数据 |
| 粒子滤波重定位 | 在地图上撒粒子,按观测似然收敛 | 适合 2D 激光 | 收敛慢 |
| 结构对齐 | 点云/线特征的 ICP 配准 | 精度高 | 需良好初值 |
| Learning-based 端到端 | 直接从图像回归位姿 | 简单 | 泛化有限 |
⚠️ 重定位失败的后果:重定位失败 = 机器人「不知道自己在哪」= 完全瘫痪。生产系统必须设计 fallback——比如让机器人原地转 360°,多帧观测提高重定位成功率;或退回安全模式请求人工干预。
机器人每天运行是一个「会话(Session)」,每个会话产生一份局部地图。多会话地图融合(Multi-session Mapping) 把这些局部地图拼成持久全局地图:
关键技术:
真实环境是动态的——椅子被推开、水果被吃掉、灯被关掉。一份静态地图几天就过期。地图生命周期管理(Map Lifecycle) 解决这一问题:
把地图元素按持久性分类:
| 类别 | 例子 | 更新策略 |
|---|---|---|
| 静态结构 | 墙、柱、固定家具 | 长期保留 |
| 半静态物体 | 沙发、桌椅 | 周期性更新 |
| 动态物体 | 人、车、临时物品 | 不入地图,或单独「瞬时层」 |
| 环境状态 | 门开/关、灯亮/暗 | 状态机管理 |
对每个地图元素维护一个「存在概率」,新观测提升概率,长时间无观测衰减:
其中 λ 是衰减率,\alpha 是新观测的提升。这样过时元素自然降权,长期不见的元素被淘汰。
更复杂的方案把时间维度纳入因子图,让地图元素带「时间有效区间」。代表工作如 Maplab(ETH)支持多会话地图的时空管理、注释、可视化、编辑,是研究长程 SLAM 的开源基础设施。
当机器人迷路且重定位失败,它能做什么?主动重定位(Active Relocalization) 让机器人主动运动到信息量大的位置(如回头、转向标志性物体),提高重定位成功率。
更进一步是主动 SLAM(Active SLAM):机器人自主决定下一步去哪,目的是最大化地图覆盖与定位精度。这本质是一个探索-利用(Exploration-Exploitation)问题:
主流策略:
主动 SLAM 在搜救、采矿、深海探测等场景有重要应用,但计算成本高,离通用部署还有距离。
园区、商场、城市级 SLAM 不能用单一全局地图(内存爆炸 + 优化慢),必须分层:
全局拓扑层 Topological Map ├── 节点:房间、走廊、楼宇 └── 边:连通关系(可通行路径) 区域度量层 Metric Map ├── 每个拓扑节点对应一份局部度量地图 └── 局部内精确,跨区域用拓扑规划 物体语义层 Semantic Layer └── 每个区域的物体、关系、属性
层次化规划:高层(拓扑)做粗规划「从 A 楼到 B 楼」,低层(度量)做精细路径「绕过这个桌子」。这是大型机器人系统的标准架构,如商场送餐、医院物流、仓库搬运机器人。
更进一步,多机器人协同建图把 SLAM 推向云端:
代表工作如 Google Cartographer 的多机器人扩展、波士顿动力 Spot 的协同建图。这是「具身智能基础设施化」的方向——SLAM 不再是单机器人能力,而是机器人集群的共享资源。
最近,NeRF 和 3D Gaussian Splatting 开始作为地图表征进入长程 SLAM:
| 表征 | 优势 | 劣势 |
|---|---|---|
| NeRF 地图 | 紧凑(一个网络)、可微、可重渲染 | 训练慢、对动态敏感 |
| 3DGS 地图 | 渲染快、可微、显式表达 | 内存大、删除更新麻烦 |
| 传统点云/网格 | 成熟、工具链全 | 不可微、无外观信息 |
神经表征地图的核心价值在于可微渲染——可以从任意视角合成图像,用于:
但 NeRF/3DGS 地图当前还难做到实时增量更新(一边走一边建),且对动态场景支持有限。这是未来几年的研究热点。
总结一套生产级长程 SLAM 的工程实践:
💡 生产箴言:SLAM 永远会失败,关键是「失败时优雅降级」。一个生产级机器人必须设计为「SLAM 失败时仍能安全停下、请求帮助、不伤人损物」,而不是假设 SLAM 永远可靠。
至此第 3 章结束。你已经理解了机器人建立空间记忆的全部技术栈:数学框架(3.1)、工程实现(3.2)、语义增强(3.3)、长程运维(3.4)。下一章《第 4 章 具身决策与大脑(一):大模型任务规划》将进入闭环的中枢——大语言模型如何指挥机器人完成长程任务。