记得登月的阿波罗 11 号吗?现在你也能看到它的源代码

知乎日报 WarMonkey 204℃ 评论

记得登月的阿波罗 11 号吗?现在你也能看到它的源代码

图片:Purple Slog / CC BY

如何看待阿波罗 11 号操作系统源码公布?

阿波罗 11 号是人类第一次载人登月任务,阿姆斯特朗和奥尔德林于 1969 年 7 月 20 日走上月面。本周,登月计算机系统的源代码被实习生上传到 GitHub,面向全球开放。GitHub - chrislgarry/Apollo-11: Original Apollo 11 Guidance Computer (AGC) source code for the command and lunar modules.

对于技术开发人员,有什么地方值得挖掘和学习?

WarMonkey,KS-2微卫星研制中,急需无线通信专家

看懂这份代码需要大量的宇航学知识。需要对轨道动力学,飞船 GNC(制导导航与控制),深空测控,热管理和电源管理等等,具有非常深入的了解。

整个飞船由一台计算机控制,其运算性能大致相当于 ATmega128 单片机。现在仍然有很多卫星是一个 ATmega128 管理所有功能的。

具体的控制原理并不复杂,很多操作是依赖硬件完成的。而不像现在的先进卫星 / 飞船大量依赖软件。现在的小卫星很多使用 SDR 作为测控收发机,暴力运算产生中频信号。60 年代没人这么干,都是硬件编解码器。

多使用专用硬件,让硬件部分担工作量,是不需要很多计算的。缺点就是体积和重量会比较大。

Apollo 主控计算机大致有如下的功能:

任务管理,进程管理和内存分配:没错,这个古董计算机有操作系统!这是世界上第一个 OS,有协作式调度功能,有动态内存分配。阿波罗 11 着陆的时候,因为同时开了着陆雷达和对接测速雷达,导致计算机产生了内存不足错误。系统抛弃了低优先级的任务,保证最重要的的姿态稳定和发动机推力调节能继续正常运行。虽然着陆雷达挂了,但飞船仍然是可控的。

主导航系统有平台式 IMU(模拟稳定回路,机械相连的六分仪),计算机可以直接读取姿态角 / 速度 / 位置。备用导航系统使用欧拉角微分方程实现捷联惯性导航,测量器件精度极高并且飞船动态小,更新速率小于 100Hz 都够了。

位置修正的信息直接从六分仪和平台的角度传感器读出,代入公式计算即可得到修正量。

数据下行使用的是硬件编码器,计算机直接传送原始数据即可安排发送。其他的设备如主发动机、推力矢量机构、姿态控制喷口,以及一些热控组件。这些用到了 pid 控制或者简单的开关控制,每秒更新几次到几十次。

键盘和显示器:有一个 CRT 图形显示器,可以显示着陆月球 / 返回地球时的弹道信息。还有另外一个计算器数码管和键盘(居然是继电器驱动的)

地面设备因为不太受到体积和重量限制,做得就更加夸张了:主控大厅是 eidophor 光阀实现的巨幅投影机,一台电脑控制整个地面操作中心,生成所有的图像内容。

http://cdn.arstechnica.net/wp-content/uploads/2012/10/liebergot-eidophor1.jpg

总的来说,在数字计算机刚刚出现的年代,能造出这样的自动化设备是极为惊人的。当年有这样的技术能力,去做一条大型自动化生产线,或者控制整个化工厂,是完全没问题的。

现在的自动化控制程序,会用新一点的理论,比如惯性导航可以换四元数算法(但是德国 mikrocopter 仍然是欧拉角微分方程)。或者添加一些新的方法,例如嫦娥使用了激光雷达进行地形识别和导航。但是呢,基本的思路仍然和当年的程序接近。

换了 C++ 语言和现代的 x86 处理器,这套程序的实现不会有根本的变化。一个自动化系统最核心的部分,仍然是这些物理定律、算法和工程参数,它决定了一套自动化系统的基本能力和技术特性。

原作代码因为是汇编写成的,确实很难懂。如果想学习其工作原理,不妨看一看相关领域的教材。直接啃生肉虽然来得快,但确实是太难以消化了。代码里面的东西现在的教材全都有,看了都能学到。

转载请注明:微图摘 » 记得登月的阿波罗 11 号吗?现在你也能看到它的源代码

喜欢 (0)or分享 (0)
发表我的评论