代码1202,50年前的阿波罗登月给自动驾驶汽车留下宝贵一课

原标题:代码1202,50年前的阿波罗登月给自动驾驶汽车留下宝贵一课

图文来源:Forbes ,作者:Lance Eliot

系统靠重启,治标不治本

“鹰已经着陆。”

也许全世界的人都听到过“the Eagle had landed”,而这句话中的鹰指的就是登月舱。半个世纪前的7月20日,阿波罗11号成功登月。

让我们回到50年前那个不可思议的壮举的前几分钟。

在登月过程中,宇航员尼尔·阿姆斯特朗(Neil Armstrong)和巴兹·奥尔德林(Buzz Aldrin)正在与任务控制中心进行对话。

仔细听他们之间的对话录音。除非你是电脑或航天飞机的狂热爱好者或专家,否则可能不会注意到当时出现的一种提示音,即使注意到了也不会产生担忧。

但这其实是一种警报,代表的是错误代码1202和1201。

让我们揭开这个一般人不知道的紧张故事,并考虑一下可以应用到目前正在兴起的自动驾驶汽车上的经验教训。

首次登月的焦虑时刻

当登月舱离着陆只有7分半钟时,系统开始报错。在这样一个前无古人又极其危险的任务中出现这种情况肯定不是任何人所希望的。

后来的报告表明,当错误开始出现时,两名宇航员的心率急速上升。紧张是肯定的,毕竟,之前进行的都是模拟训练,没有人知道真实情况会怎样。

宇航员面临着这样的选择:如果在下降过程中出现了什么差错,可能需要取消着陆。

但如果这么做,对于只有一次着陆机会的他们来说,就意味着不得不承认失败并失望地返回地球。

这对NASA来说将是一个毁灭性的打击,对整个美国来说也将是一个令人心碎的时刻,同时还为俄罗斯人打开了一扇更大的窗口,让他们赶在美国之前登月成为可能。

一切都命悬一线。更糟糕的是,它可能会撞向月球,这种结果让人一想到就不寒而栗。

再来看看上面提到的那两个由4位数组成的代码。在月球着陆器系统的设计过程中,开发人员提出了一系列错误代码,如果计算机检测到飞船上有什么问题,这些代码就会显示出来。

但是,当宇航员一次又一次地模拟着陆时,并不是所有可能的错误代码都经过了测试,因此有些错误代码宇航员从未见过甚至都不知道其存在。

有时就是这么巧,1202和1201这两个错误代码在他们之前的训练中从没有显示出来过。因此,宇航员并不知道这几个数字到底意味着什么,大多数监测着陆的任务管制人员以前也没有见过。

好吧,让我们试着重温历史。

坐在狭小的登月舱里,距离着陆只有几分钟,这时,警报响起、按钮闪烁,宇航员看到了数字,虽然不知道什么意思,但不能表现出来,所以他们就平静地把错误代码汇报给了任务控制中心。

“是1202。”

场景转到任务控制室,人们的目光一片空白,因为基本上没有人知道1202是干什么的。与此同时,指挥官史蒂夫·贝尔斯(Steve Bales)被叫到一个密室,那里聚集着各种各样的工程师,随时准备调查可能出现的任何系统相关问题。

“那是什么?”贝尔斯问道。

NASA工程师约翰·加曼(John “Jack” Garman)浏览着他手写的一份清单,上面列着团队提出的许多错误代码。

他意识到1202的意思是登陆器上的导航计算机正在超负荷工作。

当然,程序员已经预料到这种重载可能会在某一天发生,因此构建了一个系统内部机制,可以自动进行快速重启,然后进行内存恢复,以使计算机重新运行。

理论上,计算机能够解决这个错误,而不需要任何人工干预。加曼也表示,如果1202错误代码在接下来的下降过程中没有频繁出现,就算系统看似超载,任务也可以继续下去。

“给我们一个1202程序报警的指示。”阿姆斯特朗联络道。

在录音中,你可以从他的声音中感受到包括严肃、严厉和恼怒的多重情感,因为在这种紧急关头,竟然还没有人告诉他们该如何处理这个错误。

试想,当你收到一个未知的信息,不知道任何处理方法,周围一片黑暗,接下来可能有生命危险,每过去一秒就可能离毁灭又近了一步,这会是一种多么绝望的感觉。

指挥中心的查理·杜克(Charlie Duke,后来成为阿波罗16号飞船宇航员)给出了回复:“在警报下继续任务。”

由于没有向宇航员进一步说明该做什么,这意味着警报(无论它意味着什么)都可以忽略不计。而“继续”意味着登陆。

巴兹·奥尔德林后来指出,一旦控制中心说不用担心,他就放手了,不再去想它。确实,与其想知道1202是什么意思,该采取何种行动显然更重要。

如果接着听完录音的剩余几分钟,1202错误一次又一次地发生,以及1201的相关错误代码。指挥中心通知宇航员,这被认为是同一类型的错误,并暗示没有必要对警报采取任何措施。

对于当时的普通听众来说,这就像是宇航员和总部之间进行的正常互动,又因为用词通常是技术性的,所以一般人并不真正知道他们其实都已经开始谈论要不要放弃了。

以上就是阿波罗11号登月故事中的故事。

给自动驾驶汽车的经验教训

50年前发生的与系统相关的事情,今天还能适用?当然可以。

首先,自动驾驶汽车是基于实时的系统,需要的是对路况的快速反馈,而在高速公路上行驶时,其速度可以超过每小时100公里。

第二个相同点,是自动驾驶汽车上也有许多计算机处理器,需要用到多种内存来存储正在执行或完成的驾驶程序。

此外,汽车上还有无数的传感器,如摄像头、无线电雷达、超声波设备、激光雷达等,所有这些传感器都在驾驶过程中收集数据,并将这些数据传输回计算机处理器和存储区中。

简单来说,“鹰”上出现的1202是由故障的雷达装置引起的,导致系统不停地接收到无用的新任务。计算机的操作系统允许内存被填满,但这意味着其他任务将没有可执行的空间。

就像前面说过的,程序员知道机载计算机可能会在某一时刻因任务过重而不堪重负。通过快速重启,机器可以继续高优先级任务,但请注意,它不一定能解决雷达不断“骚扰”系统的根本问题。

有多少次你重启了你的智能手机或笔记本电脑,然后发现它依旧出问题?估计数不清了吧。

1202代码也是,重启可以临时终止系统运行,但这不能从源头上解决故障。

以下是阿波罗11号给人工智能开发人员、汽车制造商和为自动驾驶汽车开发软件和系统的科技公司的一些建议。

1. 对传感器的不确定性进行预测和编码

没有什么是完美无缺的,自动驾驶汽车上的传感器也不例外,除了可能被灰尘或碎片遮挡、破坏这种明显的外部因素之外,传感器也有可能由于一些内部bug或故障而出错。

确保为这种可能性编写代码,并为一旦出现问题时该做些什么做好准备。

2. 确保自动驾驶汽车的操作系统足够强大

一些用于自动驾驶汽车的操作系统在某种程度上已被简化,为的是提高速度,但它还需要能够处理各种已知的和不可预测的故障或可能发生的系统问题。

确保操作系统能够胜任支持与驾驶相关的系统任务,安全性上同样。

3. 不要忽略特殊情况

目前大多数自动驾驶汽车关注的重点是在常规条件下的行驶,而不是处理不寻常或罕见的驾驶情况(所谓的“边缘”方面)。

然而,真实情况并非如此,根据国家或地区的不同,恶劣的天气、糟糕的道路、不守规矩的司机都很常见。

在公路上试运行的自动驾驶汽车需要准备好应对边缘情况。

4. 测试必须详尽彻底

测试自动驾驶汽车时哪怕忽略了一种测试用例,就给乘客增加了一种潜在的危险,在现实世界中,这种侥幸心理往往会产生非常可怕的后果。

测试需要尽可能的完整。

5. 谨慎地使用重启,并仅作为最后的手段

想象一下,你坐在一辆自动驾驶汽车里,在高速公路上飞驰,而人工智能报告说它需要立即重启。这可与玩游戏时设备重启的后果严重性不一样。

开发人员应该考虑将车载重启作为最后的手段,并且必须非常谨慎地援用。

结论

一个好消息是,如今自动驾驶汽车的处理能力比阿波罗11号宇宙飞船上使用的计算机要强大得多。

我们普遍用得到的计算机对于1969年的那些程序员来说,简直就是梦幻一般。甚至智能手机在性能上也远超登月的设备。

但这只是硬件方面的问题。

从软件的角度来看,即使过去了半个世纪,我们仍然会很容易地遇到同样的问题,包括隐藏的bug或突然出现的报错。

因此,在设计、编码、测试和部署自动驾驶汽车时要格外小心。

感谢NASA和所有参与把人类送上月球的人,希望未来的自动驾驶汽车能够为任何可能弹出的1202或1201代码做好准备。返回搜狐,查看更多

责任编辑:

声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
免费获取
今日搜狐热点
今日推荐