自动驾驶技术小结
自动驾驶概述
自动驾驶技术不需要人为操作,仅仅通过GPS、惯导、雷达等感知设备即可达到自动导航及行驶的目标。自动驾驶技术分为5个级别:
- 等级0:即无自动。驾驶随时掌握著车辆的所有机械、物理功能,仅配备警报装置等无关主动驾驶的功能也算在内。
- 等级1:驾驶人操作车辆,但个别的装置有时能发挥作用,如电子稳定程式(ESP)或防锁死刹车系统(ABS)可以帮助行车安全。
- 等级2:驾驶人主要控制车辆,但系统阶调地自动化,使之明显减轻操作负担,例如主动式巡航定速(ACC)结合自动跟车和车道偏离警示,而自动紧急煞停系统(AEB)透过盲点侦测和汽车防撞系统的部分技术结合。
- 等级3:驾驶人需随时准备控制车辆,自动驾驶辅助控制期间,如在跟车时虽然可以暂时免于操作,但当汽车侦测到需要驾驶人的情形时,会立即回归让驾驶人接管其后续控制,驾驶必须接手因应系统无力处理的状况。
- 等级4:驾驶人可在条件允许下让车辆完整自驾,启动自动驾驶后,一般不必介入控制,此车可以按照设定之道路通则(如高速公路中,平顺的车流与标准化的路标、明显的提示线),自己执行包含转弯、换车道与加速等工作,除了严苛气候或道路模糊不清、意外,或是自动驾驶的路段已经结束等等,系统并提供驾驶人“足够宽裕之转换时间”,驾驶应监看车辆运作,但可包括有旁观下的无人停车功能。(有方向盘自动车)
- 等级5:驾驶人不必在车内,任何时刻都不会控制到车辆。此类车辆能自行启动驾驶装置,全程也不须开在设计好的路况,就可以执行所有与安全有关之重要功能,包括没有人在车上时的情形,完全不需受驾驶意志所控,可以自行决策。(无需方向盘自动车)
目前大部分的自动驾驶技术是通过GPS定位+高精地图定位车的位置,同时使用普通雷达、激光雷达、摄像头等感知周围的环境,并随后做出决策,最终到达目的地。百度的apollo2.0的技术框架如下:
image
按模块划分的话,主要分为定位模块、路径规划模块、感知模块、控制模块,以下将分别介绍每个模块的技术。
定位技术
自动驾驶中最重要的是先知道车的位置,需要具有车道级别的定位精度。普通的GPS定位在这里是不能胜任的,因为普通GPS大概有10m的误差。为了更精准的定位一般需要用到高精地图,高精地图相对于普通的电子地图来说,它的精度更高,也是需要到车道级别。
差分GPS
对于普通的gps定位来说,存在卫星本身误差、轨道误差、天气原因导致的误差、手机设备等因素导致得到定位精度仍然存在误差。差分gps是在此基础,根据手机附近基准站(基站准确位置已知)的gps误差来修正手机的误差,分为三种技术:位置差分、伪距差分、相位差分。一般来说差分GPS可以得到厘米级的定位精度,但是差分GPS的基准站并不能覆盖所有区域,特别是隧道或者有GPS遮挡的区域,这时候是没办法用GPS准确定位的。
惯导系统
为了解决GPS遮挡的问题,惯导系统是利用陀螺仪+加速度计得到每一刻的加速度和角速度,通过时间积分,得到速度和角度,再通过空间累加,就可以推算出实时的位置。但是惯导系统存在累积误差的问题。
环境匹配
为了解决上述的问题,自动驾驶定位中一般还是用环境匹配的方法来修正位置。而环境匹配的方式有高精地图、激光雷达点云图、3D地图等。
- 高精地图:高精地图则包含车道级的关系信息,比如每条车道线的精确位置、车道是虚线还是实线等。此外,道路上每个红绿灯和路边车牌的精确位置也会展现在高精地图上,帮助自动驾驶系统更好地进行感知和规划。
- 激光雷达点云图:汽车实时用激光雷达扫描出的点云图和预先扫描的点云图进行匹配定位。因为预先扫描的点云图是有坐标信息的。
- 2D图像匹配:使用激光雷达预先扫描的3D地图转换为2D地图,然后和摄像头实时拍摄的2D图像做匹配。
- Mobileye的rem方法:预先扫描路标、路灯、指示牌、反光标等简单3D图像和路沿、绿化带、车道线等一维图像,称作rem地图。然后通过摄像头实时扫描出来的图像和上面的rem地图匹配,即可定位。
环境匹配定位一般和惯导一起做卡尔曼滤波来提升定位效果。
高精地图
高精度地图是自动驾驶的基础,制作一张高精度地图可以大概分为3个过程:采集、加工、转换。该小节内容转载https://zhuanlan.zhihu.com/p/57958859。
采集
我们需要需要一些传感器来获取数据,下面是需要的传感器列表:lidar、摄像头、gps定位、惯导等。lidar主要是来采集点云数据,因为激光雷达可以精确的反应出位置信息,所以激光雷达可以知道路面的宽度,红绿灯的高度,以及一些其他的信息,当然现在也有厂家基于视觉SLAM(纯摄像头测距)来制作地图的,有兴趣的也可以看下相关介绍。
摄像头主要是来采集一些路面的标志,车道线等,因为图像的像素信息更多,而位置信息不太精确,所以采用摄像头来识别车道线,路面的一些标志等。
gnss记录了车辆的位置信息,记录了当前采集点的坐标。惯导用来捕获车辆的角度和加速度信息,用来校正车辆的位置和角度。有了定位信息和点云图中的位置信息就可以计算出来每个扫描物的准确位置。
加工
首先需要生成一张原始的地图,这里我们采用点云生成原始的地图,因为点云的距离位置信息比较准确,因为点云数据是0.1s采集一帧,下面我们可以做一个计算。如果车速是100km/h,对应27.8m/s。即0.1s车行驶的距离是2.78m,而激光雷达的扫描距离大概是150m,所以前后2帧大部分地方是重合的。因为数据是一帧一帧的,我们需要把上面的说的每一帧进行合并,生成一张完整的地图,有点类似全景照片拼接,这样我们就可以得到一张原始的采集路段的地图。这里用到了点云的配准技术,有2种算法ICP和NDT,基于上面的算法,可以把点云的姿态进行变换并且融合。
点云拼接好了之后,我们就需要在道路上标出路沿,车道线,红绿灯,路口,一些交通标识等。大部分的工作都可以用深度学习结合图像的方法去解决,查找出上面的一些信息并且标识出来,目前有些场景还是需要人工标识出来,比如路口停止线和红绿灯的关系,如果一些特殊场景的车道线等,需要人工去做一些校正。
点云地图校准 -> 地图标注加工 -> 高精度地图
这样就生成了一张高精度地图,当然加工过程中首要的目标是提高效率和质量,尽量的采用算法自动化处理会很大的提高效率,这可能是后面地图厂家的核心竞争力。因为地图需要实时更新,谁的效率更高,谁的图就越新,用的人越多,之后的数据也越完善。
转换
将高精地图的格式转换为opendrive通用格式。
感知模块
感知模块主要是识别周边的环境,包括街道范围、红绿灯、标识牌、护栏、绿化带、其他车辆、人、障碍物等,利用计算机视觉技术和多传感器信息融合技术来提升感知的准确度。这里具体一般是使用机器学习的方法做图像检测和识别。通常的传感器包括摄像头、毫米波雷达、激光雷达。它们在不同的情况下有不同的优点,比如激光雷达在环境恶劣时候表现不好,而这时候毫米波雷达会好一些。所以自动驾驶目前会融合多传感器的数据,综合做出判断。具体来说感知模块需要去做如下工作:车道线检测、红绿灯识别、交通标识牌识别、行人检测、车辆的检测等。
车道线检测
车道线检测的两大主流方法是基于视觉的车道线检测和基于雷达的车道线检测。
- 基于雷达的车道线检测直接从点云中检测车道线,该方法对雷达的线束要求很高,32线及以下的激光雷达难以用于车道线检测,因为点云太稀疏,车道线的特征不明显。而64线及以上的激光雷达成本高昂,短期内难以大规模推广应用。
- 基于视觉的检测方法,简便直观易于理解,处理速度快,成本低,容易被市场所接受;但该方法使用的硬件设备一一相机,其自身存在局限性,存在相机形变且容易受外界环境的影响,尤其是在天气、光照等条件恶劣的情况下,容易对检测结果造成一定的偏差甚至无法检测。
- 多传感器融合技术,先在图像中检测出车道线,然后将激光雷达生成的点投射到图像上,找出落在车道线上的点在激光雷达坐标系中的坐标,通过这些坐标即可拟合出激光雷达坐标系中的车道线。
红绿灯识别
一种是基于V2X,即智能网联技术。另一种方式是基于人工智能的视觉算法,它也是目前业界使用最广泛的一种方法
交通标识牌识别
交通标识牌识别的方式与红绿灯检测类似,可以直接使用深度神经网络对原始图像进行交通标识牌检测。也可以结合高精度地图,将交通标志信息存放在高精度地图中,在车辆行驶的过程中,直接根据车辆的位置从高精度地图中获取交通标志信息。
行人车辆识别
行人、车辆的检测常用的方式有两种。一种是直接使用激光雷达的数据进行目标检测。另一种是融合激光雷达和相机进行目标检测。激光雷达能够提供精确的位置和大小信息,基于图像的深度学习更擅长目标类别的识别。
进一步,需要判断出来行人和车辆的动态位置、速度、方向,根据一些预判来决定驾驶行为。
规划模块
规划模块主要分为三个功能:
Route Planning
RoutePlanning是道路级路径规划,也就是普通导航。它一般使用A*算法来计算起点到终点的路径规划。
Behavior Planning
宏观行为预测,根据感知模块扫描到的周围环境预测行为:超车、跟车、避让、停止。这里可以使用强化学习、神经网络、贝叶斯网络、模糊推理等技术手段来实现。
Motion Planning
局部路径规划,比如从一条车道行驶到另外一条车道上,得到从一条车道行驶到另外一条车道的轨迹点,同时获得所有轨迹点的速度、加速度、角度。具体使用的技术包括强化学习,A*算法,遗传算法、动态路径规划算法、人工势场法等
控制模块
根据Motion Planning的结果控制汽车横向和纵向速度移动,完成任务。控制车身横向转弯和纵向加速度,完成规划好的路线行驶。具体使用的技术包括:滑膜控制、模糊控制、神经网络控制、最优控制、自适应控制和纯跟踪控制等技术
自动驾驶问题
达到99%的精确度是容易的,但是想达到99.999%的精确度就太难了。目前自动驾驶的问题是在复杂路况下仍然存在小概率的判断错误,但是又很难模拟所有的复杂路况情况。所以自动驾驶公司一般都会有仿真系统,让自动驾驶系统在仿真系统中学习各种复杂路况。