自动驾驶汽车技术最主要是人工智能。 人工智能就相当于驾驶者的大脑。
其他还会有一些辅助技术,比如激光测量,声波测量,运动传感器,GPS等等,相当于人的眼睛、耳朵、神经感觉等等。
目前这些辅助技术很多都已经非常成熟,甚至远超人类, 比如激光和声波测量技术, 目前都运用到很高高端车型上,可以进行ACC自动巡航。 还有夜视技术,可以帮助驾驶员在漆黑的页面看清100米开外的人、动物、障碍, 这些都远远超过人类的生理极限。
但是人工智能,目前还在起步阶段。也就是说,自动驾驶员的四肢、感官目前都已经很不错了,甚至超过人类了,但是还缺个脑子
从自动驾驶技术的开发历史看,应该追溯到1975年,当时是利用计算机的视觉技术进行了自动驾驶研究开发。中途曾一度中断过,但现在又开始火热研究起来。图1表示目前自动驾驶技术的开发历史。从法律和技术层面看,到实际商品化还有许多路要走。人们期待自动驾驶能解决交通事故和环境污染问题,目前正通过产学研进行合作研究。
欧洲对自动驾驶车的开发非常重视,被列为了国家重点项目在推进,目前已取得了一些成果。美国以谷歌为代表在研究自动驾驶技术,在道路上做自动驾驶实验,在内华达州还可申办新的自动驾驶执照。 日本在2008年到2012年之间为了实现安全、环保的物流运输系统,开发了重型卡车自动列队行驶技术。2014年以政府为中心推进自动驾驶车的实际运用(SIP- adus)
一般而言,无人驾驶系统一般有三大模块
1.环境感知模块
无人驾驶汽车是通过传感器来感知环境信息。比如摄像头、激光雷达、毫米波雷达以及工业相机是用于获取环境信息;而GPS等用于获取车身状态的信息。当然还需要通过算法提取出有用的信息。
2.行为决策模块
行为决策是指无人驾驶汽车根据路网信息、获取的交通环境信息和自身行驶状态,产生遵守交通规则的驾驶决策的过程。
用人话说就是规划出一条精密的行驶轨迹,然后无人驾驶车就可以跟着这条轨迹走。
3.运动控制模块
运动控制模块是根据规划的行驶轨迹和速度以及当前的位置、姿态和速度,产生对油门、刹车、方向盘和变速杆的控制命令。
无人驾驶技术实现上有两大派系
无人驾驶的实现路径大概有两大派系,一派是以谷歌为主的互联网公司,一派以特斯拉为首的汽车制造商。
谷歌的蓝图是无人车完全取代人来驾驶,把无人车看成机器人,所以没有方向盘、油门和刹车。
谷歌无人车顶上是约8万美元的64线激光雷达(Lidar)。它在高速旋转时发射激光测量与周边物体的距离,再根据距离数据描绘出精细的 3D 地形图,并跟高分辨率地图数据相结合建模,帮计算机做决策。
由此可知,这条技术路线的关键是对周围环境的模拟和3D地图数据,而谷歌在这方面有深厚的积累。
而特斯拉的计划是从机器辅助驾驶进化到完全自动驾驶。所以技术上逐步实现自动刹车、定速巡航、自适应巡航等,最终完全自动驾驶。
特斯拉 Model S主要是靠摄像头结合计算机视觉,特斯拉辅助驾驶使用的硬件包括前置摄像头、前置雷达(相对廉价的毫米波雷达)、12个超声波传感器,目前没有使用高精度地图。
简单的说前者(Google无人车)更重定位,是高精度定位+高精度地图+识别,偏机器人的方案,后者更重视识别(低精度定位+低精度地图+高准确率识别),后者接近于人开车,人开车不需要高精度地图。
那么自动驾驶汽车涉及哪些技术呢,下面是一部分通用的技术:
训练一个自动驾驶的决策模型
行为决策是指根据路网信息、获取的交通环境信息和自身行驶状态,产生遵守交通规则的驾驶决策的过程。学术界的一个解决方案是用现在很火的深度学习,来实现模仿性学习(Behavioral Cloning),但是可靠性上可能有问题,实际应用中还是会有大量的规则等方式。
识别并躲避障碍物
这个问题的解决方案是传感器融合算法,利用多个传感器所获取的关于环境全面的信息,通过融合算法来实现障碍物识别与跟踪和躲避。
根据周边信息,在地图上定位车俩
在地图上定位汽车,这一块实现的差异很大。由于民用GPS误差过大,不能直接用于无人驾驶。
有一类定位是通过激光雷达使周围物体和自车的距离的精度达到厘米级,配合三维地图数据可以将车辆定位至几厘米~ 十几厘米的程度
还有一类通过还计算机视觉的方案来定位,也就是(SLAM)。
从相机中识别行人
从相机中识别行人是一个计算机视觉问题,需要利用摄像机识别出物体(在这里是人),其实是个。
车道识别
车道识别也是计算机视觉问题,有道路线检测算法。简单的方法有颜色选择,切图(ROI, region of interest selection),灰度处理,高斯模糊,边缘检测和霍夫变换直线检测。如果能够识别一张图片中的道路线,那么对于行驶中的车辆上摄像头实时采集的图像也可以实时分析。
高级的道路线检测需要计算相机校准矩阵和失真系数对原始图像的失真进行校正;使用图像处理方法,将图像进行二值化处理;应用透视变换来纠正二值化图像(“鸟瞰视图”);检测车道并查找确定车道的曲率和相对于中心的车辆位置;将检测到的车道边界扭曲回原始图像;可视化车道,输出车道曲率和车辆位置。
交通标志识别
无人车也是要懂得交通规则的,所以识别交通标志并根据标志的指示执行不同指令也非常重要。这也是个计算机视觉问题,可以用深度学习(卷积神经网络)的方法来完成。
车辆的自适应巡航控制
车辆的自适应巡航控制(ACC)是在定速巡航控制的基础上,通过距离传感器实时测量本车与前车的距离和相对速度,计算出合适的油门或刹车的控制量,并进行自动调节,这一块有不少成熟的方案。
让汽车在预定轨迹上运动
让汽车在预定轨迹上运动是一个机器控制和规划问题,比如在躲避突发障碍之后动态路线规划。
当然解决了上面问题,不代表就能造出无人车,造无人车是个系统工程,需要软件和硬件层面的积累
下面从硬件和软件两方面谈一谈自动驾驶汽车所涉及的技术。
一。 硬件
离开硬件谈自动驾驶都是耍流氓。
先看个图,下图基本包含了自动驾驶研究所需要的各种硬件。
然而…
这么多传感器并不一定会同时出现在一辆车上。某种传感器存在与否,取决于这辆车需要完成什么样的任务。如果只需要完成高速公路的自动驾驶,类似Tesla 的 AutoPilot 功能,那根本不需要使用到激光传感器;如果你需要完成城区路段的自动驾驶,没有激光传感器,仅靠视觉是很困难的。
自动驾驶系统工程师要以任务为导向,进行硬件的选择和成本控制。
1.汽车
既然要做自动驾驶,汽车当然是必不可少的东西。
从我司做自动驾驶的经验来看,做开发时,能不选纯汽油车就别选。
一方面是整个自动驾驶系统所消耗的电量巨大,混动和纯电动在这方面具有明显优势。另一方面是是发动机的底层控制算法相比于电机复杂太多,与其花大量时间在标定和调试底层上,不如直接选用电动车研究更高层的算法。
国内也有媒体专门就测试车辆的选择做过调研。
2.控制器
在前期算法预研阶段,推荐使用工控机(Industrial PC,IPC)作为最直接的控制器解决方案。因为工控机相比于嵌入式设备更稳定、可靠,社区支持及配套的软件也更丰富。
百度开源的Apollo推荐了一款包含GPU的工控机,型号为Nuvo-5095GC,如下图。
当算法研究得较为成熟时,就可以将嵌入式系统作为控制器,比如Audi和TTTech共同研发的zFAS,目前已经应用在最新款Audi A8上量产车上了。
3.CAN卡
工控机与汽车底盘的交互必须通过专门的语言——CAN。从底盘获取当前车速及方向盘转角等信息,需要解析底盘发到CAN总线上的数据;工控机通过传感器的信息计算得到方向盘转角以及期望车速后,也要通过 CAN卡 将消息转码成底盘可以识别的信号,底盘进而做出响应。
CAN卡可以直接安装在工控机中,然后通过外部接口与CAN总线相连。
Apollo使用的CAN卡,型号为ESD CAN-PCIe/402,如下图。
4.全球定位系统(GPS)+惯性测量单元(IMU)
人类开车,从A点到B点,需要知道A点到B点的地图,以及自己当前所处的位置,这样才能知道行驶到下一个路口是右转还是直行。
无人驾驶系统也一样,依靠GPS+IMU就可以知道自己在哪(经纬度),在朝哪个方向开(航向),当然IMU还能提供诸如横摆角速度、角加速度等更丰富的信息,这些信息有助于自动驾驶汽车的定位和决策控制。
Apollo的GPS型号为NovAtel GPS-703-GGG-HV,IMU型号为NovAtel SPAN-IGM-A1。
5.感知传感器
相信大家对车载传感器都耳熟能详了。
感知传感器分为很多种,包括视觉传感器、激光传感器、雷达传感器等。
视觉传感器就是摄像头,摄像头分为单目视觉,双目(立体)视觉。比较知名的视觉传感器提供商有以色列的Mobileye,加拿大的PointGrey,德国的Pike等。
激光传感器分为单线,多线一直到64线。每多一线,成本上涨1万RMB,当然相应的检测效果也更好。比较知名的激光传感器提供商有美国的Velodyne和Quanergy,德国的Ibeo等。国内有速腾聚创和禾赛科技。
雷达传感器是车厂Tier1的强项,因为雷达传感器已经在汽车上得到了广泛使用。知名的供应商当然是博世、德尔福、电装等。
6.硬件部分总结
组装一套可以完成某项功能的自动驾驶系统需要及其丰富的经验,并且要对各传感器的性能边界及控制器计算能力了如指掌。优秀的系统工程师能在满足功能的要求下将成本控制在最低,使其量产、落地的可能性更大。
二。 软件
软件包含四层:感知、融合、决策、控制。
各个层级之间都需要编写代码,去实现信息的转化,更细化的分类如下。
1.采集
传感器跟我们的PC或者嵌入式模块通信时,会有不同的传输方式。
比如我们采集来自摄像机的图像信息,有的是通过千兆网卡实现的通信,也有的是直接通过视频线进行通信的。再比如某些毫米波雷达是通过CAN总线给下游发送信息的,因此我们必须编写解析CAN信息的代码。
不同的传输介质,需要使用不同的协议去解析这些信息,这就是上文提到的“驱动层”。
通俗地讲就是把传感器采集到的信息全部拿到,并且编码成团队可以使用的数据。
2.预处理
传感器的信息拿到后会发现不是所有信息都是有用的。
传感器层将数据以一帧一帧、固定频率发送给下游,但下游是无法拿每一帧的数据去进行决策或者融合的。为什么?
因为传感器的状态不是100%有效的,如果仅根据某一帧的信号去判定前方是否有障碍物(有可能是传感器误检了),对下游决策来说是极不负责任的。因此上游需要对信息做预处理,以保证车辆前方的障碍物在时间维度上是一直存在的,而不是一闪而过。
这里就会使用到智能驾驶领域经常使用到的一个算法——卡尔曼滤波。
3.坐标转换
坐标转换在智能驾驶领域十分重要。
传感器是安装在不同地方的,比如超声波雷达(上图中橘黄色小区域)是布置在车辆周围的;当车辆右方有一个障碍物,距离这个超声波雷达有3米,那么我们就认为这个障碍物距离车有3米吗?
并不一定!因为决策控制层做车辆运动规划时,是在车体坐标系下做的(车体坐标系一般以后轴中心为O点),所以最终所有传感器的信息,都是需要转移到自车坐标系下的。
因此感知层拿到3m的障碍物位置信息后,必须将该障碍物的位置信息转移到自车坐标系下,才能供规划决策使用。
同理,摄像机一般安装在挡风玻璃下面,拿到的数据也是基于摄像机坐标系的,给下游的数据,同样需要转换到自车坐标系下。
什么是自车坐标系?
请拿出你的右手,以大拇指 → 食指 → 中指 的顺序开始念 X、Y、Z。
然后把手握成如下形状:
把三个轴的交点(食指根部)放在自车坐标系后轴中心,Z轴指向车顶,X轴指向车辆前进方向。
各个团队可能定义的坐标系方向不一致,只要开发团队内部统一即可。
4.信息融合
信息融合是指把相同属性的信息进行多合一操作。
比如摄像机检测到了车辆正前方有一个障碍物,毫米波也检测到车辆前方有一个障碍物,激光雷达也检测到前方有一个障碍物,而实际上前方只有一个障碍物,所以我们要做的是把多传感器下这辆车的信息进行一次融合,以此告诉下游,前面有一辆车,而不是三辆车。
5.决策规划
这一层次主要设计的是拿到融合数据后,如何正确做规划。规划包含纵向控制和横向控制。
纵向控制即速度控制,表现为 什么时候加速,什么时候制动。
横向控制即行为控制,表现为 什么时候换道,什么时候超车等
6.软件长什么样子?
自动驾驶系统中的部分软件看起来和下面类似。
软件的名字反映了该软件的实际作用——
app_driver_camera 摄像机驱动
app_driver_hdmap 高精度地图驱动
app_driver_ins 惯导驱动
app_driver_lidar 激光传感器驱动
app_driver_mwr 毫米波传感器驱动
app_fusion_freespace 自由行驶区域融合
app_fusion_lane 车道线融合
app_fusion_obstacle 障碍物融合
app_planning&decision 规划决策
然而实际上攻城狮们会编写一些其他软件用于自己的调试工作,比如记录数据和回放数据的工具。
还有用于传感器信息显示的可视化程序,类似下图的效果。
评论