设想一下,如果你在一个自动驾驶汽车中开心的刷手机或者呼呼的睡觉,如果系统发生故障了怎么办?请你放心,我不是要来告诉你作为司机和乘客该如何应对这样一个危机,而是想要和你分享下,作为自动驾驶工程师,在系统设计时是如何提前应对故障的。
1. 设计校验和应答机制
相比于自动驾驶汽车失去动力,失去转向能力的故障,更严重的故障是汽车莫名的加速,刹车和转向。那如何避免呢?举个例子,汽车有不同的电子控制模块,比如模块A会发送刹车指令给到模块B,模块B会控制刹车踏板执行刹车指令。如果模块A发疯了,模块B就需要识别到模块A是不正常的。因此,我们会在模块A和B之前的通讯协议中加入校验机制,也就是暗号,如果A疯了,暗号就会错掉,模块B就会拒绝执行。此外,即使模块A和B都正常工作,B也要告知A控制指令已被正确的执行,这样A才会继续安心发送指令。这就是应答机制。
2. 设计冗余机制
那么在刚刚的例子里,万一模块B坏掉了,那汽车不就失去刹车能力了吗?在前期设计时,工程师首先做的是尽一切努力避免模块B坏掉,其次,会有一个模块B的备份,小b。这就是冗余机制。除了控制模块冗余,传感器,执行器,通讯线缆,供电电池,凡是系统相关部件都需要冗余备份。
所以你看,飞机上为什么有两个发动机,为什么要配备两位飞行员,飞行员之间为什么要交叉验证,道理都是想通的。同样的,如果一件事情对你极其重要,一旦失利对你的损失巨大,那么你就需要设计一套校验和应答机制,确保意图被正确执行,同时也要有一套Plan B作为冗余备份。