类 Protocol Buffer 文本格式,是百度 Apollo 自动驾驶体系的典型地图数据格式,为自动驾驶提供厘米级精度的静态环境建模能力。下面从文件核心属性、核心元素拆解、地图关键特征、应用场景四个维度完成完整解析:一、文件核心基础属性
- 格式与标准:
- 遵循 OpenDRIVE 高精地图规范的落地实现,采用结构化的键值对文本格式,可直接被 Apollo 自动驾驶系统读取解析。
- 精度等级:坐标精度达到厘米级(小数点后 8 位),满足 L2 + 及以上级别自动驾驶对高精地图的精度要求(相对精度≤10cm)。
- 场景覆盖:同时覆盖 ** 城市道路网(含多个交叉路口)和停车场(自动泊车位)** 两大场景,支持城市道路自动驾驶 + 自动泊车(APA/HPA)功能。
- 坐标系:采用平面投影坐标系(如 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,代表垂直式停车位(与车道垂直),用于规划自动泊车的入位方向与姿态。 |
三、地图关键特征总结
- 拓扑完整性:通过 ID 关联实现「路口 - 道路 - 车道 - 停车位」的全链路拓扑关系,是自动驾驶全局路径规划的核心基础,确保车辆可在地图元素间完成连续导航。
- 几何表达特性:采用离散点串 + 直线段拟合道路曲线,计算效率高,完美适配自动驾驶实时规划算法;同时内置 Frenet 坐标系的核心参数(s 里程、heading 航向),直接支持自动驾驶行业通用的路径规划算法。
- 功能覆盖度:同时支持城市道路自动驾驶(路口通行、车道保持、变道)和自动泊车两大核心功能,是一套完整的城市场景高精地图子集。
- 数据规模:包含数十条道路 / 车道、6 个以上交叉路口、16 个泊车位,对应一个城市商业区 / 园区级的中小型地图区域。
附录:
1. 头部信息 (header)
这是地图文件的元数据部分,描述了地图的基本信息和坐标系统。
version: 字符串,地图格式的版本号(这里是 "1")。
date: 字符串,地图数据的生成日期。
projection: 定义了地图使用的投影坐标系。
district: 地区或城市标识。
generation: 地图生成信息(此处为空)。
rev_major / rev_minor: 主/次修订版本号。
vendor: 地图数据供应商(此处为空)。
2. 道路元素定义
文件的主体由重复的 crosswalk、junction 和 lane 消息块组成。
2.1 人行横道 (crosswalk)
定义了地图中的人行横道区域。
在目前这个文件片段中,crosswalk 块里的 overlap_id仅仅是一个引用标识符。
它传达的信息是:“这个名为 ‘410131’ 的人行横道,与 ID 为 ‘167’、‘158’、‘159’…… 等元素在空间上存在重叠或关联。”
但是,这个引用本身并没有说明:
根据 base_map.proto 的标准结构,overlap_id 中的 ID 应该指向文件中另一个独立定义的 overlap 消息块。
通常,一个完整的 overlap 消息会包含如下信息:
重叠的区域:可能通过一个多边形(polygon)来精确描述重叠部分的形状。
重叠的对象对:明确指出是哪两个(或多个)对象发生了重叠,例如 (crosswalk, lane)。
重叠的详细信息:比如从车道上的哪个 s(纵向距离)开始到哪个 s 结束与人行横道重叠。
重叠的具体位置:是在人行横道的中间部分重叠,还是在边角处?
重叠的几何形状:重叠的区域具体是一个矩形、一个点还是一个不规则多边形?
重叠的细节:是整个人行横道都覆盖了某个车道,还是仅仅在停止线处接触?
2.2 路口 (junction)
定义了道路交叉口的区域。
2.3 车道 (lane)
这是地图中最核心、最复杂的部分,定义了每一条车道的所有属性。
id: 车道的唯一标识符,如 "271749"。
central_curve: 车道的中心线。
line_segment: 直线段类型。
s: 该段起始点相对于整条车道起点的距离。
在 Apollo 地图格式(base_map.proto)中,一条曲线(curve)可以由多个线段(segment)拼接而成,例如一段直线后接一段回旋线再接入一段圆弧。每个 segment 的 s 字段表示该段的起始点到整条曲线起点的累积距离。
如果一条曲线只包含一个 segment,那么该段的 s 自然就是 0.0,表示它从整条曲线的起点开始。
left_boundary / right_boundary: 车道的左右边界。
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: 车道宽度采样。用于精确描述车道宽度沿中心线的变化。
left_road_sample / right_road_sample: 道路宽度采样。表示从车道中心线到道路边缘(或中央分隔带)的距离,用于描述整个道路横截面的变化。
left_sample 和 right_sample 分别用于描述车道中心线到车道左边界和车道右边界的距离(即车道宽度)。
在同一个 lane 块中,left_junction_sample 和 right_junction_sample 是通过相同的 s 值进行一一对应的。