4. 环境表示与地图

路径规划算法的输出质量,很大程度上取决于它“看到”的世界是什么样子。同一段道路,用不同的地图表示方式描述,规划器面对的搜索空间、约束形式和计算代价会完全不同。本节把自动驾驶中常用的四类环境表示——高精地图、栅格地图、拓扑地图、语义地图——放在同一坐标系下比较,并给出道路网络建模的工程方法。

一、核心原理:四种表示的本质差异

环境表示的核心问题只有一个:把连续、高维、带语义的真实世界,压缩成规划器可计算的数据结构。压缩方式不同,就产生了不同地图类型。

  • 高精地图(HD Map):以厘米级精度记录车道中心线、车道边界、路沿、交通标志、信号灯、停止线等几何与属性信息。它是“几何+语义”的稠密表示,通常以矢量要素(点、折线、多边形)存储,配合 Lanelet2、OpenDRIVE 等格式。规划器可直接从中提取参考线和可行驶区域。
  • 栅格地图(Grid Map):把空间离散为固定分辨率的格子,每格记录占据概率、高度或代价。它天然支持碰撞检测与代价传播,适合泊车、越野和局部避障,但分辨率提高会带来内存与计算量的平方级增长。
  • 拓扑地图(Topological Map):把道路抽象为“节点+边”的图结构,节点表示路口、关键点,边表示可通行路段及其代价。它忽略精确几何,专注连通性,是全局路径搜索(Dijkstra、A*)的高效载体。
  • 语义地图(Semantic Map):在几何之上叠加类别标签,如“可行驶区域”“人行横道”“施工区”“公交专用道”。它让规划器不仅知道“哪里能走”,还知道“哪里该怎么走”。
四类地图不是互斥选项,而是同一环境在不同抽象层级上的投影。工程上常见做法是:高精地图提供几何与语义底座,拓扑地图用于全局路由,栅格地图用于局部避障,语义地图用于行为约束。

二、方法流程:从原始数据到可规划地图

以一段城市道路为例,地图构建与使用通常经过以下流程:

  1. 数据采集与建图:激光雷达、相机、GNSS/IMU 采集原始数据,经 SLAM 或离线建图生成点云与矢量要素。
  2. 要素提取与标注:提取车道线、路沿、停止线、交通标志,并标注车道连接关系、限速、转向限制等属性。
  3. 拓扑构建:将车道段抽象为边,路口抽象为节点,建立有向图,记录每条边的长度、曲率、限速、通行代价。
  4. 栅格化与代价层:在局部范围内把障碍物、可行驶区域栅格化,生成占据栅格与代价地图。
  5. 语义融合:把交通规则、施工区、临时管制等语义信息绑定到对应几何区域。
  6. 规划调用:全局规划在拓扑图上搜索,局部规划在栅格/语义地图上做轨迹优化与碰撞校验。

下面给出一个拓扑图边的典型数据结构,规划器在搜索时会直接读取这些字段:

edge:
  id: "lane_1024_0"
  from_node: "intersection_7"
  to_node: "intersection_8"
  length_m: 86.4
  speed_limit_kph: 50
  curvature_max: 0.012
  lane_width_m: 3.5
  successors: ["lane_1024_1", "lane_1025_0"]
  cost: 12.7   # 综合长度、限速、转向惩罚

三、道路网络建模的关键参数与对比

不同地图表示在精度、存储、更新频率和适用任务上差异明显,工程选型时需要对照下表权衡。

表示类型典型精度存储开销更新频率最适合的任务
高精地图厘米级高(GB 级)低(周/月)车道级全局规划、参考线生成
栅格地图分米级中高(随分辨率平方增长)高(每帧)局部避障、泊车、越野
拓扑地图米级低(MB 级)低全局路由、多路口搜索
语义地图分米级中中(事件驱动)行为决策、规则约束、场景理解

道路网络建模中还有几个必须明确的参数:节点粒度(路口是否细分到每个进口道)、边方向性(单行/双行)、连接合法性(禁止左转、掉头限制)、代价函数(长度、时间、能耗、舒适度加权)。这些参数直接决定全局路径是否合法、是否可执行。

四、案例与场景:一个路口的三层地图协同

假设自车接近一个带左转专用道的十字路口,规划栈的典型工作方式是:

  • 拓扑层:在全局图上搜索到目标的最短时间路径,确定“本路口左转”。
  • 高精地图层:提取左转车道中心线作为参考线,给出曲率、限速和停止线位置。
  • 语义层:识别左转待转区、人行横道、信号灯相位,约束轨迹不得压线、不得在红灯时越过停止线。
  • 栅格层:对周围车辆、行人、锥桶做实时占据检测,局部轨迹优化时逐点校验碰撞。

如果缺少语义层,规划器可能生成一条几何上可行、但违反交通规则的左转轨迹;如果缺少栅格层,则可能忽略突然出现的行人。三层协同,才能同时满足合法性、安全性与舒适性。

调优提示:当全局路径出现“绕远”或“非法转向”时,优先检查拓扑图的连接合法性与代价权重,而不是先调局部规划参数。多数路径异常源于地图层,而非算法层。

五、误区与复盘

误区一:认为高精地图越精细越好。 精度提升会带来存储、传输和更新成本,且规划器真正需要的是“可行驶区域+连接关系+关键约束”,而非全部原始点云。

误区二:用栅格地图做全局规划。 大范围栅格搜索会带来巨大的计算量,且难以表达车道级规则。栅格应限定在局部窗口内使用。

误区三:拓扑图只建几何,不建规则。 若边属性缺少转向限制和限速,全局路径可能合法连通但不可行驶,导致下游频繁重规划。

误区四:语义地图一次性建好就不再更新。 施工区、临时管制、事故路段是动态语义,必须有事件驱动的更新通道,否则规划器会持续输出过时决策。

复盘要点:地图是规划系统的“地基”。当地图表示与规划任务不匹配时,任何参数调优都只能缓解症状,无法根治问题。建议在调优前先做一次“地图-任务匹配度”检查:全局用拓扑、局部用栅格、约束用语义、参考线用高精。
环境表示四层协同:从全局路由到局部避障 高精地图 车道中心线 / 边界 停止线 / 曲率 / 限速 → 参考线生成 拓扑地图 节点:路口 / 关键点 边:可通行路段 + 代价 → 全局路由搜索 语义地图 可行驶区 / 人行横道 施工区 / 公交专用道 → 行为规则约束 栅格地图 占据概率 / 代价 分辨率 / 高度 → 局部碰撞检测 路径规划器 全局搜索 + 局部优化 + 规则校验 安全、合法、舒适轨迹 满足连通性 / 规则 / 碰撞约束 高精提供几何底座 · 拓扑负责全局路由 · 语义约束行为 · 栅格保障局部安全 地图表示与规划任务匹配,是路径规划调优的前置条件

总结来看,环境表示不是单一技术选型,而是一套分层协同的数据体系。理解每类地图的抽象层级、精度代价与适用任务,才能在路径规划调优中快速定位问题:是地图没建对,还是算法没调好。把地图层与规划层的接口定义清楚,后续的代价调参、轨迹优化和验证才有稳定的基础。