SpaceX中的软件工程

2020-06-03 23:05:30

大家好!👋,我相信你们中的相当一部分人一定在上周六看过SpaceX的发射。这是一个令人惊叹的历史性事件。数以百万计的人在YouTube和其他地方观看了现场直播。一天天过去,我们离商业太空飞行越来越近,我不得不承认我很兴奋。

除了激发我对太空旅行的兴奋之外,这次发射也让我对这些火箭上的技术产生了好奇。我从计算机科学的角度做了一些研究,想和大家分享我的发现。不用说,这些信息中的大部分都是从我在网上遇到的不同来源收集的。即使我试图确保我没有包含任何错误的信息,也不能保证这些信息是100%准确的。

7年前,SpaceX软件工程团队举办了一次AMA,他们在会上分享了一些关于他们是如何工作以及他们在做什么的见解。他们有4个独立的软件团队:

飞行软件团队大约有35人。我们为猎鹰9号、蚱蜢和龙的应用程序编写所有代码;也在这些飞行器上进行核心平台工作;我们还编写模拟软件;测试飞行代码;编写部署在我们地面站的通信和分析软件。我们还在任务控制中心工作,为现役任务提供支持。

企业信息系统团队负责构建使SpaceX运行的内部软件系统。我们身兼数职,但我们开发和发布的旗舰产品是公司几乎每个人都在使用的内部Web应用程序。这包括创建采购订单和填写我们的部件库存的人员,使用这些部件创建设计和工作单的工程师,现场的技术人员打卡并查看根据这些设计…今天的工作情况。以及介于两者之间的一切。有商业上的产品可以做到这一点,但我们的产品太棒了!SpaceX正在从一家研究和工程公司转变为一家制造公司-这对我们的成功至关重要-我们的团队正站在实现这一目标的最前线。我们利用C#/MVC4/EF/SQL;Javascript/Knockout/Handlebar/less/等和超级性感的REST API。

地面软件团队大约有9人。我们主要用LabVIEW编写代码。我们开发用于任务和发射控制的GUI,供工程师和操作员监控车辆遥测并指挥火箭、航天器和发射台支持设备。我们正在一个高度分布式的系统中推送高带宽数据,并实施具有严格要求的复杂用户界面,以确保操作员可以及时控制和评估航天器。

航空电子测试小组与航空电子硬件设计人员一起编写测试软件。我们很早就发现了硬件的问题;当需要与飞行软件进行集成和测试时,最好是一个工作单元。主要目标是编写非常全面和健壮的软件,以便能够自动查找大量硬件问题。该软件通常在机械环境测试期间运行。

有人还在StackExchange上的回答中讲述了他们与SpaceX团队在GDC2015⁄2016年的互动。他们谈到了三重冗余系统,以及SpaceX公司是如何使用演员-法官系统的。简而言之,定制板上运行着3个双核ARM处理器(根据elteto的说法)。对于每个决策,“飞行字符串”会比较单个处理器上每个内核的结果。如果输出匹配,则将命令发送到不同的控制器。有3个处理器(双核),这意味着每个控制器/传感器将收到三个不同的命令。然后,控制器充当判断者,并比较这三个命令。如果这三个人都同意,他们就会执行操作。即使只有一个命令不一致,控制器也会执行来自处理器的命令,该处理器之前一直在发送正确的命令。

这意味着在任何给定点,飞行软件都有6个正在运行的进程。

关键任务基础设施中的大多数重要软件都要通过各种认证。例如,您不能在飞机上运行任何随机软件。即使是娱乐系统代码也必须满足各种认证。DO-178B就是这样一种认证,它代表*机载系统和设备认证中的软件注意事项。

通过使用软件验证工具,认证和正确性部分变得更容易。Astrée就是这样一个工具,它是一个静态代码分析器,可以检查C项目中的运行时错误和与并发相关的bug。这也让我们找到了为什么很多任务关键型代码都是用C语言编写的问题的答案,这是因为有很多针对C语言的静态分析器和软件验证工具。

向国际空间站运送补给的ATV的自动对接软件是用C代码编写的,并与Astree进行了验证。

SpaceX还在“龙2”飞行界面中使用了Chromium和JavaScript。我不确定那是怎么通过认证的。我认为这是允许的,因为对于显示屏上的每个关键任务输入,显示屏下面也有一个物理按钮。因此,如果屏幕出现故障,宇航员可能会使用物理按钮。关于Chromium和JS的使用,黑客新闻的一位用户也不得不这样说:

此外,只有实际的图形显示应用程序使用Chromium/JS。系统的其余部分都是C++。显示代码具有100%的测试覆盖率,一直到图形输出的验证(例如,如果您有一个进度条,并且您将其设置为X%,则测试将验证它是否实际绘制正确)。

在这段视频中,宇航员们解释了系统是如何工作的,以及在UI故障的情况下他们会做些什么。

关键任务基础设施也使用实时操作系统。这些操作系统具有常规操作系统可能无法提供的特殊保证。例如,更快的中断响应和更好的内存保护。RTOS提供了此类软件所必需的实时保证。一个这样的操作系统是VxWorks。它于1987年推出,目标是嵌入式系统,隶属于Wind River Systems。它用于火星漫游者和SpaceX Dragon(以及其他系统)。拥有如此多的认证并不意味着错误就不会出现。显然,2003年的火星漫游者在他们的闪存驱动程序中遇到了一个错误,但通过从地球上发送更新来解决这个问题(来源)。

如果你想放纵你的好奇心,探索火箭的编程,你应该去看看火箭模型。乔·巴纳德(Joe Barnard)在BPS太空公司工作,他让小小的业余爱好火箭做出了令人惊叹的事情。他已经开发了自己的名为Signal的小型飞行控制器。他制作了一个猎鹰9号的复制品,该复制品使用推力矢量控制来稳定。现在有如此多的机会来学习真正的太空火箭,并从小型模型火箭开始工作。

如果你对模型火箭感兴趣,你应该探索一下你的国家为业余火箭爱好者提供的不同认证和执照。美国有3个等级的认证,每一个等级都为你提供了更多的火箭发射的可能性。

如果你想知道用模型火箭可以做多少很酷的事情,看看下面这枚由乔开发的着陆火箭。

我会根据我在研究过程中发现的任何新东西继续更新这篇文章。如果您觉得我引用错了什么,或者如果有什么新的东西我应该添加到这篇文章中,请在下面的评论中告诉我!

PS:SpaceX还发射了一个模拟器,在那里你可以尝试将猎鹰9号与国际空间站🚀对接