全文共3953字,预计学习时长13分钟
图源:unsplash
5月30日,肯尼迪航天中心发生了历史性的一刻:SpaceX将NASA宇航员鲍勃·贝肯和道格·霍利成功送入太空。这是近十年内美国首次将宇航员送入太空轨道。SpaceX也成为首个用私人设计的运载器将人送入太空的公司,已然载入史册。
能做到这一步并不容易,火箭科学本质就是复杂的,这是一个不断试错的旅程。但是凭借这次历史性的发射,埃隆·马斯克的SpaceX也向其宏伟蓝图更进了一步。他的下一个载人任务的准备工作已经开始。
SpaceX的软件团队最近在Reddit上举行了问答活动,这让我们了解到他们是如何开发助力人类太空探索的软件的。
图源:SpaceX
为太空探索建立的新界面
SpaceX龙飞船最突出的设计就是控制系统,控制面板上没有密密麻麻的按钮,仅有的几个出于安全考虑留了下来。宇航员鲍勃和道格大部分时间使用一对触控屏来控制飞船。这是在现有模式上的一个根本性突破。
SpaceX遵循着以人为本的设计思路搭建了这个界面,其指导性原则旨在将龙飞船打造成一个自动驾驶飞船。
图源:NASA
SpaceX的高级软件工程师索菲安·奈德详细解释了这些原则:“一个例子就是我们将最小化宇航员之间的互动作为成功的准则(比如关于要不要按那个按钮的讨论)。我们相信优秀的信息传达意味着尽可能减少控制飞船所需的互动。”
“总而言之,我们的设计基于我们对宇航员的任务、能力、事态感知的需求,以及对整个飞行过程环境的了解,这让我们十分注重清晰、简明、减繁这几个要点。”整个过程中,宇航员的反馈在设计整个界面上起到了至关重要的作用。
为了测试驾驶控制,SpaceX联合Demo-2任务的船员(贝肯和霍利)与未来Crew-1任务的机组人员麦克.霍普金斯和维克多.格罗佛组织了编程马拉松。白天宇航员们会测试控制系统并向软件团队提供反馈,晚上,软件团队修改界面,并在第二天早上完成新的构建以待测试。
宇航员鲍勃·贝肯和道格霍利 | 图源:SpaceX
“虽然一夜之间无法完成全部功能的开发,但这个紧凑的循环让我们快速迭代更新,在一周结束之际就得到了一个平稳运行的飞船。看着船员们在模拟器上对接和驾驶飞船,这真是了不起的一周。”奈德如此描述这场编程马拉松。
开发过程中,宇航员也十分渴望了解软件的运行方式。因为是太空航行,宇航员们自然对紧急情况下的后备系统十分关心,其中一项便是如何操作为紧急情况设计的几个实体按钮。这些按钮会执行紧急命令,比如应对内舱起火,停止靠近太空站,执行紧急脱轨。控制面板还有可以控制显示屏中大部分命令的实体执行按钮和取消按钮。
“最后,我们完成了NASA所有关于触控反馈和可靠性等方面的要求,我们非常荣幸能够给现代化的飞船配备如此现代化的操作界面。”SpaceX飞船软件和网络安全高级总管杰夫·德克斯特说道。
龙飞船仍保有实体按键以应对紧急情况 | 图源:NASA
太空中的网络技术
龙飞船控制界面中最吸引人的一点就是其技术支持。揭开技术的神秘面纱,你会发现其实所有程序都是用HTML、JavaScript、CSS这些语言在Chromium上编译的。
Chromium是一款开源的软件,是谷歌Chrome浏览器和其他几个浏览器的运行基础。HTML、JavaScript、CSS也是用来编写我们当今使用的网页的技术。
图源:SpaceX
该项目开始时只是一个原型模拟器,用来向NASA展示SpaceX的设计愿景。后来,团队想将这个项目应用到飞船的硬件上,稍加修改后发现运行良好。在开发原型模拟器的过程中,团队发觉上述的技术也十分可靠,因此将其应用到了飞船的软件设计中。
过去,传统的航空编程方法基于低级编程语言,SpaceX在这点上进行了根本上的创新。SpaceX做了一个像我们每天都在用的网页一样的Web应用程序向宇航员传输信息,接收触屏上的指令完成对龙飞船的控制。
奈德这样解释这项决定:“我们很喜欢浏览器所附带的各种现代化的功能,我们也乐意接触到在这一领域接受过培训的人才。在SpaceX,我们不惧怕做一些稍微不同的事情,我们喜欢以第一原理解决问题,而不仅仅是依赖于行业标准。”
深入挖掘龙飞船的代码
除了界面之外,龙飞船内部的其他所有软件都是用C ++编写的。其中的大多数计算机都在开源操作系统Linux上运行。SpaceX飞行软件工程师约翰·迪特里克补充说:“没有使用任何现成的Linux发行版本,我们有自己的版本。”
其他的仅仅是运行裸机代码的微控制器。每一个计算机都有特定的用途,并由飞行计算机进行监督。
龙飞船选择使用Linux并不奇怪,整个世界几乎都在使用Linux。对于SpaceX,选择Linux也是因为它能提供更好的实时性能。多年来,这一操作系统基本上没有变过。唯一有过修改的是自定义驱动程序的创建(允许软件和硬件一起运作),用来配合SpaceX使用各种硬件架构。
SpaceX用自己的Linux版本已获得更好的实时性能 | 图源:MakeUseOf.
深入挖掘代码,你会发现许多应用程序已被优化,以确保操作系统不会出现任何问题。这意味着采取措施以确保任务有适当的优先级划分,防止出现同步问题,从而和保证整个飞行过程中每个流程按时执行。
当被问及在开发应用程序时它们对库的使用时,SpaceX首席软件工程师乔什·萨金说:“我们确实使用了开源库,主要是标准C ++库,还有一些其他的。但我们只会使用质量极高的开源代码库,并且在可行时通常选择开发自己的库,以便我们可以自己控制代码质量。”
值得注意的是,Linux仅用于运行应用程序并充当与硬件的接口。萨金解释说,故障处理和计算机冗余是由一个完全不同的软件处理的。同样,时间同步是通过硬件和软件(一些是“行业标准”,一些是“内部自制”)的组合来实现的。
靠仅有的一次机会测试软件正确性
图源:Getty Images
“我对同事、公司、任务、宇航员有很强的责任感,去确保软件正常运行。软件几乎控制着飞船的方方面面,从推进器点火到注氧,万一出错,会造成很多损害。”萨金强调着软件在每个任务中的重要性。
要成功地将东西发射到太空中,有几件事情需要正确处理。其中任何一个出现错误,都有任务失败的风险。这就是为什么天公不作美时,无论任务有多么重要,都要无理由推迟,这反过来也提醒我们测试的重要性。
只有一次解决问题的机会,SpaceX如何测试其软件?
迪特里克回答了这个问题:“测试我们能想到的一切!在真实的飞行硬件上进行单元测试,容器化集成测试和完整的HITL(硬件循环)测试。”单元测试是对软件的各个组件进行测试,容器化集成测试不断检查代码是否正常运行。此类测试会与自动数据检查一起持续运行,以确保没有任何异常。
在安装之前,每行新的代码行均经过严格测试。安装后,也会持续监控确保一切按计划进行。
图源:unsplash
在详细介绍这些测试时,SpaceX航天器软件经理温蒂·西玛塔表示:“每当我们对软件进行更改时(对于开发工具经常发生),会同时进行代码的单元测试和功能测试,以确保软件正常工作,并针对正常情况和偏离正常情况进行阶段性任务的系统级测试。”
正如乔什·萨金所说:“我们在SpaceX经常说,‘只有偏执狂才能生存’,我们不断思考可能出什么问题,并确保我们解决了任何可能的失败情况。”
除了这些测试外,SpaceX还使用模拟器运行了一系列测试,这些也用于在将软件安装在飞行器前测试运行代码。
迪特里克对此进行了描述:“使用模拟器测试飞行软件是我们最强大的工具,尤其是当测试是在真正的硬件上运行时。我们只需坐在实验室的桌子上,拿着运载器的硬件,就可以模拟整个任务,甚至可以模拟许多详细的故障情况。”
应对辐射和太空中的危险
图源:SpaceX
尽管SpaceX进行了严格的测试,计算机仍然可能发生故障。对于你我来说,这只是令人沮丧。但是对于太空中的宇航员来说,这种情况是致命的噩梦。龙飞船对软件的依赖程度很高,宇航员贝肯和霍利自然会对它的应急功能表现出的强烈关切。
SpaceX在可能出现问题的地方准备了多种应急措施。迪特里克向我们做了详细说明:“我们几乎把所有设备都准备了三台,这样我们就可以应对猎鹰和龙飞船上任何一台飞行计算机,传感器,执行器等的故障。在系统级别,猎鹰和龙飞船的设计可以允许失去发动机或推进器,算法可以弥补这些问题。”
但是太空是个危险的地方,人类和计算机都面临着看不见的威胁,这就是宇宙辐射。宇航服可以保护宇航员。同样,宇宙飞船使用了特殊的防辐射计算机。
此类计算机比你用来阅读本文的电脑更加耗电,它昂贵且速度缓慢。但是在太空中,当宇宙辐射穿过未受保护的计算机时,其内部的芯片将受到不利影响。当图片位突然从1s变为0s时你就明白了,这会造成故障和错误。
解决此问题的行业标准是配备多台备用计算机,SpaceX也采取了这种方法。“如果其中一台备用计算机因为辐射发生故障,系统通常不会受到影响。发生故障的计算机一旦恢复就可以重启并被整合到系统中,这样就恢复了原来的容错能力。” 迪特里克解释道。
何为太空竞赛的下一步?
过去十年里,一场由私人公司引领的新的太空竞赛已经开始。一切始于2006年,NASA开始了商业轨道运输服务(COTS)计划,目标是让私营企业提供发射服务,从而使NASA节省资金并专注于更大的项目。
该计划经历了多个阶段,比赛最终归结为两家公司的竞争:波音公司和SpaceX公司。签署合同时,波音公司获得了42亿美元,而SpaceX仅获得了26亿美元。看起来,当时埃隆·马斯克的雄心壮志似乎充满了风险。选择波音确实较为保险,波音是行业资深企业。
图源:NASA
但几乎一夜之间,埃隆·马斯克获得了巨大的动力。
如今,随着载人龙飞船任务的成功,情况发生了巨大改变。SpaceX已经证明它可以成功地将人类送入太空,它的太空之旅宏伟愿景得以实现,这一壮举也证实了NASA信任私有企业是个明智的决定。
SpaceX的前景一片大好,波音公司直到2021年都无法完成载人航天飞行。直到明年,SpaceX将还会是唯一一家在国际空间站和地球之间运送宇航员的私人公司。
展望未来,人类在宇宙中的竞争还将会展现出更多的想象力。
推荐阅读专题
留言点赞发个朋友圈
我们一起分享AI学习与发展的干货
编译组:赵嘉懿、宋晓妍
相关链接:
https://medium.com/better-programming/learning-how-to-build-a-spaceship-in-2020-from-spacex-afa96c52c01b
如转载,请后台留言,遵守转载规范
推荐文章阅读
长按识别二维码可添加关注
读芯君爱你