作者:韩威,宇通智能车队队长,清华大学博士,有超20年软件开发与系统设计经验。曾参与研发多辆无人驾驶车辆,是北汽C70、E70、宇通智能驾驶大客车的主要技术负责人。
本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅2016年《程序员》
人工智能发展六十年,几起几落,如今迎来又一次热潮,深度学习、计算机视觉和自然语言理解等各方面的突破,使得许多曾是天方夜谭的应用成为可能,无人驾驶汽车就是其中之一。作为人工智能等技术在汽车行业、交通领域的延伸与应用,无人驾驶近几年在世界范围内受到了产学界甚至国家层面的密切关注。
无人驾驶其实并不新鲜。早在上世纪八十年代,美国就启动了相关研究项目。无人驾驶最近几年又火起来,原因主要有两方面:一是技术,包括人工智能、车载软硬件及网络的飞速发展,过去的不可能现在变为可能;二是需求,人们的生活已经离不开汽车,但随着汽车保有量的增加,事故、拥堵、污染等负面影响逐渐显现,需要新技术新方法提高交通的安全性、舒适性、经济性以及环保性。
无人驾驶相关的科普文章、技术文献非常丰富,本文不再赘述,下面就结合笔者近几年的研发经历谈谈无人驾驶的一些实践与心得。
相比无人驾驶,智能驾驶的范畴更大,既包括无人的智能驾驶,即无人驾驶,也包括有人的智能驾驶,比如定速巡航、自适应巡航、自动泊车等辅助驾驶系统,还包括人机共驾的智能驾驶,国内专业说法是以人为本的人机协同共驾,这是现阶段以及未来几年的研究方向之一,它们之间的关系如图1所示。
从笔者经历来看,最难实现的是人机协同共驾,如何将无人驾驶与有人驾驶融为一体而不是非此即彼的冷切换,如何理解驾驶员的意图进而在紧急时刻采取措施弥补驾驶员的不足,当驾驶员意图与智能车意图发生矛盾时怎么办等等都是值得探索的问题。设想如下场景:当驾驶员正在将车驶离当前车道,但智能车认为没有必要,这时应该听谁的?是发出警告,还是直接阻止驾驶员旋转方向盘?这需要具体情况具体分析。首先智能车要了解驾驶员的真实意图,如果从车内摄像头看到驾驶员是清醒的,是先打开转向灯再旋转方向盘,并且动作时序、间隔和往常一样,那么说明换道是驾驶员有意为之,这时就要服从驾驶员的控制;相反,如果智能车发现驾驶员处于困倦状态,比如连续驾驶时间过长、眼睛闭合次数过多时间过长等,而且没有打开转向灯,那么极有可能是疲劳驾驶,换道并非驾驶员的真实意图,这时智能车必须通过声音、闪光、震动等方式提醒驾驶员注意,如果驾驶员对提示没有任何反应,并且有马上发生碰撞的可能,那么智能车必须接管控制权,将车停到安全地带或者无人驾驶到目的地。当然这只是一个想象中的例子,智能驾驶的实际情况会更加复杂。
根据美国高速公路安全管理局网站,学术界一般将智能驾驶分为五个等级:
目前国内外智能驾驶技术还处于Level 2至Level 3的水平。特斯拉公司去年推出的Model S电动车已经具有了部分无人驾驶功能,智能驾驶技术已经真真切切地进入到我们的视野。有研究机构预测2040年无人驾驶汽车将占汽车市场的70%。无论数字准确与否,无人驾驶前景是被广泛看好的。
国内的无人驾驶领域,很多车企、高校、研究所进展迅速,已陆续做出了可以在路上跑的无人车,但从技术角度来看,问题还很多,离真正量产到走入百姓生活还很远。因为涉及到生命安全,不能冒进,必须非常谨慎。另外,从供应链来看,作为核心部件的车载传感器大都掌握在国外厂商手中,控制与执行器大都掌握在国外汽车零部件厂商手中,车载芯片与操作系统也是如此,国内外有差距,我们还有很多空白需要填补,还有很长一段路要走。
无人驾驶汽车并不神秘,类似于移动机器人,但它与移动机器人的研究出发点不同,因为里面有乘客,必须考虑人的感受与体验。笔者认为现阶段无人驾驶实际上是类人驾驶,即计算机模仿人类驾驶员的驾驶行为,目标是使计算机成为一位眼疾手快、全神贯注、经验丰富、永不疲倦的虚拟司机,最终将人类从低级、繁琐、持久的驾驶活动中解放出来。
首先我们回想一下人是怎么开车的。人类开车是在周而复始地进行一个“感知→认知→行为”的循环。感知的对象是周围的交通环境,如本车在哪里、其它车在哪里、道路多宽、限速多少、现在是红灯还是绿灯等;认知包括理解、规划、决策以及经验,比如红灯要停车、路口要减速、何时及如何换道、当前加速还是减速等;行为指的是操控汽车,如方向盘是否转到位、油门刹车档位如何协调等。无人驾驶也在重复着“感知→认知→行为”的过程。下面以图2这辆可以无人驾驶的大客车为例对这个过程加以详细说明(该车是宇通集团与中国工程院李德毅院士团队合作研发而成。2015年8月,这辆长10米的大客车满载乘客从河南省郑州市出发,在正常交通流量下,沿着郑开大道无人驾驶32公里安全到达河南省开封市,最高时速68公里/时,途经26个路口及信号灯,停靠2个公交站,全程无人工干预)。
人类驾驶员感知依靠眼睛和耳朵,无人驾驶汽车感知依靠传感器。目前传感器性能越来越高、体积越来越小、功耗越来越低,其飞速发展是无人驾驶热潮的重要推手。反过来,无人驾驶又对车载传感器提出了更高的要求,又促进了其发展。用于无人驾驶的传感器可以分为四类:
综合考虑成本及性能,宇通无人驾驶大客车采用了激光雷达、毫米波雷达、摄像头、GPS和车联网设备等多种传感器来实现感知能力,具体部署如图3所示。
驾驶员认知靠大脑,无人驾驶汽车的“大脑”则是计算机。无人车里的计算机与我们常用的台式机、笔记本略有不同,因为车辆在行驶的时候会遇到颠簸、震动、粉尘甚至高温的情况,一般计算机无法长时间运行在这些环境中。所以无人车一般选用工业环境下的计算机——工控机。工控机上运行着操作系统,操作系统中运行着无人驾驶软件。
宇通无人驾驶大客车软件系统架构如图4所示。操作系统之上是支撑模块(这里模块指的是计算机程序),对上层软件模块提供基础服务。支撑模块包括:虚拟交换模块,用于模块间通信;日志管理模块,用于日志记录、检索以及回放;进程监控模块,负责监视整个系统的运行状态,如果某个模块运行不正常则提示操作人员并自动采取相应措施;交互调试模块,负责开发人员与无人驾驶系统交互。支撑模块之上是三大类软件模块,通过图4中的模块名称可以知晓其主要功能,这里不再赘述。
驾驶员操控汽车靠四肢,无人驾驶汽车靠什么呢?靠的是线控执行器。
由于当前车辆是面向人类驾驶设计的,方向盘、油门、刹车、档位都是由人工操控。无人驾驶则需要这些机构能够由程序控制,这就需要对传统汽车加以线控改造甚至重新设计。方向盘线控的改造,早期一般在转向柱加装可控电机,现在一般利用较为成熟的转向助力零部件实现;油门与制动线控的改造,早期一般使用钢丝牵引车内踏板,但控制精度不高,现在一般直接使用车内总线协议向整车控制器发送控制指令;档位线控的改造,早期一般靠步进电机实现,现在同样向整车控制器发送指令实现档位控制。
目前,随着电动车的出现与发展,很多线控功能在设计之初就被考虑其中。
传感器、计算机和执行器是如何连接在一起并协同工作呢?如图5所示,以计算机为中心,一类设备使用RJ45以太网络接口,如广泛使用的1线、4线、16线、64线激光雷达,差分GPS惯导组合等,这些设备与工控机一起连接到网络交换机;一类设备使用1394接口,如摄像头等;一类设备使用CAN接口,如毫米波、超声波雷达、控制器与执行器等,一般通过工控机扩展PCI的CAN接口卡实现连接。
小结一下,无人驾驶汽车在逻辑与物理上的工作过程如图6所示。在一个控制周期内,传感器负责感知周围环境及自身状态,计算机中的软件系统负责环境建模、决策与规划,执行器负责执行指令并反馈结果。控制周期一般为毫秒级,由多种传感器采样频率、软件算法复杂度、计算机性能以及执行器频率决定。控制周期不能太长,太长则不能对突发情况进行及时处理,也不能太短,太短则会造成计算及执行器负载过高。正常人类驾驶员的反应时间为0.2秒左右,宇通无人驾驶大客车的控制周期为50毫秒,可以满足城市工况高速行驶要求。
与其他算法相比,人工智能算法最大的不同是什么?笔者认为,人工智能算法更侧重于学习功能,其他算法更侧重于计算功能。学习是智能的重要体现,学习功能是人工智能的重要特征,现阶段大多人工智能技术还处在学的阶段。如前文所说,无人驾驶实际上是类人驾驶,是智能车向人类驾驶员学习如何感知交通环境,如何利用已有的知识和驾驶经验进行决策和规划,如何熟练地控制方向盘、油门和刹车。
从感知、认知、行为三个方面看,感知部分难度最大,人工智能技术应用最多。感知技术依赖于传感器,比如摄像头,由于其成本低,在产业界倍受青睐。以色列一家名叫Mobileye的公司在交通图像识别领域做得非常好,它通过一个摄像头可以完成交通标线识别、交通信号灯识别、行人检测,甚至可以区别前方是自行车、汽车还是卡车。人工智能技术在图像识别领域的成功应用莫过于深度学习,近几年研究人员通过卷积神经网络和其它深度学习模型对图像样本进行训练,大大提高了识别准确率。Mobileye目前取得的成果,正是得益于该公司很早就将深度学习当做一项核心技术进行研究。
认知与控制方面,主要使用人工智能领域中的传统机器学习技术,通过学习人类驾驶员的驾驶行为建立驾驶员模型,学习人的方式驾驶汽车。美国斯坦福大学的一个团队让无人驾驶赛车学习赛车手的开车方式,经过一段时间训练无人赛车不仅学会了漂移,而且比赛用时已经少于当初学习的那位赛车手。
下面通过一个城市驾驶的小例子说明无人车如何向人类学习驾驶。会开车的读者会有体会,在城市中驾驶大部分时间是在跟车行驶,即前面有一辆车,我们跟在后面。假如在高速公路上,两车车速较高,跟车太近容易追尾,必须减速以增加车距;假如在拥堵时,车速较低,跟车太远则浪费道路资源,必须加速以减少车距;如果前车速度很快或正在加速,那么在不超速的情况下,我们应该加速行驶;如果前车速度很慢或正在减速,那么我们应该减速行驶甚至停下来。这说明跟车这个行为与两车相对距离、相对速度以及本车当前速度这三个量有关,我们可以建立一个神经网络模型,输入三个量:两车相对距离、相对速度以及本车当前速度,输出一个量:期望加速度(加速度可以为负),训练数据来自人类驾驶员。如何采集训练数据呢?我们可以在普通汽车上加装一些传感器,比如雷达和惯导设备,用来读取前方车辆的相对位置和速度以及本车的速度和加速度。让一位经验丰富的驾驶员开着这辆车每天不同时段在城市的不同路段有目的性地行驶,经过一段时间的积累,采集的跟车数据会覆盖绝大多数可能发生的情况。经过这组数据训练出来的基于神经网络的跟车模型,给定一个相对距离、相对车速以及本车速度,就会输出一个加速度,就像那位经验丰富的人类驾驶员开车特性一样,这就完成了跟车模式的机器学习。
笔者自2013年以来陆续参与了几辆无人驾驶汽车的研发,所用车型包括ix35、北汽C70、北汽C30、上汽E50、北汽E70以及宇通ZK6105。如图7所示,这些车型各有特点:有内燃机车,有混合动力车,也有纯电动车;有通过外加装方式改造的车,也有内改装的车;有总线协议不开放的车,有部分开放的车,也有完全开放的车。
从外观看,无人驾驶汽车越来越接近普通汽车,很多传感器已经内装甚至前装。正如李德毅院士所说,无人驾驶汽车内改装是必然趋势,外加装死路一条,传感器的安装、车辆的线控改造要在车辆设计之初就给予充分考虑。这里外加装指的是在传统汽车上,通过第三方设计的额外的油气电气装置实现车辆线控改造,这种方式已经过时,逐渐退出舞台。
为了实现无人驾驶,汽车总线协议完全开放或部分开放是趋势。总线协议掌握在整车厂或大零部件厂商手里。总线上定义了很多非常重要的指令与数据(各家的指令各不相同),对汽车安全至关重要,比如可以通过指令控制发动机工作或者停止,一般都不会对外开放。一个折中的方案是通过网关设备部分开放总线协议的指令与数据,由网关负责整车网络与上位机之间的数据通信,对指令的合法性进行检测,对数据的可访问性进行过滤。整车厂研发无人驾驶具有绝对优势,但出于安全考虑各家态度都非常谨慎,所以暂时互联网公司、高校院所抢占了无人驾驶的风头,但实际各家都在做技术储备,包括奔驰、奥迪、沃尔沃、宝马等。
最后总结,无人驾驶难在感知,重在“学习”。但无人驾驶的技术水平迟早会超过人类,因为稳、准、快是机器的先天优势,人类无法与之比拟。驾驶有时并不是负担,相反是一种乐趣,体现了人类拓展自身极限的能力。笔者相信,完全的无人驾驶也许有些遥远,但随着机器学习算法的提升和应用的挖掘,更接地气人机和谐共驾已是指日可待。
订阅2016年程序员(含iOS、Android及印刷版)请访问 http://dingyue.programmer.com.cn
订阅咨询:
• 在线咨询(QQ):2251809102
• 电话咨询:010-64351436
• 更多消息,欢迎关注“程序员编辑部”