2、环境建模基础:栅格地图、拓扑地图、点云地图的构建与选择。我如何根据场景选择合适的地图?

做轨迹规划这些年,我踩过最大的坑就是——地图选错了。你想想看,明明算法调得挺好,仿真也跑得飞起,一上真机就撞墙。后来我发现,八成是环境建模这一步没走对。

今天咱们就聊聊三种主流地图:栅格地图、拓扑地图、点云地图。我会结合自己的项目经验,告诉你什么时候该用哪个。

2.1 栅格地图:最直观,但别滥用

栅格地图,说白了就是把环境切成一个个小格子。每个格子要么是障碍物(黑色),要么是自由空间(白色)。

构建方式:

  • 激光雷达扫描 + 占据栅格更新算法
  • 深度相机投影 + 贝叶斯滤波
  • 也可以直接加载已知CAD图纸转成栅格

核心参数:分辨率(格子大小)。我习惯用 0.05m 做室内机器人,0.2m 做室外AGV。太小了计算量爆炸,太大了路径不精确。

优点:

  • 实现简单,A*、Dijkstra 直接往上怼
  • 容易做膨胀层(安全距离)
  • 可视化直观,调试方便

缺点:

  • 存储量大——100m×100m 区域,0.05m 分辨率就是 400万个格子
  • 动态环境更新慢
  • 无法表达语义信息(比如“这是桌子”、“那是门”)

我的经验:在仓储AGV项目中,我一开始用了0.02m高分辨率栅格地图,结果路径规划一帧要算200ms。后来改成0.1m,配合分层规划(先粗后细),速度提升到15ms。嗯,这里要注意:分辨率不是越高越好。

2.2 拓扑地图:轻量级,适合大场景

拓扑地图不关心具体几何形状,只关心“节点”和“边”。节点代表关键位置(比如路口、工位),边代表连通关系。

构建方式:

  • 手动标注:适合固定路线场景
  • 从栅格地图自动提取:用Voronoi图或Thinning算法
  • SLAM过程中增量构建
// 一个简单的拓扑地图结构
struct TopoNode {
    int id;
    double x, y;          // 实际坐标(可选)
    vector<int> neighbors; // 邻居节点ID
    string label;          // "充电站"、"A工位"等语义
};

struct TopoEdge {
    int from, to;
    double cost;           // 距离或时间代价
};

优点:

  • 存储极小,1000个节点也就几十KB
  • 路径搜索极快(图搜索算法)
  • 天然支持语义信息

缺点:

  • 丢失细节,无法做精确避障
  • 构建过程依赖其他地图
  • 动态障碍物处理困难

我曾经在一个商场配送机器人项目里,只用拓扑地图做全局规划。结果机器人走到节点之间的“边”上时,被临时摆放的促销展台挡住了。从那以后,我坚持拓扑地图只做“粗规划”,局部避障必须用栅格或点云。

2.3 点云地图:精度之王,但别轻易用

点云地图就是一堆三维点的集合。每个点有 (x, y, z) 坐标,有时还带颜色或反射强度。

构建方式:

  • 激光雷达:Velodyne、Livox 等,直接输出点云
  • 深度相机:RGB-D 传感器,每个像素反投影成三维点
  • 多帧拼接:用ICP或NDT算法对齐

优点:

  • 精度极高,毫米级
  • 支持三维空间规划(无人机、机械臂)
  • 可以做障碍物识别(聚类、分割)

缺点:

  • 数据量巨大——一帧16线激光雷达就有3万个点
  • 处理复杂,需要GPU加速
  • 噪声敏感,需要滤波

避坑指南:点云地图不是越密越好。我见过有人用128线激光建图,一帧30万个点,结果算法跑不动。实际项目中,16线激光 + 体素滤波下采样到0.1m分辨率,效果已经足够。

2.4 如何选择?一张图说清楚

下面这张图是我自己总结的选型逻辑,你可以直接拿去用:

地图选型决策流程 开始:你的场景是? 需要三维信息吗?(无人机/机械臂) 是 否 点云地图 栅格 or 拓扑 场景大于1000m²?需要语义? 是 否 拓扑地图 栅格地图

2.5 实际项目中的混合策略

说实话,现实项目很少只用一种地图。我个人习惯用“三层地图架构”:

层级 地图类型 用途 更新频率
全局规划 拓扑地图 从A点到B点的路线规划 低频(每次任务前)
局部规划 栅格地图 实时避障、路径平滑 中频(10Hz)
感知层 点云地图 障碍物检测、定位匹配 高频(20-50Hz)

举个例子:我在做园区无人配送车时,全局用拓扑地图(节点是各栋楼门口),局部用栅格地图(分辨率0.2m,实时更新),感知层用16线激光点云做障碍物检测。三层配合,既保证了效率,又兼顾了安全性。

2.6 总结:记住这三句话

  • 要精度、要三维 → 点云地图(但要做好下采样)
  • 要效率、要简单 → 栅格地图(注意分辨率取舍)
  • 要大场景、要语义 → 拓扑地图(配合局部规划使用)

最后说一句:地图选型没有银弹。我见过用栅格地图做100km矿区规划的,也见过用拓扑地图做室内精细避障的。关键是你得想清楚——你的机器人到底需要什么信息才能安全到达目的地?想明白这个,地图自然就选对了。

可可精品资料库