
室内导航系统 07:地图不是一张图,而是五种空间表达的组合
机器人项目常把地图理解成建图软件保存的一张图片。实际上,导航系统要回答五类问题:
- 哪里有障碍;
- 离障碍多远;
- 地面能否通过;
- 这里是什么区域;
- 长距离应该走哪条路线。
一种地图很难高效回答全部问题。成熟系统会维护多层空间表达,并明确谁负责更新、谁可以覆盖谁。
1. 占据栅格:平面可达性的基础
二维栅格把每个单元表示为占据、空闲或未知。它适合:
- 室内平面全局规划;
- AMCL/scan matching;
- 禁行区与膨胀层;
- 低算力设备。
优点是简单、生态成熟;缺点是把高度压平。桌板、悬空障碍、台阶和坡度会丢失。
全局静态地图可以长期保存,局部 costmap 则应快速衰减动态障碍。不要把人群短暂观测永久写进静态图。
2. 三维占据体素:回答“空间里是否有东西”
体素地图将 3D 空间离散为小立方体,适合表达货架、桌面、机械臂工作区和机体高度范围的障碍。
关键参数包括:
- 体素分辨率;
- 地图范围;
- 占据概率更新;
- free-space ray casting;
- 动态衰减;
- 是否分层存储语义。
分辨率减半,体素数量理论上可能增长八倍,因此通常使用稀疏哈希、Octree 或局部滚动窗口。
3. TSDF 与 ESDF:重建和规划不是同一张场
TSDF(截断符号距离场)在表面附近存储带符号距离,适合融合深度并重建平滑表面。它回答“表面大概在哪里”。
ESDF(欧氏符号距离场)存储到最近障碍的欧氏距离,适合轨迹优化和碰撞查询。它回答“当前位置离障碍还有多远”。
深度/点云
→ TSDF 融合与表面重建
→ 占据判断
→ ESDF 距离传播
→ 轨迹代价与碰撞梯度
对需要三维局部规划的轮足机器人和移动机械臂,ESDF 比单纯占据值更有用,因为优化器能获得连续距离梯度。
4. 高程地图:地面机器人最有效的 2.5D 表达
高程地图按平面网格保存高度、方差、坡度、粗糙度和可通行性。它比完整 3D 体素更省内存,又能表达坡道、门槛和台阶。
适合:
- 四足和轮足机器人;
- 轻度起伏的室内外过渡;
- 对地面高度敏感的 AMR;
- 局部落足与机体姿态规划。
它的盲点是同一平面位置存在多层表面,例如桌面上方、楼梯下方或桥梁。多模态高程图或局部体素可以补充。
5. 语义与拓扑地图:把几何变成任务空间
语义层描述:
- 房间、走廊、门、电梯;
- 禁行、限速、单向、洁净区域;
- 充电位、装卸位和等待位;
- 玻璃、软帘、地毯等感知特殊区域。
拓扑图则把空间压缩成节点和边:
节点:门口、电梯厅、路口、站点
边:可通行关系、距离、时间、方向、速度、权限
它适合跨楼层和大楼长距离路由,也方便执行“到电梯口 → 召梯 → 进梯 → 切换楼层地图”的任务逻辑。
Nav2 的 Route Server 可以使用预定义图做长距离路线,同时在短距离仍由 freespace planner 根据局部环境生成可行路径。
地图组合建议
平面服务机器人
静态 2D occupancy
+ 局部 2D costmap
+ 语义 zone
+ 大楼 route graph
RGB-D/3D LiDAR AMR
2D 全局地图
+ 局部 3D voxel/TSDF
+ 2D 投影 costmap
+ 语义与动态障碍层
轮足机器人
全局 2D/拓扑路线
+ 机器人中心局部高程图
+ 3D 障碍/ESDF
+ 可通行性与落足层
谁可以修改地图
地图层的更新权必须分开:
- 建图后端更新几何;
- 运营平台更新禁行与限速;
- 感知系统更新短时动态障碍;
- 任务系统临时封闭路线;
- 人工审核永久结构变化。
不应让局部避障把一个人写进永久地图,也不应让大模型直接修改几何占据。大模型可以提出语义候选,例如识别“这里可能是会议室”,但最终写入要经过规则或人工确认。
地图一致性与版本
各层必须共享坐标基准和版本关系。若几何地图更新,旧语义 polygon 可能偏移;若电梯位置调整,拓扑边也要重建。
地图 manifest 应记录:
geometry_version
semantic_version
route_version
calibration_version
valid_from / rollback_to
compatible_robot_profiles
上线前运行静态检查:语义区域是否落在地图内、路线边是否穿墙、停靠位是否有足够 footprint、楼层切换锚点是否存在。
地图不是 SLAM 的副产品,而是导航、任务和运营共同依赖的数据产品。选对表达,比把一张点云做得更密更重要。