写点什么

SpaceX 龙飞船性能要求严苛,软件开发存挑战

  • 2021-05-14
  • 本文字数:2105 字

    阅读完需:约 7 分钟

SpaceX龙飞船性能要求严苛,软件开发存挑战

SpaceX 的载人龙飞船又一次与国际空间站成功对接,但在软件开发方面仍面临一系列特殊挑战。

SpaceX 软件开发存挑战


北京时间 2021 年 4 月 23 日 17 时,SpaceX 进行了该公司 2021 年的首次载人发射,地点位于美国佛罗里达州肯尼迪航天中心,目的地是国际空间站。据俄罗斯卫星网报道,北京时间 4 月 24 日 17 时,搭载四名航天员的载人龙飞船已与国际空间站完成对接。这意味着,SpaceX 的载人龙飞船又一次与国际空间站成功对接。


据了解,这是 SpaceX 第三次载人发射,也是第二次正式商业载人发射。不过 SpaceX 龙飞船软件开发负责人 Steven Gerding 在近期接受 Stack Overflow 采访时表示,SpaceX 公司在开发软件过程中仍面临一系列特殊挑战。


据 Gerding 介绍,SpaceX 的火箭飞行软件以控制周期为核心构建而成,软件需要读取所有输入:通过 ADC 读取到的传感器信息、来自网络的数据包、来自 IMU 的数据、来自恒星跟踪器或制导传感器的更新、还有来自地面控制台的指令等。开发人员需要对这些信息进行处理以确定当前状态以及输出结果,等到下一个时钟周期到来后再重复一遍整个过程。


这种对控制周期的强调给软件提出了一系列严苛的性能要求。Gerding 表示,“在龙飞船上,某些计算机会以 50 赫兹的频率运行控制周期,也有一些计算机的运行频率为 10 赫兹。主飞行计算机的运行频率就是 10 赫兹,它负责管理整体任务并向其他计算机发送指令。至于那些运行频率为 50 赫兹的计算设备,是为了对某些特定任务更快做出反应。”


至于飞船突然出故障了怎么办,Gerding 称“如果是硬件出了问题,那答案非常明确。我们设计了全面的硬件备份,包括计算机硬件、传感器乃至执行器;我们可以及时检测到故障并快速完成线路切换。”


同时,Gerding 也表示,任何软件都不可避免会存在某些 bug。“所以我们只能在软件设计当中,尽量保证把出现故障后的实际影响降到最低。”例如,如果推进系统中出现软件错误,那么飞船的生命支持系统或者负责操纵飞船的制导系统不应该受到影响,反之亦然。“将不同子系统妥善隔离起来,是解决这个问题的关键。”目前在组件之内,SpaceX 同样尝试分段隔离错误影响。“我们一直在检查错误代码与返回值,同时对操作人员及机组人员进行培训,帮助他们深入了解算法的具体细节。”


此外,验证与确认流程也占据了整个软件开发周期中的大部分时间。“从软件本体编写完成到让它在航天器上顺畅运行,中间还有很长的调试道路要走。”

SpaceX 飞船技术栈


SpaceX 载人龙飞船多次成功发射的同时,很多技术人员对其应用到的技术栈也非常关注。


事实上,SpaceX 的软件工程师曾在 2013 年做过一次公开回应,可以总结出一些相关信息:SpaceX 使用 Actor-Judge 系统为火箭和航天器提供三重冗余。Falcon 9 具有 3 个双核 x86 处理器,每个核上都运行着 Linux 实例(操作系统用的是 Linux,还有 LabVIEW 和 Matlab)。飞行软件是用 C/C++ 编写的,并且在 x86 环境中运行 (SpaceX 猎鹰九号和龙飞船用的都是 Intel 双核的 x86 处理器),整个主控程序只有几十万行代码。


注:LabVIEW 是美国国家仪器公司所开发的图形化程序编译平台。


对于每个计算和决定,字符串都会比较不同核的返回结果。如果存在不一致,则字符串返回是错误的,并且不发送任何命令。如果都返回相同的结果,则字符串将命令发送到火箭上的各种微控制器,这些微控制器控制是诸如引擎之类的东西。


2020 年年中,SpaceX 龙飞船软件的六名技术人员在 Reddit 举行了一场以“Dragon 有问必答”为主题的线上问答会,在问答会上,技术人员 Josh 证实了火箭和飞船的主要编程语言是 C++ 这一说法,他表示:“所有应用程序级自主软件都是用 C ++ 编写的。尽管我们希望编程尽可能简单些,但通常,我们在使用面向对象的编程技术时会选择使用 C++。”


此外,网友也比较关心 SpaceX 的技术栈是什么?它们主要是开源还是内部框架?这一问题 Sofian 给出了回答,他称:“我们使用 C 和 C++来制作飞行软件,HTML、JavaScript 和 CSS 用于显示,python 用于测试。”


在被问到所使用的 Linux 发行版是什么时,Dietrick 表示,“我们不使用任何现成的发行版,我们有自己的发行版。”


至于在飞行过程中如何执行错误检测和纠正这一问题,Josh 给出的回答是:“我们在飞船上部署了多台冗余计算机,并对其输出进行投票,这样就可以处理计算机中由辐射引起的错误。通过使用多个不同的传感器来处理传感器中的错误。而数据传输中的错误则通过使用附加到有效负载的错误检测或错误纠正代码来处理。”


据了解,SpaceX 的软件工程师主要工作就是编写火箭和航天器上运行的代码以及火箭和航天器的设计和制造过程的代码,内部分为飞行软件、企业信息系统、地面软件及航电测试四个团队,人数在几个到数十个人员不等,分别承担不同的研发任务。


此外,SpaceX 的龙飞船主控系统的芯片组仅用了 2.6 万人民币。要知道,这与其他载人飞船搭载的星载计算机和控制器相比(超过一亿人民币),成本极低。


参考链接:


https://stackoverflow.blog/2021/05/10/dont-push-that-button-exploring-the-software-that-flies-spacex-starships/


https://www.infoq.cn/article/sYZCchfcGX2OSADXPKCP


https://www.infoq.cn/article/lIEeT32g4AWk5GSEY3VS

2021-05-14 13:396834

评论

发布
暂无评论
发现更多内容

Jira Software 年度总结:12个重要功能大放送!

龙智—DevSecOps解决方案

Jira Atlassian Atlassian Jira

模块五作业

Anlumina

#架构实战营

微博评论架构设计

supermenG

架构师训练营 4 期

模块五课程作业

李晓笛

Spring 都在用的技术,你确定不过来看看?3️⃣

XiaoLin_Java

尚硅谷2022版Java课程体系,霸气来袭

@零度

Java 尚硅谷

焱融科技年度报告如约而至,如 Beijing 初雪

焱融科技

云计算 分布式 云原生 高性能 文件存储

QuanXiang 2022 Q1 开源路线图

全象云低代码

开源 工作流 低代码 表单

架构实战营模块五作业

lchx08

「架构实战营」

模块五作业-微博评论高性能高可用计算架构

CH

架构实战营

使用 Lambda 表达式实现超强的排序功能

看山

Lambda java8 排序 1月月更

ReactNative进阶(二十七):createMaterialTopTabNavigator 顶部导航组件

No Silver Bullet

1月月更 ReactNative

架构实战营 - 模块 5 课后作业

tony

迪斯尼《曼达洛人》艺术总监和制作设计师亲自揭秘背后的虚拟场景制作

龙智—DevSecOps解决方案

perforce 曼达洛人 西部世界 虚拟场景

java开发之Mybatis 快问快答

@零度

mybatis JAVA开发

过年回家前,先签收这份“外挂”

龙智—DevSecOps解决方案

Atlassian Confluence 到期日提醒 confluence插件

『TDengine2021用户故事』征文活动进入投票阶段!

TDengine

tdengine

Three.js入门: 构建一个立方体

devpoint

WebGL three.js 1月月更

一个cpp协程库的前世今生(二十二)协程偷取

SkyFire

c++ cocpp

低代码实现探索(二十五)DDD,事件,指令

零道云-混合式低代码平台

如何快速实现离散企业全链路数字化管理

华为云开发者联盟

数据采集 华为云IoT 智能制造 黑湖科技 数据中枢

【架构实战营】模块五:命题作业

wgl

「架构实战营」

微博评论高性能高可用计算架构

Evan

模块五 - 微博评论系统高性能高可用设计

圈圈gor

架构实战营 #架构实战营 「架构实战营」

一起看看MySQL中的隐藏列

华为云开发者联盟

MySQL 事务 主键 唯一索引 隐藏列

模块五作业

黄秀明

「架构实战营」

可能是推荐系统最详细且简单的入门教程

JavaEdge

1月月更

TiDB 在国信证券海量数据高并发场景中的实践

PingCAP

MultipartFile与File的一些事

华为云开发者联盟

spring File 文件 MultipartFile 中转文件

20 Prometheus之Grafana简述

穿过生命散发芬芳

Grafana Prometheus 1月月更

jar包与war包的部署

你?

SpaceX龙飞船性能要求严苛,软件开发存挑战_语言 & 开发_凌敏_InfoQ精选文章