技术文章

阿波罗11号登陆月球 —— 航天器设计的过去与现在

作者 Richard J. Gran and Ossi Saarela, MathWorks


图片由 NASA 提供。

图片由 NASA 提供。

2019年7月20日是阿波罗11号登陆月球的50周年纪念日,为了纪念这个伟大的事件,我们重拾发布于1999年,Richard J. Gran撰写的关于设计登月舱(Lunar Module, LM)数字自动驾驶仪的第一手资料。在文章中,Richard描述了1960年代进行GN&C(制导、导航与控制)系统开发的方式,并将这种方式和1999年采用的利用MATLAB®和Simulink®进行基于模型设计的方式进行了对比。在Richard发布这篇文章后的这20年里,基于模型设计得到了快速发展。为了更好的展示这种演变,我们将说明现在怎么使用MATLAB和Simulink进行GN&C系统的设计。

回顾Richard的文章

当我还是个小男孩的时候,我就知道我想成为一名工程师。但我不知道的是,大学毕业后不久,我就参与了有史以来最伟大的工程项目之一。1962年9月12日,美国总统约翰·F·肯尼迪宣布:“我们选择在十年内登上月球”,推动这个国家快速走上载人登月的道路。同年,我成为格鲁曼制导与控制小组的一员,接下来,从1963年到1966年,我在麻省理工学院仪器实验室(MIT IL)参与了登月舱数字自动驾驶仪的设计工作。

登月舱数字自动驾驶仪设计 – 1961年至1969年

最初为登月舱推出的自动驾驶仪是一个模拟系统,使用调制器通过有节奏的跳动控制反作用控制喷射装置的开关。虽然控制系统使用模拟信号,但是导航和制导功能在一台数字计算机上运行,后者在指令和和服务舱(Command and Service Module,CSM)和阿波罗助推器中很常见。制导和导航的算法由麻省理工学院仪器实验室(MIT IL)的一个团队开发,现在这个实验室被称为德雷珀实验室。

在阿波罗计划的早期,NASA决定在登月舱设计中将制导与导航计算机设计为一个备份控制系统,以提高任务的可靠性。为此,阿波罗公司的三个承包商(Grumman、MIT IL和BellComm)于1963年初开始进行了一场设计竞赛。

数字自动驾驶仪设计的主要问题是计算机存储和速度。有大约2000个16位指令分配给数字自动驾驶仪,而这些操作指令不允许干扰主制导和导航功能。在众多必须解决的问题中,一个现实情况是这款计算机并不是针对时间关键事件处理而设计的。由于这个原因,系统只有一个中断级别,没有数字信号到模拟信号的接口。

为了让我们了解这台计算机有多简单,表1显示了它的整个操作码集。要实现数字自动驾驶仪,需要实现第二个中断。我们使用了计算机的二进制反码结构,这意味着有一个正零和一个负零。当计数器从负数递增或从正数递减时,这种结构允许发生不同的中断。

Table 1. The operation codes (instructions) available in the Lunar Module guidance computer.

表1:登月舱制导计算机中可用的操作代码(指令)。登月舱制导计算机有8个4位(一个字节)指令,由八进制数0-7定义。第二组代码(称为扩展指令)通过空余一个机器周期来表示下一个操作代码来自扩展集。大多数指令使用多个12微秒的机器周期。

开发最优控制系统

1962年,“现代控制理论”仍然是一种学术追求。没有关于最优控制的教科书,包括我在内的毕业生还没有精通状态空间法,也没有接触过最优bang-bang控制系统。麻省理工学院仪器实验室的工程师与麻省理工学院的学生们进行了密切合作,使他们成为基于Pontryagin最大值原理的状态空间建模和最优控制技术的早期使用者。仪器实验室的工程师George Cherry建议使用最佳控制系统来控制航天器。由于在太空中的航天器仅面临非常少的外部干扰,从而可以非常确切的对转动动力学特性进行预估。这种对动力学特性近乎完美的理解,让Cherry洞察到,控制器可以设计成在很低的采样速率下工作。

在美国航空航天局(NASA)的会议上,每个设计团队都提出了他们的方法,George Cherry展示了他的设计方案,如同艾萨克·牛顿爵士站在身边描述控制器如何工作。毋庸置疑,美国航空航天局选择了麻省理工学院的设计。选择这种方法的决定是正确的。格鲁曼的设计需要0.02秒或更快的采样时间,而麻省理工的方法(在牛顿的帮助下)只需要0.2秒的采样时间(比格鲁曼的设计慢10倍)。NASA对这个设计非常满意,并决定采用数字自动驾驶仪做主系统,而将原来的模拟系统降级为备用系统。

最优控制器

Cherry设计的最优控制器是一个将时间指标和燃油指标加权组合最小化的控制器。在Athans和Falb的一本书稿形式的书中介绍了相关理论,这本书直到1966年才出版。

图1显示了登月舱中设计的反馈控制喷射逻辑。图中的抛物线是决定何时打开和关闭反馈控制喷射的“开关曲线”。以什么样的频率进行相关测量,是这个设计中的难点。

图1:登月舱中使用的反馈控制喷射相平面切换逻辑。

图1:登月舱中使用的反馈控制喷射相平面切换逻辑。

计算机的速度和存储限制带来了严重的制约。例如,大多数控制系统工程师通过以一个比较高的采样速率观察某个采样时间的姿态和速率,从而确定系统当前在相平面的位置,来实现该控制器。实际上,这也是设计航天飞机时自动驾驶仪的实现方式。然而,计算机对登月舱的限制意味着这种实现方式将不能正常工作,因为没有足够的处理能力来支持快速的采样速率。

手工编码和计算

在1963年,许多现在的软件开发工程师可使用的商用软件并不存在。因此,必须开发出来这些程序,这些程序往往是工程师自己定义的工具,目的是减轻设计者的负担。

我在MIT IL的第一个任务是开发用于选择合适的反馈控制喷射流逻辑。图2中的流程图所示代码显示了我用来开发这个逻辑的自定义程序。代码中的每个路径都是手工计时,执行指令的数量以及每个分支的时序都基于每个指令的标称周期进行计算。每个中断任务的处理时间也都是手动计算。图2中的流程图是用汇编语言编写的实际计算机代码的一部分,开发耗时一年多。

图2:1966年的原版流程图,显示了用汇编语言编写的一段喷嘴反馈控制选择逻辑代码的软件设计。

图2:1966年的原版流程图,显示了用汇编语言编写的一段喷嘴反馈控制选择逻辑代码的软件设计。

控制系统的设计是通过仿真程序进行开发和测试的,该程序在格鲁曼用Fortran编写,在麻省理工学院用被称为MAC的语言编写。在设计确定后,再编写汇编语言代码。然后,在模拟实际计算机的仿真中对该代码进行测试。仿真使用实际的汇编语言代码。这个过程非常繁琐:一次“计算机运行”耗时半天时间。我一般会在下午晚些时候提交一个计算(使用IBM卡),并在凌晨3:00获得返回结果。我经常会在半夜起床,从酒店步行到麻省理工学院仪器实验室去修正错误。仿真结果一般就在一叠10英寸厚的纸上,代码执行每个步骤的计算结果都记录在上面。

图2中代码段如此复杂的一个原因是,可用于控制绕驾驶仪导向轴旋转的喷嘴数量太多了(见图3)。他们决定将自动驾驶仪控制的轴改为图3中所示的“喷射轴”。这使得代码行数大幅减少,并更容易在现有计算机上实现自动驾驶。如果没有这种改进,自动驾驶仪就不可能在只有2000个字的存储空间上实现。这一实例带来的启示是,当工程师有机会将正在设计的系统编写到计算机上时,他们总可以通过修改设计而大幅优化代码。

Figure 3. The 16 reaction jets on the Lunar Module as they were positioned relative to the pilot.

图3:登月舱上16个反馈控制喷射相对驾驶仪的位置。

参与设计登月舱数字自动驾驶仪的设计是我工程师生涯中的一个亮点。当尼尔·阿姆斯特朗走出登月舱,踏上月球表面时,为阿波罗计划做出贡献的每位工程师都倍感骄傲并获得了成就感。我们开发了前所未有的技术,通过努力工作和对细节的极致关注,我们打造出了运行无暇的系统。


今天我们要如何设计登月舱数字自动驾驶仪?

Richard Gran,在他设计的控制系统用于阿波罗11号登月任务的几十年后,重新设计了登月舱数字自动驾驶仪。这次,他使用了Simulink系统模型,图4展示了这个模型的样子。

Figure. 4. Top-level Simulink model of the Lunar Module digital autopilot.

图4:登月舱数字自动驾驶仪顶层Simulink模型。登月舱旋转动力学建模花费约1小时完成,这只是原始设计所需时间的一小部分。这个模型可以提供多种功能,包括仿真、分析和代码生成。

在1960年代,设计是手写在纸上,手动进行数学计算,使用汇编语言进行手工编码。而现在,航空航天的工程师们使用可执行的模型对低层代码进行抽象,而不是采用纸上的设计,这在进行复杂系统设计时尤为重要。图5展示的是在Simulink模型里,用状态图实现的登月舱自动驾驶仪航向控制率的一部分。从模型可以直接生成嵌入式代码,这就建立了设计和代码的直接联系。

Figure 5. A portion of the LM autopilot yaw control law.

图5:登月舱自动驾驶仪偏航控制率的一部分。在Simulink和Stateflow中实现控制率,使工程师能够使用可执行的有限状态机而不是编写文本代码。 状态机旁边显示的源代码是从模型自动生成的,包括对模型组件的可追溯性(以蓝色突出显示)。

在登月舱自动驾驶仪Simulink模型上,点击运行启动仿真,仿真在几秒内,而不是几小时内完成。这显示了1960年代和现在的巨大不同:计算机速度和能力的指数级提升,而计算机仿真也随之扩大了应用范围。借助于强大的计算能力,工程师们即使在面对持续复杂的设计时,也能比以往仿真更多的应用场景。通过更多的仿真,可显著降低对昂贵的硬件测试的需求。

仿真是重要的,但只有当对它提供的设计有深刻洞察的时候,才能发挥作用。不仅仅是仿真速度大幅提升,对结果分析的速度和易用性也大幅提升。阿波罗时代,在仿真结束后,往往需要几个小时来查看纸质文件上的结果。而现在,工程师们可以在仿真过程中,直接查看参数、绘制曲线和查看动画效果(图6)。执行测试用例、后处理以及报告生成,都被自动化了。

图6.航向轴控制的相平面图。该图像在仿真运行时实时更新,提供有关控制律行为的即时反馈。

图6.航向轴控制的相平面图。该图像在仿真运行时实时更新,提供有关控制律行为的即时反馈。

当工程师在分析数据结果的时候发现不期望的行为时,对设计进行更改可能是必要的。在阿波罗时代,往往需要数日执行更改、分析影响、重写代码并重新对设计进行仿真。现在,工程师们使用基于模型设计的,可以对模型的相应部分直接更改并立即进行仿真,查看这个更改对系统的影响。根据设计阶段的不同,仿真能够以模型在环(MIL)、软件在环(SIL)以及硬件在环(HIL)的方式执行。无需手动追踪,模型的依赖关系被自动检查,配置管理工具持续跟踪着需求、设计与测试用例的变更。

航天器设计一直是很困难的事情,当今的计算机和软件技术,并没有减少这种设计上的复杂性。但是,就像登月舱数字自动驾驶仪的这个设计示例所展示的那样,计算机技术和软件可以使设计更容易管理、测试更加高效、实现更加快速,并且为团队提供相比于阿波罗时代更多的时间进行验证和确认的工作。

我们以Richard Gran对基于模型设计的认识结束本篇文章。

“使用MATLAB和Simulink重新设计数字自动驾驶仪,让我回想起了做初始设计时的努力与挣扎,更让我感受到当今设计流程的优势:计算机性能指数级增长,基于模型的设计让设计系统变得非常容易。如今,设计流程的一个令人惊讶的特性,是高度集成的概念设计与计算,因为我可以快速的对想法进行概念设计并立即看到效果,我在一周的时间就可以重新构造整个数字自动驾驶仪。分析、仿真和测试被无缝的集成到一个流程里,这在我看来,就是MBD的能力所在。”

1 Athans, Michael and Peter L. Falb, Optimal Control: An Introduction to the Theory and Its Applications, McGraw-Hill, New York, NY, 1966.

2019 年发布

参考文献

  • Gran, Richard, Numerical Computing with Simulink, Volume 1, pp. 94–113, Society for Industrial and Applied Mathematics (SIAM), Philadelphia, PA, 2007.

  • Hall, Eldon, Journey to the Moon: The History of the Apollo Guidance Computer, AIAA Press, Reston, VA, 1996.

查看文章,了解相关功能

查看文章,了解相关行业