环境表示方法:让机器人「看懂」世界的五种方式

做机器人规划这么多年,我最大的感触就是——地图选不对,规划全白费。你想想看,一个机器人要在未知环境里穿梭,它总得知道「我在哪」「周围有啥」「哪里能走」吧?这就是环境表示方法要解决的问题。

今天咱们聊五种主流的地图表示方式。每种都有它的脾气,也有它的用武之地。我按自己的理解,把它们分成了两类:度量地图和拓扑地图。前者关心「精确位置」,后者关心「连接关系」。

环境表示方法 度量地图(精确位置) 拓扑地图(连接关系) 栅格地图 代价地图 ESDF 八叉树地图 节点+边 核心思路:不同场景选不同地图,没有银弹 精度 vs 效率 vs 存储,三者永远在博弈

1. 栅格地图:最朴素的「格子世界」

栅格地图,说白了就是把环境切成一个个小方格。每个格子要么是「空闲」(能走),要么是「占据」(有障碍),要么是「未知」(没探测到)。

我记得刚入行时做第一个项目,用的就是栅格地图。当时觉得这玩意儿太简单了,不就是个二维数组嘛。结果真跑起来才发现——分辨率选多大就是个头疼事。

关键参数:分辨率

  • 分辨率太高(比如1cm):地图精细,但内存爆炸。一个100m×100m的区域,就是1亿个格子。
  • 分辨率太低(比如1m):内存省了,但机器人可能「卡」在门缝里出不来。

我的经验:室内移动机器人,5cm分辨率是个不错的起点。室外的话,可以放宽到10-20cm。别一上来就追求1cm精度,先跑通再说。

2. 代价地图:给每个格子「打分」

栅格地图只告诉你「能不能走」,代价地图则告诉你「好不好走」。每个格子都有一个代价值,规划器会优先选择代价低的路径。

代价地图是怎么来的?通常是在栅格地图基础上,对障碍物做膨胀处理。离障碍物越近,代价越高。这样机器人就会自动「躲着走」,而不是贴着墙蹭过去。

我曾经遇到过一个坑:代价地图的膨胀半径设得太小,机器人总是「擦肩而过」撞到障碍物。后来改成机器人半径+安全余量,问题就解决了。

注意:代价地图的更新频率很关键。动态障碍物(比如行人)出现时,代价地图必须快速更新。我见过一些方案用滑动窗口局部代价地图,效果不错。

3. ESDF:距离信息「一步到位」

欧几里得符号距离场,名字听着唬人,其实原理很简单:每个格子存一个数值,表示它到最近障碍物的距离。正数表示在自由空间,负数表示在障碍物内部。

ESDF 最大的好处是——规划器可以直接用梯度信息。比如你要做轨迹优化,ESDF 能告诉你「往哪个方向走更安全」。这在无人机避障里特别常用。

我建议做运动规划的朋友,尤其是做优化-based 方法的,一定要掌握 ESDF。它比栅格地图多了一层「距离感知」,规划出来的轨迹平滑很多。

ESDF 的典型应用场景:

  • 无人机在森林中穿行
  • 机械臂在狭小空间里抓取
  • 任何需要「柔顺避障」的场景

4. 八叉树地图:三维空间的「省内存神器」

栅格地图在二维还行,到了三维就麻烦了。一个 100m³ 的空间,1cm 分辨率就是 10 亿个体素,内存直接爆炸。

八叉树地图(OctoMap)就是来解决这个问题的。它的核心思想是:大块空白区域用一个大节点表示,只有细节丰富的区域才细分。说白了,就是「该省的地方省,该细的地方细」。

我记得做无人机项目时,用栅格地图存三维环境,跑着跑着内存就飙到 2GB 以上。换成八叉树后,同样的环境只用了 200MB。嗯,差距就是这么明显。

实用建议:OctoMap 支持概率更新,可以处理动态障碍物。但要注意,它不适合做精确的碰撞检测,因为边界是近似表示的。

5. 拓扑地图:只关心「怎么走」

前面四种都是度量地图,关心「精确位置」。拓扑地图则完全不同——它只关心节点之间的连接关系。

想象一下地铁线路图。你不会关心每站之间的精确距离,你只关心「从 A 站到 B 站,坐几号线,换乘几次」。拓扑地图就是这种思路。

拓扑地图的优点是轻量、高效。做全局路径规划时,先在拓扑图上找出一条「粗路径」,再用度量地图做局部优化。这种分层思路,我在很多工业项目里都用过。

拓扑地图 vs 度量地图:

对比维度 度量地图 拓扑地图
存储空间 大 小
定位精度 高 低
规划速度 慢 快
适用场景 局部避障、精细操作 全局导航、任务规划

怎么选?我的一点心得

说实话,没有哪种地图是「万能」的。我个人的习惯是:

  • 做室内移动机器人:栅格地图 + 代价地图,简单够用
  • 做无人机:ESDF 或八叉树,看你对精度的要求
  • 做大范围导航:拓扑地图做全局,度量地图做局部

你想想看,如果让一个扫地机器人用 ESDF 跑全屋,那计算量得有多大?反过来,让无人机用栅格地图做避障,那轨迹得多僵硬?选对工具,比用好工具更重要。

避坑指南:我曾经在一个项目里,试图用八叉树地图做精确的碰撞检测,结果发现边界误差导致机器人频繁「误报」碰撞。后来换成 ESDF 才解决。所以——八叉树适合「大概知道有没有障碍」,ESDF 适合「精确知道距离障碍多远」。

好了,这五种地图就聊到这儿。每种都有它的脾气,也有它的用武之地。做项目时多试试,找到最适合你场景的那一款。


可可精品资料库