2019 年 7 月 20 日是阿波罗 11 号登陆月球的 50 周年纪念日。
为了纪念这个伟大的事件,我们一起回顾 Richard J. Gran 发布于 1999 年,关于设计登月舱(Lunar Module, LM)数字自动驾驶仪的第一手资料。通过对比 1960 年代、1999年和现如今进行 GN&C(制导、导航与控制)系统开发方式的不同,展示基于模型设计的快速发展。
Richard @ 1999
当我还是个小男孩的时候,我就知道我想成为一名工程师。但我不知道的是,大学毕业后不久,我就参与了有史以来最伟大的工程项目之一。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 位指令分配给数字自动驾驶仪,而这些操作指令不允许干扰主制导和导航功能。在众多必须解决的问题中,一个现实情况是这款计算机并不是针对时间关键事件处理而设计的。由于这个原因,系统只有一个中断级别,没有数字信号到模拟信号的接口。
为了让我们了解这台计算机有多简单,下表显示了它的整个操作码集。要实现数字自动驾驶仪,需要实现第二个中断。我们使用了计算机的二进制反码结构,这意味着有一个正零和一个负零。当计数器从负数递增或从正数递减时,这种结构允许发生不同的中断。
开发最优控制系统
1962 年,“现代控制理论”仍然是一种学术追求。
没有关于最优控制的教科书,包括我在内的毕业生还没有精通状态空间法,也没有接触过最优 bang-bang 控制系统。麻省理工学院仪器实验室的工程师与麻省理工学院的学生们进行了密切合作,使他们成为基于 Pontryagin 最大值原理的状态空间建模和最优控制技术的早期使用者。
仪器实验室的工程师 George Cherry 建议使用最佳控制系统来控制航天器。由于在太空中的航天器仅面临非常少的外部干扰,从而可以非常确切的对转动动力学特性进行预估。这种对动力学特性近乎完美的理解,让 Cherry 洞察到,控制器可以设计成在很低的采样速率下工作。
在美国航空航天局(NASA)的会议上,每个设计团队都提出了他们的方法,George Cherry展示了他的设计方案,如同艾萨克·牛顿爵士站在身边描述控制器如何工作。毋庸置疑,美国航空航天局选择了麻省理工学院的设计。
选择这种方法的决定是正确的。格鲁曼的设计需要 0.02 秒或更快的采样时间,而麻省理工的方法(在牛顿的帮助下)只需要 0.2 秒的采样时间(比格鲁曼的设计慢 10 倍)。NASA 对这个设计非常满意,并决定采用数字自动驾驶仪做主系统,而将原来的模拟系统降级为备用系统。
最优控制器
Cherry 设计的最优控制器是一个将时间指标和燃油指标加权组合最小化的控制器。在 Athans 和 Falb 的一本书稿形式的书中介绍了相关理论,这本书直到 1966 年才出版。
下图显示了登月舱中设计的反馈控制喷射逻辑。图中的抛物线是决定何时打开和关闭反馈控制喷射的“开关曲线”。以什么样的频率进行相关测量,是这个设计中的难点。
计算机的速度和存储限制带来了严重的制约。
例如,大多数控制系统工程师通过以一个比较高的采样速率观察某个采样时间的姿态和速率,从而确定系统当前在相平面的位置,来实现该控制器。实际上,这也是设计航天飞机时自动驾驶仪的实现方式。然而,计算机对登月舱的限制意味着这种实现方式将不能正常工作,因为没有足够的处理能力来支持快速的采样速率。
手工编码和计算
许多现在的软件开发工程师可使用的商用软件,在 1963 年并不存在。因此,必须发明出来这些程序,这些程序往往是工程师自己定义的工具,目的是减轻设计者的负担。
我在 MIT IL 的第一个任务是开发用于选择合适的反馈控制的逻辑。下图中的流程图所示代码显示了我用来开发这个逻辑的自定义程序。
代码中的每个路径都是手工计时,执行指令的数量以及每个分支的时序都基于每个指令的标称周期进行计算。每个中断任务的处理时间也都是手动计算。图中的流程图是用汇编语言编写的实际计算机代码的一部分,开发耗时一年多。
控制系统的设计是通过仿真程序进行开发和测试的,该程序在格鲁曼用 Fortran 编写,在麻省理工学院用被称为 MAC 的语言编写。在设计确定后,再编写汇编语言代码。然后,在模拟实际计算机的仿真中对该代码进行测试。仿真使用实际的汇编语言代码。
这个过程非常繁琐:一次“计算机运行”耗时半天时间。我一般会在下午晚些时候提交一个计算(使用 IBM 卡),并在凌晨 3:00 获得返回结果。我经常会在半夜起床,从酒店步行到麻省理工学院仪器实验室去修正错误。仿真结果一般就在一叠 10 英寸厚的纸上,代码执行每个步骤的计算结果都记录在上面。
图中代码段如此复杂的一个原因是,可用于控制绕驾驶仪导向轴旋转的喷嘴数量太多了(见下图)。他们决定将自动驾驶仪控制的轴改为图中所示的“喷射轴”。
这使得代码行数大幅减少,并更容易在现有计算机上实现自动驾驶。如果没有这种改进,自动驾驶仪就不可能在只有 2000 个字的存储空间上实现。这一实例带来的启示是,当工程师有机会将正在设计的系统编写到计算机上时,他们总可以通过修改设计而大幅优化代码。
参与设计登月舱数字自动驾驶仪的设计是我工程师生涯中的一个亮点。
当尼尔·阿姆斯特朗走出登月舱,踏上月球表面时,为阿波罗计划做出贡献的每位工程师都倍感骄傲并获得了成就感。我们开发了前所未有的技术,通过努力工作和对细节的极致关注,我们打造出了运行无暇的系统。
今天我们如何设计登月舱数字自动驾驶仪?
Richard Gran,在他设计的控制系统用于阿波罗 11 号登月任务的几十年后,重新设计了登月舱数字自动驾驶仪。这次,他使用了 Simulink 系统模型,下图展示了这个模型的样子。
在1960年代,设计是手写在纸上,手动进行数学计算,使用汇编语言进行手工编码。而现在,航空航天的工程师们使用可执行的模型对低层代码进行抽象,而不是采用纸上的设计,这在进行复杂系统设计时尤为重要。
上图展示的是在 Simulink 模型里,用状态图实现的登月舱自动驾驶仪偏航控制率的一部分。从模型可以直接生成嵌入式代码,这就建立了设计和代码的直接联系。
在登月舱自动驾驶仪 Simulink 模型上点击 Play 将启动仿真,在几秒而不是几小时内完成,这显示了 1960 年代和现在的巨大不同:
计算机速度和能力的指数级提升,而计算机仿真也随之扩大了应用范围。
借助于强大的计算能力,工程师们即使在面对持续复杂的设计时,也能比以往仿真更多的应用场景。通过更多的仿真,可显著降低对昂贵的硬件测试的需求。
仿真是重要的,但只有当对它提供的设计有深刻洞察的时候,才能发挥作用。不仅仅是仿真速度大幅提升,对结果分析的速度和易用性也大幅提升。
阿波罗时代,在仿真结束后,往往需要几个小时来查看纸质文件上的结果。而现在,工程师们可以在仿真过程中,直接查看参数、绘制曲线和查看动画效果,如下图所示。执行测试用例、后处理以及报告生成,都被自动化了。
当工程师在分析数据结果的时候发现不期望的行为时,对设计进行更改可能是必要的。在阿波罗时代,往往需要数日执行更改、分析影响、重写代码并重新对设计进行仿真。
现在,使用基于模型设计的工程师,可以对模型的相应部分直接更改并立即进行仿真,查看这个更改对系统的影响。根据设计阶段的不同,仿真能够以模型在环(MIL)、软件在环(SIL)以及硬件在环(HIL)的方式执行。无需手动追踪,模型的依赖关系被自动检查,配置管理工具持续跟踪着需求、设计与测试用例的变更。
航天器设计一直是很困难的事情,当今的计算机技术和软件的进步并没有减少这种设计上的复杂性。但是,就像登月舱数字自动驾驶仪的这个设计示例所展示的那样,计算机技术和软件可以使设计更容易管理、测试更加高效、实现更加快速,并且为团队提供相比于阿波罗时代更多的时间进行验证和确认的工作。
“使用 MATLAB 和 Simulink 重新设计数字自动驾驶仪,让我回想起了做初始设计时的努力与挣扎,更让我感受到当今设计流程的优势:
计算机性能指数级增长,基于模型的设计让设计系统变得非常容易。
如今,设计流程的一个令人惊讶的特性,是高度集成的概念设计与计算,因为我可以快速的对想法进行概念设计并立即看到效果,我在一周的时间就可以重新构造整个数字自动驾驶仪。分析、仿真和测试被无缝的集成到一个流程里。
这在我看来,就是 MBD 的魅力所在。”
—— Richard Gran
-
计算机
+关注
关注
19文章
7352浏览量
87628 -
自动驾驶
+关注
关注
782文章
13619浏览量
165916
发布评论请先 登录
相关推荐
评论