本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》。
此专栏是关于《自动驾驶汽车平台技术基础》书籍的笔记.
1.Apollo开发平台
1.1 Apollo技术架构
Apollo技术框架由4层构成:
- 云服务平台(Cloud Service Platform):包括高精地图、模拟平台、数据平台、OTA模块、安全平台和DuerOS;
- 软件开放平台(Open Software Platform):包括实时操作系统、承载所有模块的框架层、高精地图与定位模块、感知模块、决策规划模块、控制模块;
- 硬件平台(Reference Hardware Platform):包括计算单元、GPS/IMU、Camera、激光雷达、毫米波雷达、人机交互设备、BlackBox等硬件;
- 车辆平台(Reference Vehicle Platform):指一辆能够接受电子信号控制的车辆,亦称线控车辆;
Apollo整体技术架构如下图所示:
1.2 软件开放平台
- 地图引擎
地图引擎(Map Engine)是车载终端的高精地图数据管理服务,封装了地图数据的组织管理机制,屏蔽底层数据细节,对应用层模块提供统一数据查询接口;包含元素检索、空间检索、格式匹配、缓存管理等核心能力,并提供了模块化、层次化、可高度定制化、灵活高效的编程接口,用户可以基于此构建专属的终端高精地图解决方案; - 高精地图
高精地图主要服务于自动驾驶车辆,通过一套独特的导航体系,帮助自动驾驶解决系统性能问题,扩展传感器检测边界;Apollo内部高精地图主要应用在高精定位、环境感知、决策规划、仿真运行4大场景,帮助解决林荫道路GNSS信号弱、红绿灯的定位与感知及十字路口复杂等导航难题; - 感知平台
Apollo感知平台包括线上感知模块和线下标定服务平台;线上感知模块提供基于深度学习的点云动态障碍物的检测、分割和基于运动的跟踪;线下标定服务平台提供云端的跨平台标定服务;
- 线上感知模块
感知模块主要包括障碍物检测识别和红绿灯检测识别两部分;
障碍物检测识别模块通过输入激光雷达点云数据和毫米波雷达数据,输出基于两种传感器的障碍物融合结果,包括障碍物的位置、形状、类别、速度、朝向等信息;
红绿灯检测识别模块通过输入两种焦距下的相机图像数据,输出红绿灯的位置、颜色状态等信息;
感知核心模块的主要内容:
- 障碍物检测识别
障碍物模块包括基于激光雷达点云数据的障碍物检测识别、基于毫米波雷达数据的障碍物检测识别及基于两种传感器的障碍物结果融合算法;
基于激光雷达点云数据的障碍物检测识别,通过线下训练的卷积神经网络模型,学习点云特征并预测障碍物的相关属性,并根据这些属性进行障碍物分割;
基于毫米波雷达数据的障碍物检测识别,主要用来对毫米波雷达原始数据进行处理而得到障碍物结果;该算法主要基于ID扩展、噪点去除、检测结果构建及ROI过滤;
多传感器障碍物结果融合算法,用于将上述两种传感器的障碍物结果进行有效融合,该算法主要进行了单传感器结果和融合结果的管理、匹配及基于卡尔曼滤波的障碍物速度融合; - 红绿灯检测识别
红绿灯模块根据自身的位置查找地图,可以获得前方红绿灯的坐标位置;通过标定参数,可以将红绿灯从世界坐标系投影到图像坐标系,从而完成相机的自适应选择切换;选定相机后,在投影区域外选取一个较大的感兴趣区域,在其中运行红绿灯检测来获得精确的红绿灯框位置,并根据此红绿灯框的位置进行红绿灯的颜色识别,得到红绿灯当前的状态;得到单帧的红绿灯状态后,通过时序的滤波矫正算法进一步确认红绿灯的最终状态; - Apollo 3.5感知框架如下(注:Apollo已经更新很多代了,此仅用3.5做介绍):
- 线下标定平台
- Apollo线下标定平台如下图所示:
- 自动驾驶传感器标定:指利用传感器采集的数据计算各传感器的内参数及多个传感器间外参数的过程;
- 规划模块
- 规划模块(Planning)先需要车辆对路况有基本的判断,前方是否可停车、跟随、超车,侧方是否绕道等,从而确保车辆能够实现安全而高效的决策行驶;
- 规划模块分为两部分:一部分负责对数据的监听、获取和预处理;另一部分负责管理各个优化模块;
- 数据进入规划模块后,对其综合处理为规划模块的内部数据结构,由任务管理器调度合适的优化器进行各个优化任务;综合优化的结果经过最终的验证后,输出给控制模块;在设计上,规划模块实现了策略的可插拔,使得各个优化器可以灵活配置不同策略,提升迭代效率;
- Apollo规划器包括RTK Planner、EM Planner、Lattice Planner;
- Apollo规划整体架构如下图所示:
- DP速度算法实例说明规划过程
在DP路径算法生成一条可行驶的路径后,从起点开始,考虑避开路径中的所有障碍物,且让加减速最为平顺,以最优的速度曲线(即t-s平面中的绿色曲线)安全抵达终点;Apollo中,算法求解过程被离散化,从而降低受道路中心线的影响,适应了复杂路况,解决了决策过程中基于规则优化的痛点,通过DP速度算法逻辑,可以完成ST坐标系下的DP规划,在此基础上,进一步做QP优化和迭代调整,就可以得到有效的规划结果;
- 车辆控制
- 车辆控制将GPS和IMU提供的信息作为输入,处理后生成规划信息(包括路径信息和速度信息),提供给控制模块使用,然后来实现车辆控制;
- 对车辆转向及速度进行控制需要首先车辆动力学参数:制动信号、速度表,节气门、加速度表;当车辆有了控制信号后,通过CAN Bus通信协议中的DBC file可以将信号传递给车辆的线控系统,实现节气门、方向盘、换挡、转向灯等控制;
- 纵向控制
纵向控制主要为速度控制,通过控制制动、节气门、挡位等实现对车速的控制,对于自动挡车辆来说,控制对象主要是制动和节气门;
Apollo纵向控制原理如下图所示,主要由"位移-速度闭环PID控制器""速度-加速度闭环PID控制器"和"速度-加速度-制动/节气门开环控制器"构成: - 横向控制
横向控制主要控制航向,通过改变方向盘转矩或角度的大小等,使车辆按照设想的航向行驶;
Apollo横向控制主要由前馈开环控制器和反馈闭环控制器构成,如下图所示:
- 端到端解决方案
通过使用地图采集车采集的大量真实道路数据,完全基于深度学习构造横向和纵向驾驶模式,快速地在真车上进行了实践;
1.3 云服务平台
- 高精地图
- 高精地图介绍
- 高精地图亦称自动驾驶地图;高精地图主要服务于自动驾驶车辆,是自动驾驶的核心基础模块;
- 高精地图的作用首先是静态的感知,把人类对于世界的感知和理解赋予自动驾驶系统;其次,可以弥补系统性缺陷,扩展传感器检测边界,解决系统性能问题;
- 除了高精地图,还有HAD Map(Highly Automated Driving Map),即高度自动驾驶地图,高精地图最显著的特点是其表征路面特征的精准全面性,高度自动驾驶地图要求有更高的实时性;
- 高精地图的采集依赖传感器来完成,主要包括GPS、惯性导航IMU、轮测距器、激光雷达等;
- GPS首先确定4颗或更多卫星的位置并计算出GPS接收设备与每颗卫星之间的距离,然后用这些信息使用三维空间的三边测量法推算出自己的位置;要使用距离信息进行定位,接收机还必须知道卫星的确切位置,GPS接收机存储有星历,其作用是告诉接收机每颗卫星在各个时刻的位置;
- 惯性导航IMU一般使用6轴运动处理组件,包含了3轴加速度和3轴陀螺仪;加速度传感器是力传感器,用来检查上下左右前后哪几个方面都受了多少力,然后计算每个轴向的加速度;陀螺仪是角速度检测仪,检测绕每个轴的加速度;假设无人车以轴为轴心,一秒钟转了90°,那么它在轴上的角速度就是90°/s,从而加速度推算出运动距离需要经过两次积分,所以但凡加速度测量上有任何不正确,在两次积分后,位置错误会积累,然后导致位置预测错误;
- 轮测距器,汽车前轮通常安装了轮测距器,分别记录左轮和右轮的总转数,通过分析每个时间段左右轮的转数,可以推算出车辆向前走了多远,向左右转了多少度等;但由于在不同地面上转数对距离转换的偏差,随着时间推进,测量偏差会越来越大;
- 激光雷达首先向目标物体发射一束激光,然后根据接收-反射的时间间隔来确定目标物体的实际距离;然后根据距离及激光发射的角度,通过简单的几何变化可以推导出物体的位置信息;LiDAR系统一般分为3个部分:一是激光发射器,发出波长为600~1000nm的激光射线;二是扫描与光学部件,主要用于收集发射点距离与该点反射时的时间和水平角度;三是感光部件,主要检测返回光的强度;因此检测到的每一个点都包括了空间坐标信息和光强度信息;
- 高精地图制作流程包括:首先IMU及轮测距器可以高频率地给出当前无人车的位置预测,但由于其精度原因,位置可能有一定程度偏差;为了纠正这些偏差,可以使用传感器融合技术,结合GPS与激光雷达(LiDAR)的数据算出当前无人车的准确位置;然后根据当前的准确位置与激光雷达的扫描数据,把新数据加入地图中;
- Apollo高精地图
高精地图的构建由5个过程组成:数据采集、数据处理、对象检测、手动验证、地图发布;
- 数据采集
调查车辆使用多种传感器,如GPS、惯性测量单元、激光雷达和摄像机;Apollo定义了一个硬件框架,将这些传感器集成到单个自主系统中,通过支持多种类的传感器,Apollo可以收集各类数据,将这些数据融合,最终生成高精度地图; - 数据处理
数据处理指Apollo如何对收集到的数据进行整理、分类以获得没有任何语义信息或注释的初始地图模板;Apollo团队使用人工智能来检测静态对象,并对其进行分类,其中包括车道线、交通标志甚至是电线杆; - 对象检测及手动验证
手动验证可确保自动地图的创建过程有序进行并及时发现问题; - 地图发布
在经过数据采集、数据处理、对象检测和手动验证后,地图即可发布;在构建和更新地图的过程中,Apollo使用了众包;Apollo高精地图众包可通过智能手机、智能信息娱乐系统甚至是其他自动驾驶车来实现。
- 定位
GNSS主要依靠卫星定位,其信号容易受到干扰,如玻璃幕墙会不断反射GNSS信号,所以GNSS定位精度大概在米级别;为了提高精度,可以通过建立RTK基站,将两者信号做差分,从而提高GNSS精度到10cm左右,但单纯依靠RTK仍然不够,因为只有车辆靠近RTK基站范围内16.09km左右才能发挥其作用,且GNSS和RTK计算结果是实时的,存在可能跳变的因素,此时需要IMU惯性导航发挥关键作用;IMU可以根据车辆位置和各种速度的叠加做积分,从而预测出车辆的行径位置,提高车辆定位的精确度;当遇到桥洞或隧道时,GNSS的信号会变差,这时需要用点云或视觉定位;通过配合点云地图和实时数据的采集来分析车辆位置,再加上摄像头为主的视觉定位,及GNSS+RTK和IMU的融合,车辆定位可以达到厘米级的精度;
Apollo 2.0多传感器融合定位模块框架: - 仿真
Apollo仿真平台开放的功能如下:
- 内置高精地图的仿真场景:基于不同的路型,基于不同的障碍物类型,基于不同的道路规划,基于不同的红绿灯信号;
- 场景上传调试:支持同时多场景的高速运行,支持单算法模块的上传运行,支持系统整套算法和运行环境的上传与运行;
- 智能场景通过判别系统:Apollo开放的判别标准,碰撞检测、闯红灯检测、限速检测、在路检测、到达目的地检测等;
- 三维展示功能:提供实时路况,算法模块输出的可视化信息,及无人车本身状态的全局信息;
- 数据平台
- 开发者在本地开发平台中基于Docker开发算法并部署依赖环境,接着将开发好的环境上传到云端的私有Docker Repository中,然后在平台上挑选数据集发起训练任务,Apollo训练平台的云计算调度便会将任务调度到计算集群上执行;这个过程中在云集群的内部,开发者的程序使用数据获取接口获得自动驾驶数据仓库中的数据集;最终由业务管理框架将执行过程、评估的结果和Model返回给可视化平台,完成可视化的调试;
- Apollo数据开放平台如下图所示:
- 仿真场景数据
仿真场景数据包括人工编辑及真实采集的场景,覆盖多种路型、障碍物类型及道路环境,同时开放云端仿真平台,支持算法模块在多场景中并发在线验证,加速算法迭代速度;
自动驾驶虚拟环境:该场景集来源于人工编辑,构造了红绿灯、十字路口、直行车道等多种场景集合,丰富的人工场景编辑有助于快速验证算法的基础能力,加速迭代效率;
实际道路真实场景:该场景集采集于真实道路场景,覆盖了城市的道路中红绿灯、十字路口、直行车道等多种场景集合,可高效验证算法在复杂场景中的处理能力,加速迭代效率; - 标注数据
标注数据是为满足深度学习训练需求,经人工标注而生成的数据,标注数据主要包括激光点云障碍物分类、红绿灯检测、road hackers、基于图像的障碍物检测分类、障碍物轨迹预测、场景解析等类型; - 演示数据
Apollo开放多种演示数据,旨在帮助开发者调试各模块代码,确保Apollo最新开放的代码模块能够在开发者本地环境运行成功,通过演示数据体验各模块的能力;主要包括车载系统演示数据、标定演示数据、端到端数据、自定位模块演示数据等;
- 安全平台
Apollo提供创新的4S解决方案:Scan(漏洞扫描)、Shield(安全防御)、See(可视化监控)、Save(免召回修复),来实现全生命周期的车辆信息安全;
- 汽车信息安全解决方案
Apollo在基于隔离和可信的安全体系下提供了完善的安全框架及系统组件,免受网络入侵,保护用户隐私和汽车信息安全;
- 车辆入侵检测防御系统(IDPS):通过检测系统合法性、阻止恶意或未经授权的软件安装、检测可疑的应用链接和隐私数据访问,保障车辆娱乐系统及通信系统的安全性;
- 车载防火墙(Car FireWall):通过部署在车载网关上,监控整个网络通信,发现并阻止异常的网络行为及非可信车辆的操作指令,保证车载网络安全;
- 安全升级套件(Sec-OTA):贯穿云和端,保证升级的安全可靠;
- 芯片级ECU信息安全解决方案:在Gateway、ECU内集成CAN防火墙,提供芯片级安全启动、安全升级、通信安全、接入认证、入侵检测防御系统,阻断黑客入侵,保护车内网络安全;
- Apollo汽车黑匣子
黑匣子在Apollo平台中作为智能汽车的数据记录软硬件产品;
- 作为安全存储硬件:将黑匣子硬件部署到智能汽车,通过数据压缩、加密处理及快速传输,大量驾驶数据得以安全存储;
- 作为数据读取软件:通过人性化的交互界面,对数据进行解密读取,从而使得数据成为追溯事故原因、改进产品质量的重要依据;
- Apollo Pilot安全报告
Apollo Pilot是Apollo平台自动驾驶量产解决方案的总称,是中国首个针对自动驾驶量产的、细分场景与功能的、专业的安全报告,对于推动行业统一标准的建立提供了理论支持;
- 人机交互接口
- 适用于Android车辆的CarLife
CarLife是在Android平台上实现CarLife协议;CarLife是一款智能手机集成解决方案,驾驶人可通过多屏共享和交互技术与MD(移动设备)和HU(主机)共享适合安全驾驶条件的移动应用程序,并使用触摸屏、按键、旋钮控制和话筒控制CarLife. - CarLifeVehicleLib
CarLifeVehicleLib是一个基于C++语言的跨平台动态库,实现了HU CarLife中的通道建立、数据发送和接收、协议解析和打包的功能; - DuerOS启动器
DuerOS启动器是Android终端的第一个用户图形交互界面,在终端入口处安装其他应用程序;
DuerOS启动器的特点:
- 适用于驾驶场景设计,采用轻巧、科学的UI设计感;
- 主页汇总语音、地图、音乐等入口,车内场景使用方便;
1.4 Apollo参考硬件平台
自动驾驶硬件系统,粗略分为:感知、决策、控制3部分,还有定位、地图、预测等模块;
自动驾驶硬件架构如下图所示:
Apollo硬件连接概览图:
- 车辆运动方面,车速、转角及横滚、俯仰、航向是需要收集的车体自身信息;
- 外部环境感知信息,主要由传感器平台,如激光雷达、超声波、摄像头、毫米波雷达、V2X设备采集;V2X设备可提供超视距功能:当车辆在路上行驶,较难发现超出传感器范围的信息,但V2X设备会发送和接收路侧及其他车辆传来的信息,及前方交通状况;
- 级自动驾驶的计算单元主要是CPU+GPU+FPGA的架构;
- 向上连接互联网,向下连接总线;
- 负责记录控制指令和车辆行驶状态,事故发生以后可用记录的信息进行事故认定;
- 车辆控制主要基于线控系统,包括线控转向、线控节气门、线控制动、线控悬架、线控换挡和线控增压等;
- 自动驾驶使用的感知类的传感器,主要有激光雷达、毫米波雷达、摄像头及组合导航;
Apollo自动驾驶传感器组成:
- 自动驾驶感知传感器
- 激光雷达安装在车顶,随车运动的同时进行360°同轴旋转,可提供周围环境的点云信息;激光雷达不仅用于车辆感知,也用于定位和高精地图的测绘;
- 摄像头光线通过镜头、滤光片到后段的CMOS或CCD集成电路,将光信号转换成电信号,再经过图像处理器(ISP)转换成标准的RAW、RGB或YUV等格式的数字图像信号,再通过数据传输接口传输到计算单元;
- 毫米波雷达基本原理是发射一束电磁波,通过观察回波和射入波的差异来计算距离和速度,主要分为和,安装在保险杆上;
- 组合导航是两部分,一部分是GNSS板卡,通过天线接收GPS和RTK信号,解析计算出自身的空间位置;但车辆行驶到林荫路或有些建筑物遮挡时,GPS会没有信号或产生多径效应,定位会产生偏移和不准;此时需要通过INS的信息融合来进行组合运算;GNSS+INS融合在一起就是组合导航系统;
- 不同功能所需的传感器类型如下表所示:
自动驾驶功能 | 超声波雷达 | 摄像头 | 毫米波雷达 | 激光雷达 | 组合导航 |
自动巡航(ACC) | √ | √ | √ | √ | |
紧急制动(AEB) | √ | √ | √ | ||
行人检测(PD) | √ | √ | √ | ||
交通标志识别(TSR) | √ | ||||
车道偏离警告(LDW) | √ | ||||
泊车辅助(PA) | √ | √ | √ | √ | |
自动驾驶(AP) | √ | √ | √ | √ | √ |
- 自动驾驶计算单元
自动驾驶汽车计算单元:
自动驾驶计算平台:
- 激光雷达、毫米波雷达、摄像头都接入一个,将对准融合后的数据再传输到计算单元进行处理;
- 从整个自动驾驶汽车来看,会根据不同的功能设计不同的域控制器,如车身域控制器、车载娱乐域控制器、动力总成域控制器、自动驾驶域控制器,彼此间相互隔离,互不干扰;
- 自动驾驶线控系统
- 自动驾驶车辆的线控系统,分减速、转向和加速3部分;
- 自动驾驶汽车线控系统分为3个版本
1.0 版本需对原车踏板及方向盘进行物理截断的改装,俗称暴力改装,并不符合汽车安全要求,甚至会出现漏油和烧电动机的情况;
2.0 版本利用原车的自动驾驶辅助系统来实现线控;
3.0 版本是完全定制化的方案,百度阿波罗量产巴士使用的是3.0版本,所有线控功能都基于自动驾驶的需求特别定制而成; - EPS与自动驾驶线控系统如下图所示: