开扒 SpaceX 飞船技术栈,程序员搞了个 3D 版飞船生成器过瘾

2020 年 6 月 1 日 InfoQ

作者 | 赵钰莹 李冬梅

在经历了 十几个小时的飞行后,SpaceX 的载人龙飞船与国际空间站成功对接,国际空间站迎来第一艘商业载人飞船的到访,其背后的技术栈也引起了开发人员的关注,甚至有程序员搞起了 3D 版飞船生成器。
SpaceX 飞船技术栈

美国当地时间 5 月 30 号下午 3 点 22 分,北京时间 5 月 31 日凌晨 3 点 22 分,由埃隆·马斯克创办的航天公司 SpaceX 执行的载人航天发射任务在肯尼迪航天中心圆满完成,可能很多技术人员对于 SpaceX 应用到的技术栈非常关注,导致这个话题在 Reddit 和 Hacker News 上的热度都不低。

载人“龙”飞船完成分离

事实上,SpaceX 的软件工程师曾在 2013 年做过一次公开回应,可以总结出一些相关信息:

SpaceX 使用 Actor-Judge 系统为火箭和航天器提供三重冗余。Falcon 9 具有 3 个双核 x86 处理器,每个核上都运行着 Linux 实例(操作系统用的是 Linux,还有 LabVIEW 和 Matlab)。飞行软件是用 C/C ++ 编写的(这一点也得到了 SpaceX 工程师的确认,火箭和飞船的主要编程语言是 C++),并且在 x86 环境中运行 (SpaceX 猎鹰九号和龙飞船用的都是 Intel 双核的 x86 处理器),整个主控程序只有几十万行代码。

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

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

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

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

在对 SpaceX 飞船技术栈进行探索的同时,也有开发者搞出了一个 3D 版本的开源飞船生成器项目,这个项目的实际开发时间是在 2016 年,但却在马斯克的 SpaceX 首次载人飞船发射成功后被送上了 Hacker News 热搜,我们也一起看看该项目的实际效果。

Reddit 讨论链接:

https://www.reddit.com/r/programming/comments/gtvmb4/what_computer_and_software_is_used_by_the_falcon_9/

开源 3D 版飞船生成器

Spaceship Generator 项目在 GitHub 上收获了 5.7k 的 star,这是一个 Blender 脚本,可根据代码生成 3D 飞船。真的飞船搞不来,搞一个 3D 版的过过瘾还是可以的。

使  用

开发者需要自行安装 Blender 2.76 或更高版本,然后从 Releases 中下载最新的 add_mesh_SpaceshipGenerator.zip,打开下载的 ZIP 文件,然后按照 Under File > User Preferences… > Add-ons enable this script (search for “spaceship”) 这个路径启用这个脚本,最后在 3D View 中添加宇宙飞船(Add > Mesh > Spaceship)。

Blender 最新版本下载地址:

https://www.blender.org/download/

Blender 是一款免费的开源 3D 创作套件,可用于创建 3D 可视化的静态图像、3D 动画、VFX 镜头,也可作为视频编辑工具。它是一个跨平台的应用程序,可以在 Linux、macOS 和 Windows 系统上运行。与其他 3D 创作套件相比,Blender 对内存和驱动器的要求也相对较小。它的界面使用 OpenGL 框架(创建),为所有支持的硬件和平台提供一致的体验。

主要特征
  • Blender 是一个完全集成的 3D 内容创建套件,提供了广泛的基本工具,包括建模、渲染、动画和 Rigging、视频编辑、VFX、合成、纹理绘制和多种类型的模拟。

  • 它是跨平台的,拥有在所有主流平台上统一的 OpenGL GUI(并可通过 Python 脚本进行定制)。

  • 拥有一个高质量的 3D 架构,可以实现快速、高效地创建工作流程。

  • 拥有活跃的社区支持,详情请参见 blender.org/community。

  • 它有一个小的、可选的轻量级可执行文件。

实际效果

首先从一个盒子开始延伸建造船体,多次拉伸前、后表面,并在此过程中随机添加平移、缩放、旋转效果;其次开始在船体上增加不对称性,选取随机的面并将其以类似的方式改变;然后向船体添加细节,按其朝向对每个面孔进行分类,并在其上生成一些细节,例如引擎、天线、炮塔、照明灯等;最后进行一些细微调整等,如下图:

算法原理

以下截屏使用船体线段数和非对称线段数的极值创建,以显示算法的工作原理。

GitHub 地址:https://github.com/a1studmuffin/SpaceshipGenerator

为你推荐

InfoQ Pro 是 InfoQ 专为技术早期开拓者乐于钻研的技术探险者打造的专业媒体服务平台。

扫描下方二维码关注 InfoQ Pro,获取更多精彩内容。

点个在看少个 bug 👇
登录查看更多
0

相关内容

生成器是一次生成一个值的特殊类型函数。可以将其视为可恢复函数。调用该函数将返回一个可用于生成连续 x 值的生成【Generator】,简单的说就是在函数的执行过程中,yield语句会把你需要的值返回给调用生成器的地方,然后退出函数,下一次调用生成器函数的时候又从上次中断的地方开始执行,而生成器内的所有变量参数都会被保存下来供下一次使用。
【2020新书】C++20 特性 第二版,A Problem-Solution Approach
专知会员服务
58+阅读 · 2020年4月26日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
179+阅读 · 2020年1月1日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
Python用法速查网站
Python程序员
17+阅读 · 2018年12月16日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
用Python制作3D动画
Python程序员
30+阅读 · 2018年1月17日
3D-LaneNet: end-to-end 3D multiple lane detection
Arxiv
7+阅读 · 2018年11月26日
q-Space Novelty Detection with Variational Autoencoders
VIP会员
相关资讯
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
Python用法速查网站
Python程序员
17+阅读 · 2018年12月16日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
用Python制作3D动画
Python程序员
30+阅读 · 2018年1月17日
Top
微信扫码咨询专知VIP会员