Apollo平台是国内自动驾驶领域的领航者,其优秀的架构和开放的平台对自动驾驶生态的发展起到了开创性的作用。本人主要从事自动驾驶控制和部分规划方向,我将以Apollo平台为参考,逐步讲解自动驾驶控制、规划算法,及代码实现。
We choose to go to the moon in this decade and do the other things,not because they are easy, but because they are hard
-- John F. Kennedy, 1962
目录
1.2.1 参考车辆平台(Reference Vehicle Platform)
1.2.2 参考硬件平台(Reference Hardware Platform)
1.2.3 开放式软件层(Open Software Platform)
1.2.4云端服务平台( Cloud Service Platform)
一、Apollo简介
1.1 无人驾驶车的工作原理
我们使用计算机视觉和传感器融合,获取一幅关于我们在世界上的位置的丰富画面,使用定位确定我们在这个世界的精确位置,然后使用路径规划来绘制一条通过这个世界到达目的地的路径,通过控制转动方向盘、打开油门、然后踩制动器,沿着该轨迹行驶并最终移动车辆。从本质上讲,其他一切无人车都是这些核心功能更复杂的实现。
1.2 Apollo 技术框架
Apollo 技术框架由四个层面组成,参考车辆平台、参考硬件平台、开源软件平台、云服务平台。其中主要模块包括高精度地图、定位、感知、预测、规划、控制等模块;
参考车辆平台(Reference Vehicle Platform):指一辆能够受电子信号控制的车,我们管它叫线控车辆;
参考硬件平台(Reference Hardware Platform):包含计算单元、GPS/IMU、Camera、激光雷达、毫米波雷达、人机交互设备、BlackBox等硬件;
开放软件平台(Open Software Platform):包括实时操作系统、承载所有模块的框架层、高精地图与定位模块、感知模块、决策规划模块、控制模块;
云端服务平台( Cloud Service Platform):包括高精地图、模拟驾驶的仿真服务、数据平台、安全和OTA服务等;
1.2.1 参考车辆平台(Reference Vehicle Platform)
线控就是Control by Wire的直译 。简单理解,就是车辆的控制都是由一系列命令而执行的(目前主要是通过CAN通讯),而不是物理的操作进行执行的,为了实现自动驾驶,执行机构的线控化是必然趋势,其中包括线控制动、线控转向、线控油门、线控档位切换以及车辆灯光喇叭的线控功能等。
1.2.2 参考硬件平台(Reference Hardware Platform)
自动驾驶系统主要包含三个部分:感知、决策、控制。从整个硬件的架构上也要充分考虑系统感知、决策、控制的功能要求。整体设计和生产上要符合相关车规级标准,如ISO26262、AECQ-100、TS16949等相关认证和标准。目前L1、L2、ADAS系统的硬件架构体系和供应链相对完善符合车规级要求。
从总体架构将Apollo硬件系统分为两大部分:传感器、运算单元;Apollo传感器具体使用型号可上官网查询:http://www.apollo.auto/
1.2.2.1 传感器
摄像头:主要用于车道线、交通标示牌、红绿灯以及车辆、行人检测。有检测信息全面、价格便宜的特定,但会受到雨雪天气和光照的影响。由镜头、镜头模组、滤光片、CMOS/CCD、ISP、数据传输部分组成。光线经过光学镜头和滤光片后聚焦到传感器上,通过CMOS或CCD集成电路将光信号转换成电信号,再经过图像处理器(ISP)转换成标准的RAW,RGB或YUV等格式的数字图像信号,通过数据传输接口传到计算机端。
激光雷达:使用的技术是飞行时间法(Time of Flight)根据光线遇到障碍的折返时间计算距离。为了覆盖一定角度范围需要进行角度扫描,从而出现了各种扫描原理。主要分为:同轴旋转、棱镜旋转、MEMS扫描、相位式、闪烁式。激光雷达不光用于感知也应用于高精度地图的测绘和定位是公认L3级以上自动驾驶必不可少的传感器。
毫米波雷达:主要用于交通车辆的检测,检测速度快、准确,不易受到天气影响,对车道线交通标志等无法检测。毫米波雷达由芯片、天线、算法共同组成,基本原理是发射一束电磁波,观察回波与入射波的差异来计算距离、速度等。成像精度的衡量指标为距离探测精度、角分辨率、速度差分辨率。毫米波频率越高,带宽越宽,成像约精细,主要分为77GHz和24GHz两种类型(79GHz毫米波雷达正处于研发试验阶段,79)。
组合导航:GNSS板卡通过天线接收所有可见GPS卫星和RTK的信号后,进行解译和计算得到自身的空间位置。当车辆通过遂道或行驶在高耸的楼群间的街道时,这种信号盲区由于信号受遮挡而不能实施导航的风险。就需要融合INS的信息,INS具有全天候、完全自主、不受外界干扰、可以提供全导航参数(位置、速度、姿态)等优点,组合之后能达到比两个独立运行的最好性能还要好的定位测姿性能。
1.2.2.2 运算单元
IPC:即工业个人计算机(Industrial Personal Computer)是一种加固的增强型个人计算机(Apollo使用型号:Nuvo-6108GC / Nuvo-8108GC ),它可以作为一个工业控制器在工业环境中可靠运行。采用符合“EIA”标准的全钢化工业机箱,增强了抗电磁干扰能力,采用总线结构和模块化设计技术。CPU及各功能模块皆使用插板式结构,并带有压杆软锁定,提高了抗冲击、抗振动能力。
ASU (Apollo Sensor Unit):阿波罗传感器单元是Apollo自主开发的传感器融合运算单元与工业PC机(IPC)配合,在阿波罗自主驾驶平台上实现传感器融合、车辆控制和网络接入。ASU系统提供传感器接口,从各种传感器收集数据,包括摄像头、雷达和超声波传感器。该系统还利用来自全球导航卫星系统接收器的每秒脉冲(PPS)和GPRMC信号来实现相机和激光雷达传感器的同步。ASU与工控机之间通过PCI Express接口进行通信。ASU通过PCI Express接口采集传感器数据并传递给IPC,IPC使用ASU数据运算哈后以控制器局域网(CAN)协议发送车辆控制命令。
AXU (Apollo Extension Unit):Apollo扩展单元的设计目的是通过使开发人员能够插入额外的加速器(包括GPU、FPGA模块等)来提高计算能力和扩展存储容量。
ACU(Apollo Computing Unit):Apollo自主泊车控制器。
1.2.3 开放式软件层(Open Software Platform)
Apollo开放式软件层分为三个子层,实时操作系统、运行时框架、应用程序模块层(Apollo3.5以后将运行框架升级为Apollo Cyber RT)。
实时操作系统(RTOS):可确保在给定时间内完成特定任务,“实时”是指无人车的操作系统,能够及时进行计算,分析并执行相应的操作,是在车辆传感器收集到外界数据后的短时间内完成的。实时性能是确保系统稳定性和驾驶安全性的重要要求。Apollo RTOS是Ubuntu Linux操作系统与Apollo内核相互结合的成果。原始Ubuntu系统并非实时操作系统,通过加入Apollo设计的内核,使其成为一个RTOS。
运行时框架:是Apollo的操作环境,是ROS的定制版即机器人操作系统。为了使ROS适应无人车,Apollo团队改进了共享内存的功能和性能、去中心化和数据兼容性。
应用程序模块层:Apollo软件平台具有各种模块,这些模块包括 MAP引擎、定位、感知、规划、控制、端到端驾驶以及人机接口(HMI)。每个模块都有自己的算法库,之间的关系也非常复杂.
1.2.4云端服务平台( Cloud Service Platform)
云端服务平台包括:HD Map、Simulation、Data Platform、Security、OTA、DuerOS等模块;
百度子公司具有地图采集资质,可帮助无人车辆理解路况信息;无人车辆行驶过程中与Apollo云端后台进行实时数据交互,云端运算完善车辆模型;云端还具有巨大的仿真空间,无人车可以将自己遇到的复杂路况上传到云端平台,丰富云端场景数据库,当无人驾驶的算法更新迭代时,可在云端场景仿真测试,检验算法可行性。当算法验证后又可以通过OTA技术直接复写原车程序;