第1章:地图表示方法——栅格、拓扑与特征地图

大家好,我是老张。做机器人避障这些年,我踩过最大的坑就是——地图选错了。你想想看,地图是机器人的眼睛,眼睛都不好使,后面路径规划再牛也白搭。

今天咱们就把三种主流地图掰开揉碎讲清楚。我个人习惯把地图选择比作穿鞋:栅格地图是运动鞋,啥路都能走但有点笨重;拓扑地图是拖鞋,轻便但挑路;特征地图是登山鞋,专业但贵。

1.1 栅格地图(Occupancy Grid Map)

栅格地图,说白了就是把环境切成一个个小格子。每个格子存一个概率值,表示这个格子有没有障碍物。

核心思想: 把连续空间离散化,用概率表示不确定性。

我在项目中遇到过最典型的场景:扫地机器人。它不需要知道墙是什么材质,只需要知道「这个格子能不能走」。栅格地图天然适合这种场景。

栅格地图的构建

构建过程其实就三步:

  1. 确定分辨率——格子大小。我建议室内用5cm,室外用20cm。太小了计算量爆炸,太大了精度不够。
  2. 传感器数据投影——激光雷达扫到障碍物,就把对应格子标记为占据。
  3. 概率更新——多次观测取平均,降低噪声影响。

嗯,这里要注意:分辨率不是越高越好。我曾经为了追求精度,把格子设成1cm,结果一个100平米的房间,地图占了200MB内存,机器人跑起来跟老牛似的。

占据栅格地图的更新原理

这是本章的重点。为什么叫「占据栅格」?因为每个格子存的是概率,不是0或1。

更新公式其实很简单:

// 伪代码:占据栅格更新
// l代表对数概率,z代表观测值
l_new = l_old + log(P(z|occupied) / P(z|free))

// 实际代码中常用:
// 观测到障碍物:l += 0.85
// 观测到空闲:  l -= 0.40

为什么会这样?因为传感器有噪声。你扫到一次障碍物,不一定真有障碍物;扫到一次空闲,也不一定真空闲。所以要用概率慢慢「说服」地图。

我的经验: 更新步长不要设太大。我习惯用0.4和0.2,宁可收敛慢一点,也别让地图乱跳。曾经有个项目,同事把步长设成1.0,结果机器人转个弯,地图就全乱了。

1.2 拓扑地图(Topological Map)

拓扑地图,说白了就是地铁线路图。它不关心具体距离,只关心「节点」和「连接关系」。

你想想看,从家到公司,你不需要知道每一条路有多宽、路边有几棵树。你只需要知道:出门左转,走到地铁站,坐3站,出站右转。这就是拓扑地图的思维。

拓扑地图的构建

构建拓扑地图,核心是提取「关键点」:

  • 节点:走廊拐角、房间门口、电梯口等
  • :节点之间的可通行路径
  • 权重:距离、时间、能耗等

我记得有个仓储机器人项目,用栅格地图跑得好好的,但客户要求机器人能听懂「去A货架拿货」。这就得用拓扑地图了——把每个货架设为一个节点,机器人只需要知道「从当前位置到A货架怎么走」,不需要知道中间经过了多少个格子。

避坑指南: 我曾经在一个动态环境里只用拓扑地图,结果货架被移动后,拓扑关系全乱了。拓扑地图对环境变化很敏感,节点一旦失效,整个图就废了。

1.3 特征地图(Feature Map)

特征地图,是给「懂行」的机器人用的。它不存格子,也不存节点,而是存环境中的几何特征——直线、角点、圆弧等。

说白了,特征地图就像你画素描:不画每一根头发,只画轮廓和关键转折点。

特征地图的构建

构建过程分两步:

  1. 特征提取——从激光雷达数据中提取直线、角点等
  2. 特征匹配——把当前观测的特征和地图中的特征做匹配

举个例子,走廊环境:

// 提取直线特征
// 输入:激光点云
// 输出:直线参数 (rho, theta)

// 我用的是Split-and-Merge算法
// 1. 找到距离直线最远的点
// 2. 如果距离大于阈值,分裂成两段
// 3. 递归处理

特征地图最大的优势是——紧凑。一个1000平米的工厂,栅格地图可能要几MB,特征地图几十KB就够了。但缺点也很明显:特征提取容易受噪声影响。

1.4 三种地图的对比

好了,三种地图都讲完了。咱们做个对比,方便你选型:

特性 栅格地图 拓扑地图 特征地图
存储空间 极小
构建难度
定位精度
动态环境适应性
路径规划效率
典型应用 扫地机器人 仓储机器人 自动驾驶

我的建议: 新手先从栅格地图入手。它最直观,调试也方便。等把栅格地图玩透了,再考虑拓扑和特征地图。别一上来就想搞高大上的,容易翻车。

1.5 知识体系总览

下面这张图,是我自己总结的三种地图的核心逻辑。你把它存脑子里,后面学路径规划就顺了:

地图表示方法知识体系 地图表示方法 栅格地图 拓扑地图 特征地图 离散化网格 概率更新 适合避障 节点+边 拓扑关系 适合导航 几何特征 紧凑表示 适合定位 选择原则:环境复杂度 × 传感器精度 × 计算资源

嗯,这一章的内容就到这里。三种地图各有千秋,没有绝对的好坏。关键看你的机器人要干什么、在什么环境里跑。

我个人建议:先拿栅格地图练手,把占据栅格更新原理吃透。这是最基础、最实用的地图表示方法。后面学路径规划,你会发现栅格地图配合A*算法,简直是绝配。


专注资料整理