硅谷前沿|触摸屏让普通人也能驾驶SpaceX?那你可就太低估马斯克了( 二 )


硅谷前沿|触摸屏让普通人也能驾驶SpaceX?那你可就太低估马斯克了
本文插图

排除文艺作品里夸张的表现 , Magi 的机制理念 , 其实和 SpaceX 的飞控系统 , 以及现实世界里的各种三重冗余系统颇有几分神似 。
根据 Hosein 透露的情况 , 猎鹰9号和龙飞船采用的是双核 x86 处理器 , 三枚一组 , 也即火箭的一级上有一组 , 二级上有一组 , 龙飞船上也会有一组 。
每枚处理器会搭配对应的遥测组件、传感器、数据输入和输出组件等等 。 每枚处理器的两个核心都可以对收到的数据进行独立的计算 , 生成独立的指令 。 这里为了方便理解 , 我们称这三枚处理器为甲 。
与此同时 , 甲类处理器生成的指令会发到飞船的器件上 , 而每个器件都会有一枚独立的处理器 , 我们称其为乙 。 这些处理器会负责对三个指令进行投票 , 选出一个结果执行 。
硅谷前沿|触摸屏让普通人也能驾驶SpaceX?那你可就太低估马斯克了
本文插图

对于甲类处理器 , 如果两个核心算出相同的结果 , 处理器就会发出指令;同理 , 如果两个核心结果不一样 , 这枚处理器就不会输出指令 。
三枚甲类处理器运行的是同样的软件 , 接到的是相同的数据 , 计算的方式也是一样的 。 因此在理想状态下 , 它们输出的指令应该相同 。
但是在航天飞行中 , 空间辐射的影响无法排除(比如传感器损坏、处理器计算周期延长等) , 难免出现 Hosein 所说的“不同步”现象 , 也即一枚处理器(下图中的 C)输出和其它处理器不同的指令 。
当一枚处理器不同步 , 乙类处理器会对收到的三个指令进行多数表决 。
另外两种极端情况是 , 如果 A、B、C 返回的是三个完全不同的指令呢?或者 C 内部没达成一致 , 只有 A 和 B 输出了指令呢?此时 , 飞控系统的逻辑是相信上一次计算正确的那枚处理器 。
这个设计 , 对于 SpaceX 坚持的 two-fault tolerance 策略尤为关键 。 它的意思是整个系统可以在至多任意两个器件出现错误时仍能正常运转 。 因此 , 就算出现另一种极端情况 , 也即处理器 C 不同步了 , B 完全失灵了 , 飞控系统也可以继续采用 A 的结果 。
(当然 , 如果不巧 A 也挂了 , 那就超出 two-fault 的范畴了 。 届时如果整个任务没有迅速崩溃的话 , 宇航员将不得不接管更大范围的操控 , 按照训练经验和预演的步骤 , 继续完成任务或者立即返回地球 。 )
这也是 SpaceX 面临的环境和一般的软件开发不一样之处所在 。 在软件行业里人们通常在项目总结时候才做事后检讨 (postmortem) , 这也形成了像 Facebook "move fast, break things" 这样的文化 。 而 SpaceX 一直以来的使命是把人送到月球、火星甚至更远的目的地 , 他们的约束更高 , 责任更大 , 任何错误的恶果来的更严重、更直接 。
硅谷前沿|触摸屏让普通人也能驾驶SpaceX?那你可就太低估马斯克了
本文插图

Hosein 透露所有处理器上运行的都是 Linux 实例 , 共享 codebase , 采用的是 C++ 语言 , 在 LabVIEW 环境下开发——形象来讲 , 整个火箭加上飞船上运行着一套小型的 Linux 计算集群 。
另外 , 在长达数年的地面教学过程中 , SpaceX 设计的模拟系统可以接入到这套飞控系统 , 也可以根据需要插入错误 。 也就是说 , 宇航员的训练实际上是在一个最大程度接近实际飞行的过程中进行的 。
而且根据前述 , 你可以看到其实整套飞控系统在计算性能上要求并不算高 , 不需要很强很重的硬件(航天语境下 , 每多一丁点载荷可能就意味着五六位数美元甚至更高的额外成本) , 所以模拟可以在一台电脑上完成 。
事实上 , SpaceX 的很多测试工作是在“桌面火箭”上完成的 , 顾名思义就是可以把火箭上所有的电脑、控制器等器件放在桌子 , 可以不用连接真的火箭(发射直播的时候作者还曾开过玩笑 , SpaceX 总部的控制中心看起来就像一帮程序员在搞封闭开发 。 )


推荐阅读