揭秘阿波罗11号大脑:人类的一大步,也是机器的一大步 | 登月50周年

编者按:本文来自微信公众号“新智元”(ID:AI_era),。

50年前的那一天,全人类千百年来的梦想实现了,人类首次登上月球。阿波罗登月背后的功臣是30多万名技术人员和14.5万行计算机代码,目前代码已在GitHub开源。今天就跟我们一起回顾50年前的那个荣耀时刻。
时间:1969年7月21日02:56 UTC
地点:月球
阿姆斯特朗:我正在梯子下面。登月舱的踏板仅在表面凹陷约1、2英寸,尽管当你靠近时表面看起来非常非常细腻,就像粉末一样。
阿姆斯特朗:我将要踏上月球。
阿姆斯特朗:这是我个人的一小步,但却是全人类的一大步。
阿姆斯特朗:表面很细而且是粉状的,我可以用脚趾把它捡起来。
指挥中心:尼尔,这里是休斯顿。我们听到了。
阿姆斯特朗:和我们的预期不同,四处走动似乎没有什么困难。
奥尔德林:从我们这里看起来非常漂亮。
阿姆斯特朗:它有一种自己独特的荒凉之美,很像美国的许多沙漠,但是有所不同,这里真的是十分漂亮。
1969年7月16日,巨大的“土星5号”火箭载着“阿波罗11号”飞船从美国肯尼迪航天中心点火升空,开始了人类首次登月的太空征程。
三位执行此任务的宇航员分别为指令长尼尔·阿姆斯特朗(Neil Armstrong)和指令舱驾驶员迈克尔·科林斯(Michael Collins)以及登月舱驾驶员巴兹·奥尔德林(Buzz Aldrin)。

从左到右依次是:阿姆斯特朗、科林斯、奥尔德林
1969年7月20日,登月舱在月球表面成功着陆。1969年7月21日,阿姆斯特朗承载着全人类的梦想踏上月球表面,成为登月第一人。

50年前的这次成功登月实现了人类千百年来的梦想,也让我们对月球有了更全面的认知。此外,登月还促进了航天技术和计算机的发展。
要知道阿波罗登月用的计算机,主频只有2MHz,RAM和ROM分别只有2K和36K。阿波罗计划对计算机性能的要求,让美国科学家们认识到计算机的重要性。
所以凭借阿波罗计划中的技术积累,美国大力发展微电子领域,20世纪70年代先后诞生了微电子处理器和微型计算机等。
50周年纪念:NASA公布阿波罗登月地点全景图片
17日,为了纪念阿波罗登月50周年,NASA约翰逊航天中心(Johnson Space Center)的图像专家们将阿波罗登月地点的图像“拼接”在一起,并发布了47张登陆地点全景图片。

“阿波罗”号宇航员拍摄的个人照片由NASA约翰逊分站的图像专家沃伦·哈罗德(Warren Harold)整理,阿波罗17号宇航员哈里森·“杰克”·施密特(Harrison “Jack” Schmitt)是唯一一位在月球上行走的地质学家,他证实了这些照片所代表的独特视角的准确性。

Schmitt表示:

月球上的陶勒斯-利特罗山谷是太阳系中最壮观的自然景观之一。
山谷的山壁被阳光灿烂地照亮,比大峡谷还要高,北面高达4800英尺,南面高达7000英尺。
与此同时,山峰的背景是黑色的,这与人类在地球的体验/印象截然不同,形成了鲜明的对比。

阿波罗17号的全景图也被转换成一幅身临其境的全景图,可以在NASA约翰逊的Facebook账户上看到。
想要了解更多相关图片,读者可前往下方链接查看:
https://flic.kr/s/aHsjHYKZe3
阿波罗制导计算机(AGC)代码开源,登GitHub热榜第一
而就在今天,GitHub一个名叫“Apollo-11”的项目荣登今日趋势榜第一,已获33000+颗星。

项目地址:
https://github.com/chrislgarry/Apollo-11/blob/master/README.zh_cn.md
该项目是阿波罗11号制导计算机(AGC)中的指令模块(Comanche055)和登月模块(Luminary099)的原始代码。
项目的电子化过程是由Virtual AGC和MIT Museum共同完成。
上世纪60年代,MIT一起实验室的程序员们需要给登月计划开发飞行控制软件,但是当时并没有现在如此成熟的技术,他们必须自己打造一套系统。
于是,他们提出了一种存储计算机程序的新方法——线存储器,并创造了一种特殊版本的汇编语言。现在许多程序员听到“汇编语言”都有可能瑟瑟发抖,而MIT的程序员为阿波罗制导计算机(AGC)编写了许许多多这种晦涩难懂的代码。
那么刚才说到的“许许多多”到底有多少行代码呢?请看下图。

阿波罗登月计划软件工程主管MargaretHamilton,及她身旁一大堆AGC代码文件
AGC代码其实早在2003年的时候由Ron Burkey上传到了网络。他根据MIT在网上发布的原始硬拷贝的扫描件进行了转录。
虽然Burkey为此付出了许多,但对于当今很多开发者来说,AGC代码本身还是有些晦涩难懂。后来NASA的一位实习生Chris Garry将AGC代码完整地上传到了GitHub。
很快,这份资源在网络上迅速传开,但是让人们感兴趣的点却更多的在于这份代码的注释——着实过于诙谐幽默了。
例如,在登月模块(Luminary099)文件夹中,有一个名为BURN_BABY_BURN–MASTER_IGNITION_ROUTINE.agc的文件,中文可以叫做“燃烧吧,宝贝,燃烧吧——控制点火程序”,从名字上来看就非常的有意思了。

文件地址:
https://github.com/chrislgarry/Apollo-11/blob/master/Luminary099/BURN_BABY_BURN–MASTER_IGNITION_ROUTINE.agc
在开头的注释中,这样写道:
“燃烧吧,宝贝,燃烧吧”可追溯到1965年的洛杉矶骚乱,当时著名DJ、电台所有者“伟大的蒙塔古”(Magnificent Montague)在打碟时使用了这句话。伟大的蒙塔古是上世纪50年代中期至60年代中期,在芝加哥、纽约和洛杉矶极富感召力的灵歌代表人物。

更多有趣的注释,读者可前往该项目自行探索:
https://github.com/chrislgarry/Apollo-11/tree/master/Luminary099
阿波罗11号的大脑:这是人类的胜利,也是机器的胜利

也许阿波罗11号登月任务中最具戏剧性的时刻是当“鹰号”登月舱开始最后一次降落到月球表面时,飞船的电脑超载了!
1969年7月20日,尼尔·阿姆斯特朗在离月球表面几英里的上空盘旋,寻找一个安全的落脚地来创造历史。
把第一批人送到月球的燃料仅剩几分钟可用。在阿波罗11号狭窄的月球着陆器上,一个功率计突然失灵了。通讯开始淡入淡出。然后,警告开始闪烁:程序报警。程序报警。(Program alarm. Program alarm.)
机上的电脑一共发出了五次紧急信号,这是阿姆斯特朗和机组成员奥尔德林从未练习过的。
在那一刻,两名宇航员的生命、30多万名技术人员的努力、8年耗资250亿美元的工作,以及一个国家的骄傲,都取决于几行开创性的计算机代码。

一份18英寸厚的打印文件显示了控制阿波罗登月舱降落到月球的部分计算机代码。图:《华尔街日报》TONY LUONG
人类从来没有在0和1的代码上冒过这么大的风险。然而,他们决定相信机器和代码,最终,阿姆斯特朗和奥尔德林作为第一批登上月球的人收获了荣耀。
“软件拯救了任务,”85岁的弗雷德·马丁(Fred Martin)说,他负责了阿波罗制导程序开发的大部分内容。
没有阿波罗飞船上的电脑,就没有登月,就没有胜利的第一步,就没有人类太空旅行的高潮。50年后来看,登月是人类的伟大胜利,也是机器的胜利,标志着计算机历史上最重要的15分钟。
“他们把计算机放在这个雄心勃勃的项目的中心,”计算机历史博物馆软件历史中心主任David C. Brock说。“这是对这项技术的真正考验,也是对每个人的信念和愿望的考验。”

阿波罗11号登月舱“鹰号”在分离后,开始在计算机引导下降落到月球表面 来源:NASA
阿波罗制导计算机(AGC)是第一台数字飞行计算机、是迄今为止最先进的微型计算机、是第一台使用硅芯片的计算机,同时也是第一台机组人员生命依赖于其功能的机载计算机。
今天,如果你将 NASA 使用的计算能力与任何常见设备进行比较,都会觉得不可思议。比如,iPhone 的处理能力是 Apollo 11 计算机的 100,000 多倍;凭借 4GB 的 RAM,iPhone拥有超过Apollo 11 计算机100万倍的内存,而 512GB 的存储空间则相当于Apollo 11 计算机的700万倍。
任何现代设备都具有比早期机器更大的原始计算能力,但是 Apollo 计算机非常强大,可靠,并且完成了它的任务。你无法用智能手机将宇宙飞船引导到月球上。
阿波罗制导计算机(AGC)

阿波罗制导计算机(AGC)和DSKY
阿波罗制导计算机由MIT仪器实验室开发,它的外表就像是一个由两部分组成的黄铜手提箱,装在航天器的命令模块(CM)和月球模块(LM)中,总长61×32×17 厘米、重 14 公斤。宇航员使用数字显示器和称为 DSKY 的键盘与 AGC 通信。

安装在指挥舱控制面板上的AGC的显示屏和键盘(DSKY)接口
命令模块中的AGC有两项主要工作。首先,它计算了到达月球的必要航线,由宇航员在飞行中使用的六分仪进行天文测量校准,这个六分仪与航海中使用的六分仪没有什么不同。他们会把月亮、地球或太阳排成一条直线,用另一条线确定恒星的位置。计算机将精确地测量这些角度并重新计算其位置。
其次,命令模块控制了航天器的许多物理部件。AGC可以与航天器内的150个不同设备进行通信,这是一项极其复杂的任务。
第一台使用集成电路的计算机

阿波罗制导计算机中的扁平封装集成电路
最初的重点放在硬件上。MIT仪器实验室的计算机设计师决定使用集成电路或硅 “芯片” 来构建计算机。

Apollo 中使用的硅芯片内部的微观视图
现在来看,这似乎是显而易见的,因为今天我们在任何消费设备中享受着集成电路技术的成果。但是在 20 世纪 60 年代早期,当做出这个决定时,硅芯片未经测试,其可靠性是一个很大的未知数。
尽管有争议,MIT仪器实验室的工程师对他们的设计进行了有力的辩护,并说服了NASA。实验室与发明集成电路的飞兆半导体公司密切合作,以确保可靠性。
芯片在严格的温度,振动,污染等条件下进行了测试。最终,命令模块和月球模块上的阿波罗制导计算机在任务期间没有遇到过硬件故障。
“动词”“名词”编码的交互设备

宇航员通过 DSKY 与 AGC 通信
宇航员通过DSKY与计算机通信,输入数字,然后得到回复。用户界面系统依赖于一系列的程序代码,以及“动词”和“名词”代码。动词是计算机可以做的事情(如“78 UPDATE PRELAUNCH AZIMUTH”)。名词是数值量或测量值(“33 TIME OF IGNITION”)。

阿波罗制导计算机中动词和名词的部分数字代码列表,打印在侧板上供快速参考
“编织”的软件
同时玛格丽特·汉密尔顿 (Margaret Hamilton)领导软件设计。当人们认识到软件对于登月任务真正重要时,汉密尔顿的团队扩大到了350人。他们编码的系统非常先进。

玛格丽特·汉密尔顿领导350人的软件团队
但它的大多数 “软件” 实际上都是硬连线的:程序是编织的,用微小的甜甜圈形状的金属 “核心” 像串珠一样串在一组电线上,电线在圈外面代表0,电线穿过圈里面代表1。
一旦制作完成,就无法改变绳子内部的单个位,因此对软件的任何更改都需要重新编织一条全新的绳子,而且最后一刻的更改是不可能的。

早期版本的阿波罗制导计算机,称为AGC-3
47年了,人们为何不再登月了?
1972年12月11日,阿波罗17号在月球表面着陆。这是人类最后一次载人登月,也是人类最后一次离开低地球轨道。40多年来,人们再未踏足月球的表面。在迈出了“人类的一大步”之后,我们为什么不再登月了?
原因众说纷纭,但一般认为以下几个因素是人类登月计划没有再次实施的重要原因。
首先就是太贵了。作为阿波罗计划的主要实施者,NASA在该计划上一共花费了240亿美元,大约相当于今天的1800亿美元,在20世纪60年代中期,美苏之间太空竞赛达到最高潮时,NASA每年经费占到美国联邦总预算的4%以上,这在今天是完全不可想象的。在阿波罗计划实施期间,总共雇用了约40万人,与全美20000家公司、大学和政府机构有着合作关系。
阿波罗计划是美国历史上和平时期最大规模的一次大动员。尽管美国宇航局是一个民用机构,但阿波罗计划成功的实施,是因为它资金充足,而且实施的是半军事化管理模式:除了一人之外,所有宇航员都是从空军飞行员和海军飞行员中精心挑选的; 许多行政人员都在二战中在军队中服役。在美国现有体制下,这种高度集中、准军事化管理的动员模式很难长期维持。
在此期间,人类对航天探索的大方向也发生了重大变化,近地空间成为各大强国争夺最激烈的新战场,而且技术成本远远低于登月。在当时的冷战背景下,前苏联已经在将准备与美国打擂台的登月飞船改装成近地空间站,美国的太空战略发生重大转移,导致阿波罗18号-20号直接被砍掉。
最后,除了迈出了“人类的一大步”之外,月球很大程度上就是一片荒地,没有发现有探索价值的迹象,同样的事情,美国已经前后做了6次,花了不少钱,亏本买卖也不能总做起来没完。
总而言之就是,登月花钱太多,消耗太大,收益太少。另外,和你一直较劲的老对手已经主动放弃了,找不到继续登月的理由了。
千百前来,人类对月球的探索从未停止,以前如此,现在亦是如此。
人类下一次登月又将会是何时呢?
参考链接:
https://tech.sina.com.cn/d/s/2014-12-16/doc-iawzunex6649508.shtml
https://www.technologyreview.com/s/429690/why-we-cant-solve-big-problems/
https://www.zhihu.com/question/25147461
https://www.nasa.gov/feature/nasa-releases-stunning-panoramas-of-apollo-landing-sites-for-50th-anniversary
https://github.com/chrislgarry/Apollo-11

文章作者: 6z | Intz  

THE END
分享