3. 语义地图基础

在机器人、自动驾驶与具身智能系统中,地图不再只是“哪里能走”的几何描述,而是逐步演化为“这里是什么、意味着什么、当前是否可信”的综合环境模型。语义地图正是在这一需求下出现的核心数据结构。它把几何空间、物体类别、属性信息、置信度与时间状态统一组织起来,使系统能够完成语义查询、任务推理和地图更新。

一、语义地图的定义

语义地图可以理解为:在空间坐标框架下,对环境中实体、区域及其语义属性进行结构化表达的地图。它不仅回答“障碍物在哪里”,还回答“这个障碍物是车辆、行人、锥桶还是可通行区域”,并进一步携带类别、速度、朝向、置信度、观测时间等属性。

从工程角度看,语义地图至少包含四个要素:

  • 空间基准:统一坐标系,如 map、odom、UTM 或局部 ENU。
  • 语义实体:车道线、路沿、交通标志、动态目标、可通行区域等。
  • 属性集合:类别、尺寸、颜色、速度、朝向、置信度、生命周期。
  • 更新机制:新增、删除、合并、衰减、版本管理与冲突消解。
语义地图的本质不是“带标签的点云”,而是可被任务层查询、推理和更新的环境知识库。

二、常见表示形式

语义地图的表示形式取决于感知模态、任务需求和更新频率。常见形式包括:

表示形式 核心特点 典型用途 更新难点
语义栅格图 每个栅格带类别或概率 可通行区域、局部避障 分辨率与内存开销
语义点云 点级标签,保留原始几何 离线标注、重建、训练 数据量大、动态点难清理
对象级地图 以目标实例为中心,带属性 动态目标跟踪、预测 数据关联与ID维护
矢量图层地图 车道线、路沿、多边形等矢量要素 高精地图、路径规划 几何拟合与拓扑一致性
拓扑语义图 节点表示地点,边表示关系 任务规划、语义导航 节点抽象与关系更新

实际系统往往采用混合表示:底层用栅格或点云保证几何精度,中层用对象实例维护动态目标,上层用矢量图层和拓扑图支撑规划与推理。

三、图层结构:从几何到语义的分层组织

语义地图通常不是一张“平铺”的图,而是按图层组织。每一层承担不同职责,并通过统一坐标框架和版本机制协同更新。

  • 几何层:道路边界、地面高度、障碍物占据栅格,提供空间约束。
  • 语义层:车道线类型、交通标志、可通行区域、建筑立面等类别信息。
  • 对象层:车辆、行人、锥桶等实例,带ID、速度、朝向和跟踪状态。
  • 关系层:对象之间的相对关系,如“前方”“左侧”“属于某车道”。
  • 置信与时间层:每个要素的置信度、观测时间、生命周期和版本号。

这种分层结构使地图更新可以按层进行:几何层变化较慢,对象层变化较快,关系层和置信层则随观测持续调整。更新时不必整体重建,而是定位到具体图层和要素进行增量修改。

语义地图分层结构 vs 几何地图 / 栅格地图 语义地图:分层知识结构 关系层 前方 / 左侧 / 属于某车道 / 拓扑连接 对象层 车辆 / 行人 / 锥桶 / ID / 速度 / 朝向 语义层 车道线类型 / 交通标志 / 可通行区域 几何层 道路边界 / 地面高度 / 占据栅格 置信与时间层 置信度 / 观测时间 / 生命周期 / 版本号 几何地图 只描述“在哪里、什么形状” 点 / 线 / 面 / 占据栅格 / 高程 无类别、无属性、无关系 适合定位、避障、几何规划 栅格地图 用离散网格表达占据概率 0 / 1 或概率值:空闲、占据、未知 分辨率固定,语义信息弱 适合局部避障、代价地图、导航 包含

四、与几何地图、栅格地图的区别

几何地图关注“空间形状”,栅格地图关注“离散占据状态”,语义地图关注“空间中的意义”。三者的差异可以从以下维度理解:

  • 表达对象不同:几何地图表达点、线、面;栅格地图表达网格单元;语义地图表达实体、区域、属性与关系。
  • 查询能力不同:几何地图可查询距离和形状;栅格地图可查询可通行性;语义地图可查询“前方是否有行人”“左侧车道是否可变道”。
  • 更新粒度不同:几何地图通常整体或局部重建;栅格地图按单元更新;语义地图可按对象、图层和关系增量更新。
  • 任务支撑不同:几何地图支撑定位与避障;栅格地图支撑路径搜索;语义地图支撑任务规划、人机交互与场景理解。
几何地图是“骨架”,栅格地图是“底图”,语义地图是“带知识的环境模型”。三者不是替代关系,而是互补关系。

五、典型场景:路口语义地图更新

以城市路口为例,语义地图需要同时维护多类要素:车道线、停止线、人行横道、交通灯、路沿、动态车辆和行人。更新流程通常如下:

  1. 感知模块输出带类别的检测框、点云分割结果和车道线拟合结果。
  2. 坐标变换模块将观测统一到 map 坐标系。
  3. 数据关联模块将新观测与已有对象匹配,判断是新增、更新还是删除。
  4. 语义融合模块更新对象属性、置信度和生命周期。
  5. 图层管理模块写入对应图层,并递增版本号。
  6. 任务层通过查询接口获取最新语义地图,用于规划与决策。
# 语义地图更新伪代码示例
observation = {
    "type": "pedestrian",
    "position": [12.4, 3.8, 0.0],
    "velocity": [0.6, -0.2, 0.0],
    "confidence": 0.91,
    "timestamp": 1723456789.12
}

if match_existing_object(observation):
    update_object_attributes(observation)
else:
    create_new_object(observation)

update_layer("object_layer")
update_layer("confidence_time_layer")
increment_map_version()

六、常见误区与复盘

误区一:把语义地图等同于“带标签的点云”。点云标签只是语义信息的一种载体,缺少对象级关联、关系推理和生命周期管理,难以支撑任务层查询。
误区二:只建几何层,不建置信与时间层。没有置信度和时间戳,地图无法判断哪些要素已过期,更新时容易把旧观测当成当前事实。
误区三:所有图层使用同一更新频率。几何层和语义层变化慢,对象层变化快,统一频率会造成计算浪费或更新滞后。

复盘时建议重点检查三件事:图层划分是否与任务查询方式匹配;对象ID是否稳定且可追溯;置信度与时间戳是否参与更新决策。只有把“空间、语义、时间、置信”四者统一管理,语义地图才能真正成为可持续更新的环境知识底座。