Categories
程式開發

JavaScript进入太空,真正成为“火箭科学”


SpaceX公司发射的“龙飞船”(Dragon)2号将JavaScript技术带入了太空。飞船系统的用户界面采用了Chromium和JavaScript,所以很大一部分依赖了Web技术。

Twitter上的相关讨论以及与SpaceX软件团队成员进行的Reddit AMA会话出现了一些非常幽默的内容,比如“node_modules真的是太空中最重的模块吗”,但不管怎样,JavaScript确实在为SpaceX龙飞船上的触摸UI提供支持。

正如美国宇航局(NASA)宇航员Christina Koch在最近的OpenJS世界大会上所说的那样,SpaceX拥有非常现代的显示器。“龙飞船”是第一艘搭载触摸屏的航天器。“龙飞船”上的宇航员穿着带有特殊手套的宇航服,以便能够在极其恶劣的环境下使用触摸屏。他们使用几个按钮来执行非常关键的任务和访问冗余系统。

Koch说,在空间站里,团队通过平板电脑使用Web应用程序,这些平板电脑连接的是与空间站其他系统相独立的网络。他们使用基于Web的调度软件和程序,并定期通过网站(如YouTube)完成专业和娱乐方面的事情。

https://youtu.be/j2-mrQDJ_Sk

NASA目前正在研发猎户座(Orion)飞船,用于登月和执行火星任务。最初,NASA通过一个快速原型实验室为航天员设计界面,关注的是用户驱动型的需求,而非自上而下型的需求。虽然“猎户座”目前还没有使用触摸功能,但他们计划提供一些可编程按钮和程序,以便获得高效的飞行体验。

在龙飞船上,界面使用了大量Web组件和自定义响应式框架。SpaceX公司软件工程师Sofian Hnaide在Reddit AMA上解释说:

在关键任务环境中使用Chromium和JavaScript是一个普遍的问题。我们必须明白,在这些情况下,Chromium只是作为一个UI渲染引擎。带有显示和容错功能的飞行软件的交互层定义良好,并位于显示边界之外。 就是说,无论采用怎样的技术栈,我们都遵循相同的开发流程。 我们对开发人员进行交叉培训,使用C++编写代码,并怀着相同的心态开发出可靠的软件。我们非常重视可靠性和性能,就像其他飞行软件一样,我们在不同条件下进行测试,以便了解所有可能出现的故障模式。我们有警报系统和处理程序,在出现故障时可采取相应的行动。

虽然我们一路上遇到了很多挑战,但我们对自己的表现非常满意。最重要的是,我们的两个客户(到目前为止)也感到非常满意。飞船的地表软件已经在使用这些显示技术栈,用不了多久,我们就会开始为飞船设计人机界面。

SpaceX龙飞船软件团队经理Wendy Shimata补充说:

你可能从某些图像中注意到了,显示屏下方仍然有一些硬件按钮。这是为了确保在显示器出现故障无法使用时,宇航员仍然可以使用硬件按钮来启动关键任务,例如响应机舱火灾。

为了保证软件的可靠性,团队采用了很多方法进行测试。在SpaceX团队负责Demo-2的John Dietrick解释说:

我们进行所有能够想到的测试!单元测试、容器化集成测试(借助物理模拟在本地机器上执行这些测试)以及在真实硬件上进行的完整“HITL”(硬件环路)测试(完全仿真)。使用模拟器来测试软件是我们拥有的最强大的工具,尤其是在真实硬件上运行的时候。我们将硬件放在实验室的桌子上,然后模拟整个任务过程,甚至是一些故障。在飞船上这么做非常容易。为了深入研究,我们通过通信通道和网络快速地从飞船上获取大量数据。

这个项目最初是一个模拟器原型,为了向NASA展示设计愿景。然后,团队对其进行了修改并在硬件上运行,取得了一些进展。在开发原型时,SpaceX团队对基于Web的方法有了更强的信心。正如Hnaide解释的那样:

我们喜欢浏览器附带的所有现代化功能,也喜欢那些已经受过相关技术栈训练的人才。我们并不担心在这里做一些不一样的事情会影响我们。我们喜欢采用“第一原则”方法来解决问题,而不是只遵循行业标准。

在一篇很长的推文中,JavaScript作者和Brave首席执行官Brendan Eich对此进行了幽默的评论,并就如何利用TypeScript、Flow或Hegel的类型安全性来确保TypeScript在太空中的安全使用做出了严肃的回应。

很显然,JavaScript现在实际上已经成了一门“火箭科学”。

原文链接

JavaScript Reaches the Final Frontier: Space