首页 > 新能源汽车

张人杰:自动驾驶的阿喀琉斯之踵——冗余架构

来源:新能源汽车网
时间:2020-09-30 20:12:32
热度:

张人杰:自动驾驶的阿喀琉斯之踵——冗余架构/ 导读 /自动驾驶发展到今天,随着传感器技术和计算、决策、控制系统的进一步成熟,单车智能需要的技术在封闭环境和简单环境已经逐渐具备商业化

导读

自动驾驶发展到今天,随着传感器技术和计算、决策、控制系统的进一步成熟,单车智能需要的技术在封闭环境和简单环境已经逐渐具备商业化落地的可能性,同时V2X也在一定程度上为单车智能提供基于通信方式的协同。但是要实现真正意义上的完全无人驾驶的路还很长,而系统架构冗余设计目前还是业界普遍被忽视但却必须要有突破性发展的关键环节。本文基于作者多年对网络通信和轨道交通系统冗余设计的经验,期望能引发大家对架构冗余设计的理解,并开始思考如何将架构冗余应用到自动驾驶的软、硬件和系统设计中去。

什么是冗余?

所谓冗余,就是为了系统的可用性(availability),采用两套或者两套以上的相同或相似且相对独立配置并可切换使用的设计。简而言之,就是当一套系统出现问题时,另一套系统能够迅速切换,在不改变系统运行状态的条件上保障系统仍然可用。

冗余设计不是新概念,然而在传统汽车里很少考虑

做为现代化的交通工具,汽车在100年来一直承担着我们出行的重要任务,然而在汽车的系统架构设计中我们从来没有考虑过冗余设计,因此我们在道路上经常可以看见因发动机或其它故障抛锚的汽车,有时候一个小小的刹车片故障,都可能导致汽车无法制动而酿成大祸。

再让我们来看另一个很重要的交通工具——飞机,它在设计中一直通过冗余来保障生命关键性安全,通常一架飞机会配备四个发动机,如果有一到两个发动机出现故障时,飞机仍然能够通过剩余可用的发动机完成飞行任务,不至于造成坠机的重大伤亡事故。而现代飞机的控制电脑也大多采用冗余设计,提高了控制系统的可用性。

我们熟悉的通信网络,也很少出现系统级的断网现象,为什么?因为通信网络的关键设备,比如核心路由器,在中央板卡和线卡都有冗余备份,无论是路由计算还是线卡的数据包转发,出现故障时,都能自动完成切换,在用户端感知不到服务的中断。

在轨道交通系统里,因为调度均为系统完成,很少有人为干预,信号控制系统的可用性要求极高,所以也是采用冗余架构设计,为达到EN50128/EN50129的标准,甚至要考虑复杂的异构冗余。

传统汽车之所以没有考虑冗余设计,其中一个原因是从成本的角度,冗余架构引入的系统设计复杂度和带来的软硬件成本提高,对于传统汽车来说都是不现实的,还有另一个原因是汽车在公路上行驶,出现故障时转移和修理的成本并不高,在用户可以接受的范围内。

自动驾驶离不开冗余设计

新一代的智能汽车,自动驾驶是其中很重要的一个发展方向,但从行业技术发展看,包括Waymo等国际领先的自动驾驶系统厂商,在系统设计时都没有考虑最重要的环节——冗余架构。

自动驾驶为什么需要冗余设计?在高等级自动驾驶的场景中,人为干预情况极少,所有的感知、计算、决策、控制均由系统自动完成,在复杂的流程中只要有一个小故障发生导致部分系统不可用,就会产生车毁人亡的重大后果。那么,我们需要在哪些环节引入冗余架构设计呢?

首先,传感器需要冗余。过去我们提的较多的是传感器融合概念,就是通过多种不同的传感器收集信息并计算评估结果,但单纯的传感器融合无法解决单一传感器出现故障的系统可用性,我们必须针对每种类型的传感器都有冗余设计。因为无论是单目摄像头、立体摄像头、激光雷达、毫米波雷达,在自动驾驶环境信息采集的内容和cover的场景都是非完全重合的,只有对每一种类传感器采用冗余设计,才能保障极端情况下失效的可用性。比如我们在做360度全景时依赖的是前后左右四颗摄像头的输入通过算法来产生从车顶部视角的成像,如果有一颗摄像头出现故障,算法就会使失效,而单目摄像头这种自动驾驶高度依赖的传感器如果出现故障,则所有的输入都会失效,后续的计算、决策、控制也会随之失败。

传感器冗余的复杂度不完全在部署两套完全相同的传感器,而是对输入的仲裁和切换的方式。比如两组传感器部署的位置略有偏差,后面算法的输入参数也需要微调,如何判断某组传感器发生故障或输入数据有误?当故障检测到时切换的逻辑是什么?传感器数据输入的模块状态机的变化?每一个问题就意味着要有相应的解决方案。

其次,计算、决策、控制系统需要有冗余。无论是早期的数据拟合,还是现在用的广泛的深度学习,神经网络从模型上就是非确定性的计算,这意味着同样的输入未必产生同样的输出,模型自身的不确定性将为正确判断人、车或障碍物产生风险。为了提高系统的可用性以及减少模型的不确定性,我们必须对计算、决策、控制系统增加冗余设计。

我们以未来中央计算架构为例,如果整车采用一块高度集成的核心板做为中央计算基础,自动驾驶的计算决策控制模块以子板卡形式加载,我们就需要用同构或者异构设计加装2块以上的计算决策控制模块。

什么是同构?简单的说,就是硬件设计一样、软件设计一样、系统设计一样,那异构呢?就是硬件设计不一样,比如处理器不同体系架构,第一块用的ARM,第二块也许就是X86或者PPC,随之软件和系统设计自然也不一样。异构设计远比同构设计复杂,但是在这里无论同构还是异构,都需要保障系统功能一致,即接受相同的输入,在相同条件产生相同的输出。

接下来,仍然要考虑的是仲裁,即如果两组模块同时工作,如果产生结果不同,如何选择结果?如果其中一组大多数时间是静默状态,那么如何保证在故障切换时系统的状态一致?

除此之外,自动驾驶需要的高精度地图信息、位置信息等都需要有冗余考虑,在复杂度极高的完全无人驾驶场景中,从系统、软件、硬件到应用层面均需要有完善的冗余设计。很多人会说,我用车路协同,要知道5G毫米波一个重大的缺陷就是基站数增加,在基站覆盖率较低的偏远地区,出现通信不畅的现象将极为平常,所以单车智能还将是自动驾驶的主导,而在这种场景,冗余架构设计就不是可有可无,而是必须要考虑的重要环节。