“无论是眼睛,还是任何其他大的生物结构体,都由多个离散系统组成”
——《达尔文的黑匣子》
无人驾驶已走过一甲子
看到这个标题读者可能会感到疑惑,自动驾驶不是时下最新潮的技术吗?为什么会说自动驾驶已有60年历史呢?其实早在1950年代,通过在道路正下方埋设磁铁,车辆就可以沿着磁轨迹在高速公路上进行自动驾驶。这项技术如今在飞思卡尔杯智能车比赛[注1]中成为了一个组别,感兴趣的读者可以查阅相关视频资料。现实道路中,这项技术也仍旧在使用:一些自动驾驶测试场通过在地面上铺设磁钉实现对车辆进行厘米级的定位。
而今天的无人驾驶系统[注2],与当时的无人驾驶系统最大的区别在于,今天的无人驾驶系统脱离了对辅助设施的必须依赖。可以说,当前的无人驾驶研究的重点更倾向于如何让车辆独立地理解这个世界,并以此为依据来对车辆进行控制。进一步说,无人驾驶汽车对世界理解的程度,决定了该无人驾驶系统先进的程度。
当前在售的自动驾驶系统
如今很多的车辆开始配备带有辅助驾驶功能的汽车,顶配车辆不带辅助系统似乎就与其他品牌差了一截,含高级辅助驾驶功能的在售车型长长的名单里都是我们熟知的大厂[注3]。今天在售的系统在传感器方面的主流配置为:单目或双目的图像传感器 前向长距离毫米波雷达。达到的功能为单车道的自适应辅助驾驶,包括纵向——自动控制与前车的距离,横向——车道保持。但究竟这些系统是如何构建的?我们一般都只能从一些只字片语中得到一些信息,比如这一代宝马新7系的系统构架图如下:
BMW G12 Active Driving Assistant Plus wiring diagram
这张复杂的系统连接图中,可以看到BMW使用了包括CAN,FlexRay,LIN,以太网在内的多种总线技术,系统包含了十余个逻辑控制器,复杂程度令人惊叹。而具体在如KAFAS中的控制逻辑是什么样的,我们是不知道的。不过笔者也实际测试过宝马新7系的辅助驾驶功能,综合而言,距离特斯拉的Autopilot还有一定距离。在这一行业,所有汽车公司都把这一块当作核心的商业秘密,正在分头进行紧锣密鼓地研发。但在笔者眼中,这些系统必定具有几大核心的模块,只要通过对这些模块的分别研发和系统集成,最后可以产生一个统一的自动驾驶系统。
无人驾驶系统的分解
现代无人驾驶系统看似复杂,但终究是可以分割为多个离散系统的。笔者认为可以分为如下五个子模块:传感器、感知、定位、规划、控制。
传感器:整个系统的输入,包括了为自动驾驶设计的传感器,例如摄像头与毫米波雷达;以及车身上已有的传感器,例如超声波传感器以及GPS。传感器的本质是将物理世界的信息转换为电信号。
特斯拉Autopilot 2.0传感器配置
感知:负责计算车辆周围物体的语义信息。感知模块的加入,是这一代自动驾驶系统与以往最大的区别。该模块负责许多信息的获取,包括,前车的距离,前方红绿灯的指示,限速标志上的数字,车道线的曲率,等等。车辆对周边环境的感知水平,决定了自动驾驶系统先进的程度。
基于图像的语义分割结果示例,
如图中紫色代表道路,绿色代表行人
定位:定位主要有两个作用,一个是为了弥补GPS精度不足导致的输入误差过大,通过定位模块计算得到厘米级别的定位。第二个,是为了使车辆获取超过当前传感器感知范围的信息,包括长距离地图路网信息,超视距前方车流信息等。将第二点归于此,是因为定位模块与地图息息相关。
基于LiDAR的激光点云配准结果
规划:规划问题一般分为多层次的规划来讨论。我们平时使用的导航软件,称为一次规划,得到从A点到B点的路网行驶规划路径。其后还有二次、三次规划(甚至更深层次的规划)。
Mobileye Holistic Path Planning(HPP)输出结果,
即为局部规划结果
控制:最后,系统将得到的信息归于控制输出,其主要作用是与汽车的底盘系统打交道,将控制指令通过X-by-wire,即线控接口输出。
其他的,还有数据记录模块,安全相关模块以及电源管理模块等辅助子系统。
无人驾驶的开源实现
前面说的都是纸上谈本,而《手把手》系列当然不会浮于表面。自《手把手(二)》写完已经过了若干个月,而今终于有了可以详细剖析的开源项目:就在前日,George Hotz决定开源自己的自动驾驶系统(当然不是全部,后文会讲到),地址见[注4]。本篇中,笔者将对该系统进行粗略的分析,从系统构架的角度对其进行介绍。
计划卖999美元的comma one自动驾驶套件
首先,必须介绍一下该开源项目的背景。出于对George Hotz的产品的安全性的怀疑,NHTSA(国家高速公路交通安全管理局)希望George Hotz配合他们的安全性评估,但被小哥拒绝了。而后George Hotz一个冲动就把他的Openpilot开源了(当然最核心的并没有)。其本人在Openpilot/README.md中称,这套系统应与特斯拉的Autopilot性能相当,并超越所有其他的竞争对手,注意是所有的。笔者虽然没有乘坐过那辆Acura ILX,但就代码而言,大部分前文所叙述的子系统,在该系统中都有相应的模块与之对应,系统构架如下:
传感器:sensord模块 radard模块
使用了原车的GPS,前向毫米波雷达,而并未使用超声波传感器。摄像头使用手机自带的摄像头(效果不做评论)。
感知:visiond模块(binary)
使用了从输入图像直接输出控制路径点链的深度学习方法,其数据通过之前的驾驶行为中得到。应该称其为一种类端到端的感知方法,即不去理解周围其他物体的语义信息,而直接通过学习的方法,从图像得到行驶的规划轨迹。不过从George Hotz的博客上也看到,其正在做一些语义分割的实验,也许将来这块会有所变化。但由于这个模块为二进制程序,笔者只能进行一些猜测。
定位:无
规划:与visiond结合在一起
comma one轨迹规划输出结果(紫色)
控制:controlsd模块
其他:loggerd模块 calibrationd模块
整套系统使用socket接口作为进程间通信,采用C与python混写的形式。看了代码虽然注释不多,但变量名函数名还算比较清晰。整套系统没有定位模块,通过感知得到的车道(或者说规划轨迹)信息,直接对车辆进行控制。也就是说整个系统是一个以visiond模块为核心的控制系统,这与上文笔者的结论相似。在如今的自动驾驶系统中,感知模块成为了系统的核心。这也就是Mobileye那么强势的原因,也是George Hotz自信的来源。
总结
从沿着磁轨迹行驶的小车到现代的无人驾驶系统,我们认为新的系统并不是一种进化而来的系统。就像自行车与摩托车的关系一样,现代的无人驾驶系统拥有以往系统中没有的重要子模块,即感知模块。我们有理由相信,本次自动驾驶技术的爆发,也是由深度学习技术的突飞猛进而形成的。该技术使得计算机更好得理解了世界。从Google到特斯拉,以及George Hotz的Openpilot,无不是以感知模块作为核心技术壁垒所建立起的自动驾驶系统。
下一篇,我们将详述Openpilot系统的各个子系统,力求使读者明白自动驾驶一辆讴歌ILX或者本田思域的背后是哪些技术在做支撑,敬请期待。
注1: http://www.smartcar.au.tsinghua.edu.cn/
注2:指从2003年DARPA挑战赛之后开始的无人驾驶系统
注3: http://www.thedrive.com/tech/5707/the-war-for-autonomous-driving-part-iii-us-vs-germany-vs-japan
注4: https://github.com/commaai/openpilot
本文由ROBOTICISTS原创,转载请联系本公共号获得授权
机 器 学 人 | R O B O T I C I S T S
联系客服