你可能还记得本周早些时候在Twitch直播中自动撞到水泥墙的Roborace汽车。它带来了对自动驾驶汽车的大量负面评论,以及那些不理解撞车实际发生原因的人的困惑。幸运的是,新加坡理工学院(新加坡理工学院)-进入汽车的团队-的一名工程师能够插话,让世界更好地了解哪里出了问题。
四位SIT工程师中的一位在Reddit上评论说,实际的故障发生在撞车时刻之前很久,就在初始化(原文如此)一圈。初始化圈是用来把车从包厢带到起跑线/终点线,在圈内,车是由人类司机驾驶的。初始化圈速是Roborace的标准程序。
他们接着说,所以在这个初始化圈中发生了一些事情,显然导致转向控制信号进入NaN,随后转向锁定到右侧的最大值。当我们的车获准行驶时,加速指令照常进行,但方向盘锁定在右边。
最大的收获是工程师使用的首字母缩写:NaN。它代表的不是数字,而是它所说的字面意思--程序输出的值不是实数。通常,这是输出无穷大的数字或执行不可能的计算(如除以零)的结果。
当车辆在人工操作的初始圈上行驶时,故障发生并保持在汽车转换到自动驾驶模式的过程中。工程师证实,车辆遥测报告了无效数据,但没有标记为无效,车辆操作员错过了。把这一点与检验过的期望轨迹结合起来,你就有了失败的秘诀。
具有讽刺意味的是,[NaN值]确实出现在遥测监视器上,但它与1.5K的其他遥测值一起出现。工程师写道:通常情况下,操作员只会查看没有故障的指示器标志,而在我们的情况下,所有指示器标志都是绿色的。在另一条评论中,他们继续解释说,我们确实对在我们看来更常见的故障情况进行了检查,但这里的问题是,这一次首次出现在运行过程中,我们在分析分析阶段没有涵盖它。换句话说,我们没有预料到南值会出现在那里,并对我们的决定过于自信。
这位工程师接着提到,该控制器是在MATLAB中实现的,这意味着虽然数据流中有NaN输出,但系统不会仅仅因为这个原因而停止。虽然团队确实在应用程序的其他区域进行了许多故障安全编码,但不幸的是,它只包含对有效数字的数据验证-正如您还记得的那样,NaN值不是有效数字,这意味着不会对其执行验证。
最终结果是什么?汽车假定数据是正确的,并将无效输出发送到控制汽车转向的致动器。轮子锁在右边,然后车就和一堵水泥墙交上了非常好的朋友。