Apollo的软件架构图
在进入这一节之前,先看一下百度Apollo的软件架构图
Apollo 2.0 软件架构
Apollo 3.0 软件架构
从此图可以看出定位和高精度地图是 Apollo 整个软件体系的基石,在代码中也会看到高精度地图起到极其重要的作用。
高精地图包含的信息
高精地图包含了大量的驾驶辅助信息,最重要的就是道路网络的三维描述。比如交叉路口的布局,交通标志牌的位置等,也包含了环境的语义信息,比如交通信号灯的颜色含义,道路限速,已经从哪里的开始转向和交通规则等。
当然,高精地图和普通地图最大的区别在于高精地图可以达到厘米级别的精度。
为了有一个更直观的感受,可以看一下TomTom的高精地图Demo, https://www.tomtom.com/automotive/automotive-solutions/automated-driving/hd-map-roaddna/
高精地图的作用
定位
使用来自传感器收集到的Landmarks的信息,与以后的HD Map里面预存的Landmarks进行匹配就能得到车辆自身的精确位置。高精地图提供标准的位置,现在有一种低成本的设计方案,采用单目相机拍摄虚线和实线,把采集的图像和高精地图做比对,通过算法可以知道我当前在道路面的第几个车道。算出车道后解决定位问题,这是横向定位。纵向定位可以借助交通信号灯、路灯、灯杆等实现定位。
感知
第一,高精地图为感知增加了系统的冗余度,每个传感器都有自己测量距离,天气或光照条件的限制,在较远的区域或因为障碍物被遮挡的区域,高精地图都可以为传感器融合提供一个新的数据源。
第二,高精地图可以通过ROI(region of interest)缩小传感器的探测范围,提高探测精度和速度,节省了计算资源
规划
可以找到合适的行驶区域,与运动物体的历史数据一起进行之后运动的预测。同时如果车在路上发现前面有事故或者施工路面,这时候需要变道,高精地图提供了有利的支持。
决策
车到了十字路口,高精地图会采集安全岛的信息,复杂十字路口有安全岛,车在决策过程中需要参考安全岛等重要要素,否则这辆车冲上安全岛,导致行人发生交通事故。
在自动驾驶的几个重要模块,包括定位、决策、规划和感知。这几个模块离不开高精地图的支持,有了高精地图可以节省很多传感器的成本,这是加速量产的方法。在自动驾驶行业,暂时离不开高精地图的支持,如果在座各位提出低成本量产方案,可以离开高精地图,基本可以引领自动驾驶行业。
百度的地图生成
首先是通过采集车收集数据,传送到内业借助 AI 算法,后来会谈到 AI 算法如何处理要素;
在数据处理阶段,会对数据进行排列,分类,清洗以及校验准确性,之后会得到没有语义信息和备注信息的地图样板。
在物体检测阶段,会使用AI的方法探测并分类出地图中的静态物体,包括车道线,信号灯,路牌,电线杆等。
人工验证的过程保证了自动地图创建过程正确进行并即使发现问题。算法只能保证 90%,为了保证百分百,必须加入人工校验步骤,人工校验结束后可以发布。现在有三级别产品,包括高精地图,三维地图可以满足自动驾驶需要
除了高精地图以外,Apollo的HD Map包含有自上而下的相应定位地图以及3D的点云地图
因为地图的构建和更新是个对及时实时性要求很高,Apollo采用的众包的模式,公众可以是哟个Apollo使用的工具参与制作高精地图的任务。
Apollo高精地图规范
格式
百度高精地图数据格式采用(XML)文件格式的数据组织方式,是基于国际通用的OpenDrive规范,并根据百度自动驾驶业务需求拓展修改而成。
Apollo高精地图文件的整体结构如下所示:
坐标
百度高精地图坐标采用WGS84经纬度坐标表示。WGS84为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
车道
道路的reference line 存储在ID为0的车道中,其他车道只存储当前车道的一个边界。例如,reference line右侧的车道只存储车道的右侧边界。
车道 ID 的命名规则:
- lane section 内唯一
- 数值连续的
- reference line 所在 lane 的 ID 为 0
- reference line左侧 lane 的 ID 向左侧依次递增 (正t轴方向)
- reference line 右侧 lane 的 ID 向右侧依次递减(负 t 轴方向)
- reference line 必须定义在< center >节点内
车道总数目没有限制。Reference line 自身必须为 Lane 0。
路口区域(juction)
基本的原理比较简单,路口区域用junction结构表达。在Junction内,incoming Road通过Connecting Roads与out-going道路相连。下图展示了一个比较复杂的路口: