SpaceX如何编写软件



奋进号太空舱中的道格拉斯·赫里(Douglas Hurley)和鲍勃·贝肯(Bob Behnken)正在向



多个方向快速开发项目。猎鹰9号火箭的第一阶段,在将有效载荷发射到太空后,返回地球重新使用,类似于对星舰原型的测试。Crew Dragon正在向国际空间站运送机组人员,第二代Dragon卡车正在准备中。成群的Starlink通信卫星正在为开放Beta测试的实际用户提供每秒100兆位的速度。



所有这些项目都需要高度的自动化,这是软件开发团队的责任。SpaceX专家愉快地谈论它:这不仅对吸引求职者很重要,而且对其他所有人也很有趣。



空间的复杂性



1966年12月14日,在联盟号的无人驾驶试射中,7K-OK 1号舰降落在发射台上:其中一台发动机的打火机不工作。自动化程序在火箭可以从发射台表面分离之前停止了发射程序。人员接近火箭进行检查,并评估重新发射的可能性。联盟号的紧急救援系统(SAS)突然失灵了。它的粉末引擎小心地将下降的运载工具带到了700米的高度,并赋予了降落伞以威力,但也点燃了仪表舱热控制系统溢出的易燃液体,该液体仍留在地球上。火箭的顶部照亮了。就像切尔托克(Chertok)回忆的那样那德林灾难的记忆迫使人们奔跑离开发射台。一人死亡。



在熄灭发射台之前,就已经开始阐明在固定火箭上激活SAS的原因。在飞行过程中,火箭不断比较惯性参考系与计算出的轨迹的偏差。如果差异太大,则会触发SAS。站在发射台上的火箭仍在移动:它与地球一起旋转,而陀螺仪“束缚”在了恒星上。在设计应急系统时,假定地球是静止的。在27分钟内”了大约8度,并在32个SAS烟火炸药上接收到点火信号。



即使没有现代计算机的复杂性,该“错误”也被忽略了。现在,任何航天器的所有关键系统都由电子设备控制。这甚至不是1962年Mariner 1探针的“历史上最昂贵的连字符”:在现代系统中,错误的空间总计数万,数十万行代码。任何明显的软件故障都会降低工作质量,甚至导致设备丢失。



方向的成熟和航空航天发展的文化似乎消除了任何“幼稚”的错误。但这种情况并非如此。到现在为止,火箭以可变的转换误差爆炸,火星的优先转换倒挂,轨道探测器因错误的测量系统中的值而跌落即使是Starrewer,也是Crew Dragon的直接竞争对手,由于软件的质量,它也没有进入ISS。





SpaceX在这段视频中热爱尝试和错误的文化,



SpaceX的示例在这种背景下很好奇。如果没有小型团队快速开发和测试的软件,这家相对年轻的公司就不会有显著成就。



X86上的猎鹰



问题不仅由代码的可靠性引起,而且空间甚至对硬件都是有害的。在地球上,磁场和大气层保护我们免受辐射。在空间中,高能粒子流将很容易在存储单元中将一变成零,甚至完全禁用组件。太空微电子至少需要特殊的认证,并且有时会诉诸特殊的微电路,例如蓝宝石上的硅半导体技术



SpaceX忽略了对太空设备的既定态度。自成立以来,该公司对相对便宜的组件的热爱而脱颖而出。例如,在2005年,记者报道说,猎鹰1号火箭中的计算机通过常规以太网电缆进行通信。



由于SpaceX公司的工程师告诉(12)在2015年GDC大会上,猎鹰9号火箭,三双核x86计算机上都安装在每一个阶段。在每台计算机的两个内核中的每个内核上,带有飞行软件的操作系统都彼此独立运行。火箭还包含PowerPC微控制器。它们控制各种执行器:电动机,格状舵等。



所有这些设备都集成到演员判断系统中。



  • 几乎所有的内容都以控制回路的形式表示,这是TAU的传统:许多次从传感器接收到第二个数据,对它们做出决定,然后确定系统的过去状态,然后计算机向设备发出信号。
  • . . , .
  • . , , . , .
  • Falcon 9 .


这种架构既简化了对地球的测试,又提供了所需的抗辐射水平。不需要特别昂贵的微电路,此外,微电路可能具有劳动力市场上只有少数开发人员熟悉的架构。



控制计算机在所谓的桌上火箭台上进行测试,桌上火箭台是“桌上的火箭”。猎鹰9号“大脑”布置在平坦的表面上,并在实际火箭中工作时相互连接。然后,专家将进行一次完整的模拟飞行,监视系统的行为,性能和可能的故障。在模拟过程中,可以关闭其中一个飞行计算机,以了解火箭将如何对此做出反应。



而且,整个控制系统能够虚拟化一个工作站,这使得在短短一天之内进行大规模自动化测试和代码验证成为可能。



在GDC 2015上曾说过,Dragon航天器中也安装了类似的三重冗余系统。在2020年的答复中,员工含糊地暗示Crew Dragon航天器由单独的四核处理器控制,其处理能力可与五年前的智能手机相提并论。



通常,SpaceX不会报告确切的处理器型号。 PowerPC控制器可能是抗辐射的RAD750x86处理器是经过工业验证的嵌入式解决方案,具有低发热量和适度性能,已在流动站和探测器中得到了很好的证明。



但是空间并不需要太多。ISS本身是具有80387数学协处理器的Intel 80386SX-20处理器控制的,即使在该站启动时,它也是十年前的产品。



进入浏览器的空间



5月30日,SpaceX首次将人类送入轨道。最后,出现了将机组人员运送到国际空间站的第二种选择。自2011年以来,唯一的解决方案就是俄罗斯联盟号。



在线广播的观众注意到,“乘员乘龙”飞船看上去比三人联盟号太空船要大多少。 SpaceX的内部容积相似,直径为4米,而国际联盟的直径为2.2米,SpaceX最初宣传该航天器为7人座,但NASA将在载人飞龙上发射4名宇航员。



除了身体上的差异外,最值得注意的是人们操作船的方式。 “ Soyuz”并没有偏离航空工程的传统:乘员按下拨动开关和按键,信号板显示信息。 Cru Dragon以自己的方式做所有事情。对于未来派的SpaceX宇宙飞船,主要元素是触摸屏。



Crew Dragon屏幕由Chromium浏览器引擎提供动力,也就是说,界面使用Web组件,JavaScript和CSS以HTML格式构建。他们在内部编写了自己的反应式库。接口的开发遵循敏捷方法论,具有很高的标准,可以覆盖单元测试。





浏览器对接模拟器的屏幕截图。



在首次载人发射之前,SpaceX已发布基于浏览器的Crew Dragon模拟器与ISS对接。模拟器最初是该公司两名开发人员的爱好。然后他们决定完成并发布给大众。



模拟器仍然是模拟器:它与实际代码无关。尽管两个产品都是由同一团队编写的,但它们是两个完全不同的项目。



所有这些并不意味着太空飞船使用JavaScript飞行。船上的铬仅用作UI元素的渲染工具。 SpaceX官员说,飞行软件界面具有所有必要的冗余功能,并且位于显示屏之外。后端是用C / C ++编写的。



在飞船中使用常规浏览器引擎是一个大胆的决定。在答复中,SpaceX员工放心无论技术堆栈如何,开发标准都是相同的,编写可靠,高效的软件的原理不会改变,并且要了解可能的错误,可以在各种条件下进行测试。如果拒绝,则有适当的通知和程序。最后,将数百小时的宇航员在地球上飞行模拟器上的训练添加到测试中。



为了安全起见,物理按键位于触摸屏下方。它们是为紧急情况而设计的,例如船上驾驶舱着火。对于大多数可从显示屏上调用的操作,还有物理的“开始”和“中止”按钮。美国航空航天局已经制定了自己的屏幕的具体要求,并SpaceX公司的解决方案符合他们



SpaceX员工还解释了他们如何为航空航天业提供这种看似非常规的解决方案。该项目最初是作为原型展示NASA的样本设计。然后,该原型成功地在真实的飞行硬件上启动。开发人员喜欢浏览器引擎中提供的现代功能,并且市场上有足够的开发人员来使用它。





该图显示了JavaScript代码是如何与James Webb望远镜的主控制系统隔离的,



除了SpaceX的经验外,在太空领域中选择JavaScript并没有什么离谱的。对于James Webb太空望远镜,JS代码直接在车辆上运行它不会直接控制例如电机,只会调用其他程序。



为什么太空中没有声音?



因为火箭飞上了Linux。



Falcon 9软件会定期更新。几乎每次火箭发射都带有稍微更新的代码。尽管更新是如此频繁,但是每个特定启动的“基础”并没有特别调整。这是由其他SpaceX部门完成的,他们对飞行配置进行了自己的调整:他们在发射日设置了风变量,更改了容错极限,等等。



Crew Dragon由具有PREEMPT_RT补丁的Linux操作系统控制,用于实时操作。 SpaceX不使用一些标准的第三方分发。该公司已经建立了自己的内核和相关实用程序。在发展的几年中,几乎没有修改内核。仅进行了很小的更改,并使用了一些专用的驱动程序来使用硬件。



在使用的开源项目中,有Das U-Boot操作系统加载程序Buildroot发行版构建系统,C ++标准库和Musl C。但是总的来说,SpaceX使用公司外部编写的太多软件,而只选择质量最高的开源项目。



在SpaceX,测试是用Python编写的,在LabVIEW中进行了测试,并且飞行在C ++中。用C ++编写时,他们喜欢使用该语言的面向对象技术,尽管他们倾向于使所有内容保持尽可能简单。



代码级的SpaceX提供了正常运行的可能性,但带有补偿算法的支撑架或并联发动机的损失也消失了。状态机包含各种紧急情况。例如,船“龙”的状态机铺设从靠近车站自治过渡照顾,如果有一些失败的教训。



SpaceX表示,Dragon中没有“ AI”(可能是神经网络算法),尽管某种机器视觉用于导航。开发人员说明这并不排除将来某个时候使用机器学习程序。



星联



Starlink卫星互联网项目的计算机更多。在每次发射中,猎鹰9号火箭都会向轨道发射60颗卫星,其中包含4,000多台Linux计算机。 SpaceX已将数万个Linux节点和上千个微控制器放入了低地球轨道。





动画显示了卫星的太阳能电池板是如何



部署的。六个月前,Starlink每天产生约5 TB的遥测数据,并且这个星座越来越大。卫星的数量正在增长,并且正在努力减少发送的数据量。为了减少存储在船上并发送到地球的数据量,在设备本身上诊断了一些问题。



每个Starlink卫星均由霍尔效应电机供电。因此,卫星将在群体中占据所需位置,并避免与空间碎片碰撞。但是这些动作仍然需要正确完成,并且最大的卫星星座的指挥部门很小。



因此,程序员感到困惑如何避免碰撞并自动控制卫星的位置。在已开发的系统中,询问卫星进入哪个窗口-它们独立地进入那里。而且,一天几次,卫星都从地球接收有关轨道上其他物体的进近数据。然后,卫星独立地计算必要的机动并远离空间碎片。



在Starlink卫星的情况下,内部系统的复制只能达到一定的限制。由于同伴总数的原因,小队不会注意到有士兵丧生。如果一个节点发生故障,地球上的用户将连接到天空中可见的另一颗卫星。



在开发和测试期间,每个Starlink舰队卫星都不被视为单独的卫星,而是被视为数据中心中的服务器。其中一些任务至关重要:管理,软件更新,电源和安全性。针对这些应用程序编写了单独的测试。与开发Web服务类似,许多其他功能允许使用更灵活的方法。因此,该团队将测试构建部署到少量卫星上,并与其他星座进行比较。此外,如果出现问题,则该软件将得到改进或回滚到以前的版本。



需要此测试过程来快速改进系统。 SpaceX开发人员声称,很多时候可以找到并修复在地球上无法预测的故障。



Starlink卫星通过它泄漏用户数据,并且计算机黑客威胁要窃听。SpaceX为此提供了此功能,并增加了端到端加密。此外,每个组件(卫星,网关和用户终端)仅执行签名的代码,因此攻击者很长时间不会在系统中注册。



发展文化



SpaceX的大多数软件工程师都在华盛顿州西雅图市和加利福尼亚州霍桑市工作,还有一些在德克萨斯州办公室工作。





SpaceX软件开发团队,2013年



传统的航空航天业因其发展速度和SpaceX部门的规模而感到不知所措。与2019年(播客,标记44:00)一样,美国空军首席软件官尼古拉斯·奇兰(Nicholas Chillan)表示,在政府机构至少需要2500名程序员的地方,SpaceX招聘了50名。与此同时,开发团队为九台不同的计算机,并在24小时内检查代码。



SpaceX试图吸引游戏行业的开发人员。在GDC 2015上,公司代表表示,拥有计算机科学学位的人没有内存管理技能。出乎意料的是,游戏开发人员的工作节奏和优化方法适合于空间。正如埃隆·马斯克 Elon Musk)所说,与MMO相比,将两艘船对接起来非常简单。



作为2013年Reddit上AMA的一部分,员工谈到了软件开发部门的结构。



  • 7 35 . : Falcon 9, Grasshopper Dragon. , , . .
  • SpaceX.  — - . , , , . , SpaceX .  — - : C#, MVC4, EF, SQL; Javascript, Knockout, Handlebars, LESS; REST API, «super sexy».
  • 2013 9 , . , . .
  • . .  — .


该公司不断雇用开发人员和工程师,并非每个职位都需要接受特殊教育。 SpaceX办事处许多不同的口音,包括前苏联时代的口音。尽管军事技术的出口管制制度受到限制,但该公司不仅可以雇用美国护照的持有人。要被雇用,外国人将需要居留证-美国绿卡。从头开始需要几年的时间。如果已经有一个“绿色”,那么问题仅在于在面试中显示出资历水平的能力。



SpaceX首席执行官兼首席技术官埃隆·马斯克(Elon Musk)以不喜欢每周工作40小时而闻名。他曾多次表示每周工作80-120小时。流行是什么,教区也是如此。关于Glassdoor关于SpaceX的一个常见抱怨 是生活与工作之间的平衡不佳。在匿名推荐中,员工和受训人员谈论频繁的倦怠和现在常见的12小时轮班



All Articles