马斯克曾招游戏工程师“造飞船”!详解SpaceX触屏操作系统

SpaceX 载人发射的成功被誉为全球商业航天领域的里程碑事件,龙飞船在太空遨游 19 个小时后与国际空间站完成“一键”对接,自动化程度之高就像是空间站专线“摆渡车”,像极了科幻小说里描绘的那般。

当宇航员们有说有笑地打开飞船舱门,飘进空间站的那一刻,不少观众大呼真牛的同时,可能还有种错觉,什么时候载人航天变得如此轻松简单?
这或许要拜马斯克激进的创新理念所赐,不断改写诸多不可能。过去几年,SpaceX 多次回收利用一级火箭的壮举让人惊叹,这直接将运载火箭发射成本降低了 30%,重复利用次数越多,越经济划算。

相对而言,这次龙飞船载人航天的另一大进步想必大家也有所注意:

整洁宽敞的飞船舱内,宇航员观测几块触控大屏,轻点几下,操作少许物理按钮,一次要与国际空间站对接的、复杂的载人飞行任务就这样被搞定了。

图|龙飞船对接国际空间站(来源:SpaceX)

图|历代航天器操控界面的变化(来源:NASA)

JavaScript 上天了

SpaceX 龙飞船中的新触控交互操作系统意味着什么?首先,这可能意味着编程语言不分高低,JavaScript 一样能上天!

TensorFlow.js 的资深 DA(负责开发者关系)Jason Mayes 在 Twitter 上表示,SpaceX 使用 Chromium+JavaScript 开发龙飞船的交互界面,与 C++ 一起用于航天计算机。JavaScript 不是“玩具语言”,是时候接受它了。

图|Jason Mayes 发帖透露出 SpaceX 相关信息(来源:Twitter)

而知乎网友 doodlewind 对此给出了更诙谐的评论,经过此次太空任务,开放的 Web 技术就此成为了人类首个应用到载人航天领域的 GUI 技术栈,这对数百万前端开发者们来说是个更为历史性的时刻。

图|网友 doodlewind 的评论(来源:知乎)

SpaceX 的技术研发工作基本都处于保密状态,具体是怎样做的开发?在国外的一个关于程序设计的问答网站 Stack Exchange 上,早在 2015 年就有关于猎鹰 9 火箭使用什么计算机和软件的话题讨论。开发者 TJ Tarazevits 发帖称,通过在 GDC 2015/2016 期间与多位 SpaceX 工程师的讨论,得到了一些详细信息。

SpaceX 使用一个 Actor-Judge 系统为其火箭和航天器提供三重冗余。猎鹰 9 火箭有 3 个双核 x86 处理器,每个核心都独立运行一个 linux 实例,飞行软件是用 C/C++ 编写的,在 x86 环境下运行。

对于每个计算/决策,“飞行字符串”都会比对不同核心的处理结果。如果存在不一致,则字符串不正确,不发送任何命令;如果内核返回相同的响应,字符串则会将命令发送到火箭上的各个微控制器,这些微控制器控制诸如发动机和栅格翼之类的部件。

三重冗余提供了系统辐射耐受性,无需昂贵的抗辐射部件。SpaceX 对所有的飞行软件进行测试,可以称之为“桌上火箭”,工程师们把“猎鹰 9 号”上的所有计算机和飞行控制器放在一张桌子上,并像在实际的火箭上一样连接起来,然后他们在组件上运行一个完整的模拟飞行,监控性能和潜在故障。

SpaceX 的工程师们还经常测试一种他们称之为“断线”的任务,在模拟飞行过程中,随机关闭一台飞行计算机,看看系统的反应如何。

图|SpaceX 在游戏开发者大会上的展位(来源:Business Insider)

据了解,载人龙飞船的飞行电脑也采用了类似的三重冗余系统。有人猜测,龙飞船的控制面板是 17 英寸特斯拉 S 型触摸屏,包括相同的 Nvidia Tegra SOC,它们不是飞行硬件的一部分,仅用于显示图形用户界面。

不过 TJ Tarazevits 在与 SpaceX 人员交谈后,得知特斯拉的触控屏硬件似乎并没有被使用,同时确认开发人员确实在龙飞船上使用了一些有趣的软件,它们在飞行界面上使用了 Chromium 和 JavaScript,实际的飞行计算机仍在 C++ 上运行。
还有一点非常有意思,也许你不会相信,SpaceX 炫酷的飞船交互界面,绝对有一些来自游戏行业的基因。

GDC 是规模最大的游戏开发者年度专业性质会议与展览,提供游戏开发者间的技术交流、获取灵感以及联谊平台,SpaceX 曾多次现身摆摊招人。

一家火箭公司为什么会出现在游戏开发者大会上?在龙飞船 V2 的一次发布会活动上,Fast Company 曾就此提问马斯克。

马斯克回答:“实际上,我们从游戏行业中聘用了许多最好的软件工程师 。” “在游戏中,有很多聪明的工程学人才从事着真正复杂的事情。相比大型多人在线游戏中涉及的许多算法,在航天器之间对接序列实际上相对简单。因此,我鼓励游戏业考虑帮忙制造下一代航天器和火箭。”

图 | 龙飞船早期的驾驶舱和交互界面设计(来源:Wikimedia Commons)

所以龙飞船早期的操作界面会有一种“电竞游戏舱”的既视感,四个下拉式触摸面板控制台使宇航员可以与各种控制和反馈接口交互,有点儿特斯拉的风格延续,万一整个屏幕被毁,一些至关重要的功能(例如降落伞部署、氧气储备、备用生命支持等)还可以通过手动按钮进行控制。

而整个座舱的设计起初也非常梦幻,与传统航天设备堆满仪器、操作复杂的样子大相径庭,SpaceX 让人们看到了未来太空飞船该有的样子。

SpaceX 团队是怎样的开发者班底?

2013 年,SpaceX 软件工程师团队曾在 reddit 社区中发布招聘内容。从中可以窥见,这些开发人员致力于两件事:火箭和航天器上的代码,支持火箭和航天器设计和制造过程的代码。

他们从事从大型 Web 应用程序到微型嵌入式计算平台的所有工作,通过 REST 到 C#/ MVC4 / EF / MSSQL上 的 Java,Knockout / Handlebars / LESS,C++ / 嵌入式 Linux,Python,LabVIEW 等技术堆栈,共同使团队能够构建、启动和监视进入太空的内容。

图|SpaceX 早期的工程师团队部分人员(来源:SpaceX)

在 SpaceX 内部,初始有 4 个独立的软件团队:1、飞行软件团队大约有 35 人。他们为猎鹰 9,Grasshopper(SpaceX 早期的型号)和龙飞船应用程序编写所有代码,并在这些平台上进行核心测试工作。例如编写仿真软件、测试飞行代码、编写部署在地面站中的通信和分析软件,还在任务控制领域支持各种进行中的任务。

2、企业信息系统团队构建了使 SpaceX 运行的内部软件系统,开发和发布的产品是公司几乎每个人都使用的内部 Web 应用程序:

这包括创建采购订单和填充零件库存的人员,使用这些零件创建设计和工作订单的工程师、技术人员的工作进程分配安排等。虽然市售软件也可以做到这一点,但因为不是专门定制的,使用起来会有很多麻烦,SpaceX 正在从一家研究和工程公司转变为一家领先的商业火箭制造和运营公司,搭建自己的内部软件系统架构对于今后的成功至关重要,工程师团队则站在实现这一目标的最前沿,他们利用 C#/ MVC4 / EF / SQL 做开发;

3、地面软件团队大约有 9 人,主要使用 LabVIEW 进行编码。他们开发用于任务和发射控制的 GUI,供工程师和操作员监控遥测并指挥火箭,航天器和各种支持设备,围绕高度分散的系统推送高带宽数据,并实施严格要求的复杂用户界面开发,以确保操作员能够及时控制和评估航天器;

4、航空电子测试团队与航空电子硬件设计师合作,编写用于测试的软件。他们能尽早发现硬件问题,当需要与飞行软件进行集成和测试时,能够合并成为一个工作单位。主要目标是编写非常全面且强大的软件,以便能够自动发现硬件问题,该软件通常在机械环境测试期间运行。

在 UI 设计方面,为了使飞船的交互界面更为美观简洁,SpaceX 其实还专门找了设计师做外援。一位名为 AJ Fitzpartric 的设计师在自己的作品主页上展示了为龙飞船触摸屏做的设计贡献,他是一个独立承包商,为初创企业和产品团队提供 UI 和 UX 设计咨询。

图|AJ Fitzpartric 的 UI 作品主页(来源:AJ Fitzpartric)

他与 SpaceX 软件团队合作创建了触摸屏应用程序,向宇航员提供有关航天器功能状态的实时信息,从运载工具在太空中的位置,到可能的目的地,再到船上的环境检测等。由于这项设计工作从始至终是机密的,并受《国际武器贸易条例》的约束,除非 SpaceX 公司公开,否则无法共享作品的更多细节。

不过,AJ Fitzpartric 还是分享了自己在这项合作中承担的几个流程:

1、为驾驶舱触摸屏显示器创建线框和 UI 流程;2、向 SpaceX 团队、NASA 客户以及宇航员演示讲解全新的设计和 UI 流程;3、针对太空旅行的独特条件开发了样式指南和设计规范,例如宇航员手套的触摸目标和振动时的易读性;4、与软件工程师紧密合作,了解硬件和技术限制,确定用户体验差距和设计任务并确定优先级;5、将设计和生产资料交付给软件工程师进行开发。

图|AJ Fitzpartric 的作品案例(来源:AJ Fitzpartric)

与从游戏行业招募开发者类似,这位 UI/UX 设计师也并非专业为航空航天领域客户服务的,而是主要做 App 与 Web 设计的,他的代表作品包括插图项目、索尼设计规范和图片编辑器、还有 iOS 应用等。

这在航天领域或许独树一帜。正如 SpaceX 对外分享的一份 PPT 中介绍的那样,算力上的进步带来了全新可能:存储、计算和渲染能力上的突破,可实现 3D 渲染和交互式界面;移动设备的创新改善了重量和能耗问题;触摸屏便宜且普及。

图|SpaceX 关于载人飞船技术创新的讲解(来源:imgur)

基于浏览器的技术栈可作为界面开发的新平台:各种库和框架提供了稳定的功能,能快速实现原型;现代化的开发和调试工具加速迭代;技术的跨界通用性融合好处多多。

从这些层面来看,SpaceX 龙飞船的成功发射不仅把技术开发、软件创新进行了一番试炼,还直接把 UI 设计这个职业拉到了“航天级”高度,新一代 UI 技术栈可能会对未来航天设备领域产生越来越广泛的影响,这背后是从游戏、设计、软硬件工程师多方跨界人才的智慧火花碰撞。

从历史到未来的演变

所有这些看似能简单完成的集成和设计,并非一蹴而就,成果是一代代航天人数十年的技术开发和工程经验积累。

美国从 1960 年代便开始进行载人航天任务,那时候的航天设备仪器并不足够先进,各种条件与安全保障要比现在恶劣得多。宇航员们必须穿着笨重防护外套驾驶航天器,从水星计划、双子座计划、阿波罗计划到航天飞机,航天员们可谓是一边飞一边修,大小故障不断,凭借着智慧和勇气深入太空探索,一度远征月球并活着回来。

那是一个略显粗糙的年代,却也是堪称奇迹的年代。

图|美国载人航天工程历程(来源:维基百科)

航天器座舱和交互方式的变革就在这一代代航天人的努力下实现了进化,最终,将成百上千个按钮浓缩成几个大屏幕和几个关键物理按钮。

而随着更多人工智能和自动化技术的加入,未来航天员可以用最简单的方式操控着一台最复杂和精密的飞行设备,为航天普及化、更接地气的商业航天打下基础,这是最显著的一大进步。

图|龙飞船宇航员的操控场景(来源:SpaceX)

SpaceX 龙飞船的仪表板正在把飞船的操作门槛降到普通人经过培训就能上手的程度,或许未来某一天,一个普通人经过“航天模拟器”的操作培训,掌握一些应急操作,就能驾驶这样的飞船进行太空飞行。

当然,前提还是能付得起这张飞船票,据了解,龙飞船的报价为每个座位 5500 万美元,将来如果发射成本压缩可能还会再降低一些。或许 SpaceX 可以借此开一个富豪太空旅行飞船驾校了。

图|龙飞船的培训模拟器(来源:SpaceX)

对于这样的飞船操控交互系统创新,网友们褒贬不一。有人认为,以前的载人航天是国家行为,成败关乎国家荣誉和历史进程,可靠性大于用户体验,原则上不允许出现任何事故和设备隐患的,但马斯克的载人航天是商业行为,发生意外商业保险覆盖就好,没有太多束缚可以大胆发挥。

也有人对大号液晶触控屏表示担忧,航天飞行受外部环境干扰因素非常多,万一断电了黑屏了,或者震动破裂了,显示不出来任何内容就十分吓人,而机械按钮仪表损坏的概率就小得多,即使出现故障,也是一部分,而不是整个系统完全崩溃不能用。