2、高精度地图的数据模型

好,咱们进入正题。高精度地图到底长什么样?它跟普通导航地图的区别在哪?

说白了,普通地图是给人看的,高精度地图是给车看的。车没有眼睛,它得靠数据来「感知」世界。所以,地图里的每一根线、每一个点,都得精确到厘米级。

我个人习惯把高精度地图的数据模型拆成三块:车道模型道路模型交通设施模型。这三块合起来,就是自动驾驶的「骨架」。

2.1 车道模型

车道模型是规划模块最依赖的部分。你想想看,车要变道、要转弯、要避让,都得知道车道在哪。

2.1.1 车道线

车道线不只是「一条线」。它包含了很多属性:

  • 线型:实线、虚线、双实线、虚实线。嗯,这里要注意,虚线允许变道,实线不行。我在项目中遇到过,有些地图把磨损的实线标成了虚线,结果规划模块直接变道,差点出事。
  • 颜色:白色、黄色、蓝色。不同颜色代表不同含义,比如黄色通常是对向车道分界线。
  • 宽度:标准车道线宽度一般是15cm,但有些特殊路段会变。
  • 置信度:这个容易被忽略。如果传感器看不清车道线,地图会标记一个低置信度,规划模块就得小心点。

避坑指南:我曾经在一条老旧道路上吃过亏。地图上的车道线是虚线,但实际路面已经磨损得几乎看不见了。结果规划模块以为可以变道,但感知模块死活检测不到车道线,两个模块「打架」了。后来我加了一个规则:如果地图置信度低于0.7,规划模块必须降级处理。

2.1.2 车道中心线

车道中心线是规划模块的「默认轨迹」。车一般会沿着中心线走,除非要避障或变道。

中心线不是简单的几何直线,它包含了:

  • 曲率:弯道有多弯。曲率越大,车速就得越慢。
  • 航向角:每个点的朝向。这个对控制模块很重要,它知道车头该往哪转。
  • 坡度:上坡还是下坡。我建议把坡度也存进去,不然规划模块在上坡时还按平路加速,动力会跟不上。

个人经验:中心线的采样间隔很关键。直道上5米一个点就够了,但弯道上我习惯加密到0.5米一个点。不然车在弯道里会「抖」,因为插值出来的轨迹不够平滑。

2.1.3 车道连接

车道不是孤立的。它们之间怎么连?这就是车道连接要干的事。

最常见的连接关系:

  • 前驱/后继:一条车道接着另一条车道。比如直行通过路口。
  • 左转/右转:从当前车道转到另一条车道。这里要存转向角度和转弯半径。
  • 变道:相邻车道之间的横向连接。变道连接通常有长度限制,太短了变不过去。

我记得有一次,地图里漏了一条左转连接。结果车开到路口,规划模块发现「无路可走」,直接刹停了。后来我加了一个校验工具,自动检查每个车道至少有一个出口连接。

2.2 道路模型

道路模型比车道模型更宏观。它描述的是整条路的结构。

2.2.1 道路边界

道路边界就是「路在哪结束」。它可以是路沿、护栏、或者绿化带。

边界数据很重要,因为规划模块必须保证车不超出道路范围。我见过一些事故,就是因为地图边界不准确,车「骑」上了路沿。

边界通常用点序列表示,每个点包含经纬度和高程。嗯,这里要注意,边界点不能太稀疏,不然车在边界附近时,插值出来的边界位置会不准。

2.2.2 交叉路口

交叉路口是自动驾驶的「噩梦」。因为这里情况最复杂。

路口模型包含:

  • 路口边界:路口的物理范围。
  • 进入/退出车道:哪些车道能进,哪些能出。
  • 冲突点:不同方向车流的交汇点。这个对碰撞检测很重要。
  • 停止线:车必须停在哪。

注意:路口内的车道连接不能太简单。我曾经见过一个地图,把路口内的所有车道都连成了「全连通」,结果规划模块在路口里乱窜。正确的做法是只允许合法的转向连接。

2.2.3 坡度与曲率

这两个属性直接影响车辆动力学。

属性 影响 典型值
坡度 加速/制动距离 0-15%
曲率 最大安全速度 0-0.1 (1/m)

我建议把坡度和曲率存成「分段常数」。因为整条路的坡度可能变化很大,一个平均值根本不够用。比如上坡接平路,规划模块得知道在哪开始调整动力。

2.3 交通设施模型

车不仅要看路,还要看「规矩」。交通设施就是这些规矩的载体。

2.3.1 交通标志

限速牌、让行牌、禁止转弯牌……每个标志都有精确的位置和类型。

标志模型包含:

  • 类型:限速、禁令、指示等。
  • 数值:比如限速60km/h。
  • 关联车道:这个标志管哪几条车道。我遇到过标志位置偏移了1米,结果关联错了车道,车在隔壁车道看到了限速牌,莫名其妙减速了。

2.3.2 信号灯

信号灯比标志更复杂,因为它有状态变化。

信号灯模型需要:

  • 灯头位置:每个灯头的精确坐标。
  • 灯组关系:哪些灯头属于同一组(比如左转灯和直行灯)。
  • 相位信息:红绿灯的时序。虽然这个通常由V2X提供,但地图可以存一个默认相位作为备份。

个人习惯:我会把信号灯和停止线关联起来。这样规划模块看到红灯,就知道在哪停。如果关联丢了,车可能会停在路中间,那就尴尬了。

2.3.3 路侧单元(RSU)

RSU是车路协同的关键。它相当于一个「路边基站」,可以和车通信。

地图里存RSU的信息:

  • 位置:RSU安装在哪。
  • 通信范围:能覆盖多远。一般是200-500米。
  • 服务类型:能提供什么信息?比如红绿灯状态、事故预警、施工提醒。

我记得有一次,RSU的通信范围标错了,车以为能连上,结果到了路口信号断了。后来我加了一个规则:地图里的通信范围要打8折,留点余量。

小结

高精度地图的数据模型,说白了就是给车画一张「超级详细」的交通图。车道模型告诉车「怎么走」,道路模型告诉车「在哪走」,交通设施模型告诉车「按什么规矩走」。

这三块数据,缺一块都不行。我见过很多团队只重视车道模型,忽略了道路边界和交通设施,结果车在路口里「迷路」了。嗯,所以我的建议是:从一开始就把这三块都建好,别偷懒。