2. 高精地图数据标准:NDR、OpenDRIVE、ADASIS v2/v3 详解与对比
聊到高精地图,绕不开的就是数据标准。说白了,地图数据就像一种语言,车厂、图商、传感器供应商之间得说同一种话,不然根本没法协作。我入行那会儿,各家有各家的格式,集成一个系统简直像做翻译工作。后来行业慢慢收敛到几个主流标准上,今天我就把 NDR、OpenDRIVE、ADASIS v2/v3 这几个老面孔和新势力,掰开揉碎了讲讲。
2.1 NDR:日本的老牌标准
NDR,全称 Navigation Data Standard,是日本主导的标准。我记得最早接触它是在一个日系车项目里,当时觉得这玩意儿怎么这么「规矩」?
核心特点:
- 强调整体性:NDR 不只是道路几何,它把交通规则、引导信息、甚至 POI 都打包在一起。你想想看,一个标准里塞这么多东西,好处是集成方便,坏处是改起来费劲。
- 层级分明:从国家到道路,再到车道,一层层往下拆。我在项目中遇到过一个问题——NDR 对车道级的细节支持不够细,尤其是复杂路口,经常需要自己补数据。
- 更新机制:NDR 有自己的一套差分更新逻辑,但说实话,实时性不如后来的一些标准。
我的经验: 如果你做的是日本本土市场的项目,NDR 是绕不开的。但做全球平台的话,我建议慎重考虑,它的生态相对封闭。
2.2 OpenDRIVE:欧洲的「车道级」标杆
OpenDRIVE 是目前全球用得最广的高精地图标准之一,尤其在欧洲和中国。它用 XML 描述道路,核心是「车道级」建模。
为什么它这么流行?
- 几何描述精准:用参考线 + 三次多项式来描述车道中心线。嗯,这里要注意,它的坐标系是右手系,跟很多传感器坐标系不一样,做融合时得转一下。
- 车道连接逻辑:每个车道都有 ID,通过
laneLink定义前后连接关系。我曾经在一个项目中,因为车道 ID 没对齐,导致规划模块直接「跳崖」——车开到路口就不知道往哪走了。 - 支持多种道路元素:红绿灯、路标、限速,都能用标准标签描述。
来看一个简单的 OpenDRIVE 片段,描述一段直路:
<road name="MainRoad" length="100.0" id="1" junction="-1">
<planView>
<geometry s="0.0" x="0.0" y="0.0" hdg="0.0" length="100.0">
<line/>
</geometry>
</planView>
<lanes>
<laneSection s="0.0">
<left>
<lane id="-1" type="driving" level="false">
<width sOffset="0.0" a="3.5" b="0.0" c="0.0" d="0.0"/>
</lane>
</left>
<center>
<lane id="0" type="none"/>
</center>
<right>
<lane id="1" type="driving" level="false">
<width sOffset="0.0" a="3.5" b="0.0" c="0.0" d="0.0"/>
</lane>
</right>
</laneSection>
</lanes>
</road>
避坑指南: 我曾经因为 OpenDRIVE 中
s 坐标(沿道路的纵向距离)和 t 坐标(横向偏移)搞混,导致定位结果偏了一个车道。记住:s 是顺着路走的,t 是垂直路面的。
2.3 ADASIS v2/v3:从「地图」到「车辆」的桥梁
ADASIS 跟前面两个不一样。它不定义地图怎么存,而是定义地图数据怎么从导航系统传到 ADAS 模块。说白了,它是一个通信协议。
ADASIS v2:
- 基于 CAN 总线传输,带宽有限,所以数据得压缩。
- 用 Path Prediction 的概念,提前把前方几百米的道路几何发出去。
- 我个人的习惯是,v2 适合做简单的 ACC 或弯道预警,但做不了复杂的自动驾驶决策。
ADASIS v3:
- 基于以太网,带宽大了很多,可以传更丰富的数据。
- 引入了 Horizon Provider 和 Horizon Consumer 的架构。地图数据被切分成一个个「地平线」片段,按需推送。
- 支持车道级数据,甚至能传坡度、曲率变化率这些细节。
关键区别: v2 是「广播式」,不管你要不要,我都发;v3 是「订阅式」,你需要什么,我发什么。这在系统资源紧张时,差别非常大。
2.4 三大标准对比
我把它们放在一起,做个直观的对比:
| 维度 | NDR | OpenDRIVE | ADASIS v2/v3 |
|---|---|---|---|
| 主要用途 | 导航 + 基础 ADAS | 高精地图存储与交换 | 地图数据实时传输 |
| 数据粒度 | 道路级 | 车道级 | v2: 道路级 / v3: 车道级 |
| 传输方式 | 文件 / 差分更新 | 文件 (XML) | v2: CAN / v3: 以太网 |
| 实时性 | 低 | 中 | 高 |
| 生态 | 日本为主 | 全球主流 | 欧洲车厂主导 |
| 学习曲线 | 中等 | 较陡 | v2 简单 / v3 中等 |
2.5 我的选择建议
如果你现在要选一个标准,我会这么建议:
- 做地图存储和编辑:首选 OpenDRIVE。它的工具链最成熟,开源解析库也多。我一般用
pyodrx做快速验证。 - 做地图到车辆的实时传输:看你的总线。如果还是 CAN 架构,ADASIS v2 凑合用;如果上了以太网,直接上 v3,别犹豫。
- 做日本市场:NDR 是必选项,但建议同时保留 OpenDRIVE 的转换接口,方便全球平台复用。
一个小技巧: 实际项目中,很少只用一种标准。我做过一个方案,地图后端用 OpenDRIVE 存储,通过 ADASIS v3 协议推送给多个 ECU,再在 ECU 内部转成 NDR 格式给导航模块。听着复杂,但各取所长。
好了,这一章就到这里。下一章我会讲高精地图的采集与制作流程,包括激光雷达和相机的融合建图,到时候见。