当前位置:首页>自动驾驶>自动驾驶领域的高精地图(HD Map)结构化描述文件解读-类 Protocol Buffer 文本格式

自动驾驶领域的高精地图(HD Map)结构化描述文件解读-类 Protocol Buffer 文本格式

  • 2026-09-07 16:20:08
自动驾驶领域的高精地图(HD Map)结构化描述文件解读-类 Protocol Buffer 文本格式
类 Protocol Buffer 文本格式,是百度 Apollo 自动驾驶体系的典型地图数据格式,为自动驾驶提供厘米级精度的静态环境建模能力。
下面从文件核心属性、核心元素拆解、地图关键特征、应用场景四个维度完成完整解析:

一、文件核心基础属性

  1. 格式与标准:
  1. 遵循 OpenDRIVE 高精地图规范的落地实现,采用结构化的键值对文本格式,可直接被 Apollo 自动驾驶系统读取解析。
  2. 精度等级:
    坐标精度达到厘米级(小数点后 8 位),满足 L2 + 及以上级别自动驾驶对高精地图的精度要求(相对精度≤10cm)。
  3. 场景覆盖:
    同时覆盖 ** 城市道路网(含多个交叉路口)和停车场(自动泊车位)** 两大场景,支持城市道路自动驾驶 + 自动泊车(APA/HPA)功能。
  4. 坐标系:
    采用平面投影坐标系(如 UTM / 高斯 - 克吕格投影),Z 值统一为 0,属于二维平面高精地图,无高程信息,适配平坦的城市建成区场景。

二、核心元素深度拆解

文件内容由三大核心地图元素构成,分别是road(道路)、junction(交叉口 / 路口)、parking_space(停车位),辅以几何、拓扑、属性类子元素完成完整描述。

1. 核心主体:road(道路)

road是文件中占比最高的元素,是地图的核心骨架,每个road对应一条独立的道路 / 车道单元,完整定义了道路的唯一标识、拓扑关联、几何边界、行驶属性。

子元素
核心作用与解析
id
道路的唯一标识符(如id: "144282"),用于地图元素间的关联、索引与拓扑构建,全局不重复。
section
道路的分段单元,同一条道路的几何 / 属性变化通过section拆分,本文件中section与road同 ID,代表单段连续道路。
lane_id
车道唯一 ID(如lane_id: "271818"),一个section可关联多个lane_id,代表多车道道路。例:road id="144275"包含 2 个lane_id,为双向 / 双车道道路,是车道级导航的核心。
boundary
道路 / 车道的几何核心,通过outer_polygon(外轮廓多边形)定义车道的物理行驶边界,是车辆行驶范围的约束基准。
edge
边界的边单元,核心属性为type,分为LEFT_BOUNDARY(左边界)和RIGHT_BOUNDARY(右边界),精准定义车道的左右物理边界。
curve/segment
边界的几何最小单元,本文件中以line_segment(直线段)为主,通过离散点串拟合道路的直线 / 曲线形态,适配自动驾驶实时规划的计算需求。
point
几何的最小单位,包含x/y/z三维坐标,定义边界的精准位置。例:x: 201727.00031449174, y: 2533622.6715815519, z: 0,大数值为平面投影大地坐标,Z=0 代表平面无高程。
线段附属属性
s:沿道路的累计里程(Frenet 坐标系核心参数);start_position:线段起点坐标;heading:航向角;length:线段总长度。这些参数是自动驾驶路径规划中计算行驶距离、车辆航向、横向偏移的核心基准。
junction_id
关联的路口 ID(如junction_id: "112020"),代表该道路属于对应路口的内部连接道路,用于路口内的行驶路径规划。
type
道路类型,本文件中多为UNKNOWN,为通用道路类型,未细分高速 / 主干道 / 支路等。

2. 拓扑核心:junction(交叉口 / 路口)

  • 每个路口通过唯一id标识(如112020、112016、112023等),本文件共包含至少 6 个独立交叉路口,属于路口密集的城市区域。
  • 核心作用:定义路口的物理范围,关联所有交汇于该路口的road元素,构建路口内的道路拓扑关系,是自动驾驶处理交叉路口转弯、让行、会车的核心空间基准。
  • 所有关联同一junction_id的road,均为该路口的内部引道 / 连接道,用于规划车辆在路口内的行驶轨迹。

3. 泊车核心:parking_space(停车位)

本文件包含 16 个独立停车位,是自动泊车功能的核心数据,完整定义了泊车位的物理轮廓与属性。

子元素
核心作用与解析
id
停车位唯一标识符(如id: "410132"),全局不重复。
polygon
闭合坐标点多边形,精准定义停车位的物理轮廓,厘米级精度支撑自动泊车的入位路径规划。
overlap_id
重叠区 ID(如overlap_id: "224"),定义停车位与车道、道路的关联 / 重叠关系,明确泊车位的出入口与行车道的连接拓扑。
heading
停车位朝向角,本文件中均为90,代表垂直式停车位(与车道垂直),用于规划自动泊车的入位方向与姿态。

三、地图关键特征总结

  1. 拓扑完整性:
    通过 ID 关联实现「路口 - 道路 - 车道 - 停车位」的全链路拓扑关系,是自动驾驶全局路径规划的核心基础,确保车辆可在地图元素间完成连续导航。
  2. 几何表达特性:
    采用离散点串 + 直线段拟合道路曲线,计算效率高,完美适配自动驾驶实时规划算法;同时内置 Frenet 坐标系的核心参数(s 里程、heading 航向),直接支持自动驾驶行业通用的路径规划算法。
  3. 功能覆盖度:
    同时支持城市道路自动驾驶(路口通行、车道保持、变道)和自动泊车两大核心功能,是一套完整的城市场景高精地图子集。
  4. 数据规模:
    包含数十条道路 / 车道、6 个以上交叉路口、16 个泊车位,对应一个城市商业区 / 园区级的中小型地图区域。

附录:

1. 头部信息 (header)

这是地图文件的元数据部分,描述了地图的基本信息和坐标系统。

  • version: 字符串,地图格式的版本号(这里是 "1")。

  • date: 字符串,地图数据的生成日期。

  • projection: 定义了地图使用的投影坐标系。

    • proj: 具体的投影参数。这里使用的是 +proj=utm(通用横轴墨卡托投影),+zone=50(第50度带),+ellps=WGS84(WGS84椭球体),+datum=WGS84(WGS84基准面),+units=m(单位是米),+no_defs(使用标准参数)。这告诉解析器文件中的 (x, y) 坐标是UTM投影下的平面直角坐标,单位为米。

  • district: 地区或城市标识。

  • generation: 地图生成信息(此处为空)。

  • rev_major / rev_minor: 主/次修订版本号。

  • vendor: 地图数据供应商(此处为空)。

2. 道路元素定义

文件的主体由重复的 crosswalk、junction 和 lane 消息块组成。

2.1 人行横道 (crosswalk)

定义了地图中的人行横道区域。

  • id: 对象的唯一标识符。

    • id: 具体ID字符串,如 "410131"。

  • polygon: 定义了人行横道的边界形状。

    • x / y / z: 该点的三维坐标,基于 header.projection 中定义的坐标系。z 值通常为0,表示地面高度。

    • point: 构成多边形的一个顶点。

  • overlap_id: 重叠区域ID。表示该人行横道与其他元素(如车道、停止线等)有重叠关系。这些ID引用了文件中其他部分定义的 overlap 对象(虽然当前文件中没有 overlap 的详细定义块,但通过ID建立了关联)。


  • 在目前这个文件片段中,crosswalk 块里的 overlap_id仅仅是一个引用标识符。

    它传达的信息是:“这个名为 ‘410131’ 的人行横道,与 ID 为 ‘167’、‘158’、‘159’…… 等元素在空间上存在重叠或关联。”

    但是,这个引用本身并没有说明:

    根据 base_map.proto 的标准结构,overlap_id 中的 ID 应该指向文件中另一个独立定义的 overlap 消息块。

    通常,一个完整的 overlap 消息会包含如下信息:

    • 重叠的区域:可能通过一个多边形(polygon)来精确描述重叠部分的形状。

    • 重叠的对象对:明确指出是哪两个(或多个)对象发生了重叠,例如 (crosswalk, lane)。

    • 重叠的详细信息:比如从车道上的哪个 s(纵向距离)开始到哪个 s 结束与人行横道重叠。

    1. 重叠的具体位置:是在人行横道的中间部分重叠,还是在边角处?

    2. 重叠的几何形状:重叠的区域具体是一个矩形、一个点还是一个不规则多边形?

    3. 重叠的细节:是整个人行横道都覆盖了某个车道,还是仅仅在停止线处接触?


2.2 路口 (junction)

定义了道路交叉口的区域。

  • id: 路口的唯一标识符,如 "112017"。

  • polygon: 定义了路口边界的多边形。

  • overlap_id: 与该路口有重叠关系的其他元素ID。

2.3 车道 (lane)

这是地图中最核心、最复杂的部分,定义了每一条车道的所有属性。

  • id: 车道的唯一标识符,如 "271749"。

  • central_curve: 车道的中心线。

    • line_segment: 直线段类型。

    • s: 该段起始点相对于整条车道起点的距离。


在 Apollo 地图格式(base_map.proto)中,一条曲线(curve)可以由多个线段(segment)拼接而成,例如一段直线后接一段回旋线再接入一段圆弧。每个 segment 的 s 字段表示该段的起始点到整条曲线起点的累积距离。

如果一条曲线只包含一个 segment,那么该段的 s 自然就是 0.0,表示它从整条曲线的起点开始。


    • start_position: 该段的起点坐标。

    • heading: 该段起点的航向角(单位:度),通常以正东为0度,逆时针为正。

    • length: 该段的长度。

    • point: 直线段上的插值点,一系列的点构成了平滑的曲线。

    • segment: 组成中心线的一个曲线段。

  • left_boundary / right_boundary: 车道的左右边界。

    • s: 该类型生效的起始距离。

    • types: 边界线类型,如 DOTTED_WHITE(白色虚线), SOLID_YELLOW(黄色实线), CURB(路缘石)。

    • curve: 边界曲线,结构与 central_curve 类似。

    • length: 边界的长度。

    • virtual: 布尔值,表示该边界是否为虚拟边界(例如,车道线之间的分隔线)。

    • boundary_type: 边界类型。

  • length: 车道的总长度。

  • speed_limit: 车道限速,单位是 米/秒。例如 2.777... 对应 10 km/h, 5.555... 对应 20 km/h。

  • overlap_id: 与该车道有重叠关系的其他元素ID。

  • predecessor_id / successor_id: 前驱/后继车道ID。定义了车道的拓扑连接关系,即车辆从该车道出来后可以进入哪条车道,或者从哪条车道可以进入该车道。一个车道可以有多个后继或前驱(如分叉、汇流)。

  • left_neighbor_forward_lane_id / right_neighbor_forward_lane_id: 左侧/右侧同向相邻车道的ID。

  • left_neighbor_reverse_lane_id: 左侧反向相邻车道的ID(用于对向车道)。

  • type: 车道类型,这里是 CITY_DRIVING(城市道路驾驶)。

  • turn: 在该车道上的转向类型,如 NO_TURN(直行), LEFT_TURN(左转), RIGHT_TURN(右转), U_TURN(掉头)。

  • direction: 车道方向,这里是 FORWARD(正向),指与车道中心线方向一致。

  • left_sample / right_sample: 车道宽度采样。用于精确描述车道宽度沿中心线的变化。

    • s: 距离车道起点的纵向距离。

    • width: 在该距离处,从中心线到对应边界的宽度。

  • left_road_sample / right_road_sample: 道路宽度采样。表示从车道中心线到道路边缘(或中央分隔带)的距离,用于描述整个道路横截面的变化。


left_sample 和 right_sample 分别用于描述车道中心线到车道左边界和车道右边界的距离(即车道宽度)。


  • left_junction_sample / right_junction_sample: 路口区域内的宽度采样。当车道进入路口时,用于特殊处理车道宽度的变化。


在同一个 lane 块中,left_junction_sample 和 right_junction_sample 是通过相同的 s 值进行一一对应的。

最新文章

随机文章