北京时间5月31日22点30分,经过大约19个小时的飞行后,SpaceX载人龙飞船与国际空间站实现成功对接。
载人龙飞船属于SpaceX研制的第二代龙飞船(Dragon 2),具备可重复使用的能力。第二代龙飞船可分为载人龙飞船和货运龙飞船两种,其前身是第一代货运龙飞船(Dragon 1)。新飞船可以自动与空间站完成对接,而不像第一代飞船那样,需要借助空间站上的机械臂的帮助。当然,载人龙飞船也保留了人工对接的选项。
本次使用的载人龙飞船,直径4米,高8.1米,最多可搭载7位宇航员,这与航天飞机搭载的宇航员数量相同,也与中国5月5日测试的“新一代载人飞船”设计上能够搭载的宇航员数量相同。
猎鹰9号火箭升空
SpaceX成功了,其发射成本仅不到美、中、俄国家队的十分之一,单凭这一项,我们就值得为SpaceX点赞,更应该向该团队学点什么。
要知道,昨天SpaceX的仿真场景还发生了爆炸,而今天上帝保佑成功得以发射成功。各位也知道,SpaceX的CEO马斯克在创立企业以来,可谓历经上百次磨难:财务危机,董事会逼宫,员工离职,离婚以及外界各色人等的冷嘲热讽。
而今天的事实让所有的人张开了眼睛,闭上了嘴。往前倒三年,Space X三次连续发射失败时,媒体问马斯克为何没考虑自己卷铺盖走人。马斯克斩钉截铁地回答:“Never(决不)。我不知道什么叫放弃,除非我被困住或者死去。”,一如丘吉尔。
而SpaceX也是马斯克的第一个非互联网项目。其做为程序员、工程师,曾成功创建了Zip2、X.com/Paypal、特斯拉,SolarCity/The Boring、OpenAI公司和机构。
马斯克是一个出色的创造者,有着非凡的远见卓识和能力。马斯克本人异常勤奋,经常每周工作80个小时以上,他也要求他的工程师们和自己一样疯狂工作。
马斯克和我们一样,是从一名程序员开始做起。他12岁开始学习Basic语言,并利用编程能力赚钱贴补家用。马斯克的毅力在当年驱使他三天学完了编程,现在驱使他将对科技驱动未来的愿景变成了现实。
也许我们可以从马斯克上学习到创新,务实,敢拼并充满斗志和毅力。
而SpaceX做为老马的第一个非互联网项目,在这些“高精尖”的产品身上都用了哪些软件和技术呢,我们从GDC 2015/2016与各种SpaceX工程师的讨论中一探究竟。
一、SpaceX 软件工程师团队的职责
Falcon 9具有3个双核x86处理器,每个核上都运行Linux实例。而SpaceX软件开发团队为Falcon9,Grasshopper和Dragon应用开发软件,即让这些核心平台能够正常工作。此团队还负责编写仿真软件;测试飞行代码;还要开发部署在地面站中的通信和分析软件,还有任务控制领域方面的工作,用来支持正在进行的任务。
SpaceX 软件工程师的目标有 2 个:
火箭和航天器上运行的代码;
火箭和航天器的设计和制造过程的代码;
工作内容范围就很大了,从大型 Web 应用到小型嵌入式计算平台都有涉及。
SpaceX 软件工程师的技术栈:
C#、MVC4、EF、MSSQL (REST);
Javascript、Knockout、Handlebars、LESS;
C++、Linux、C、Python、LabVIEW、MATLAB;
看到这,肯定有人冒出疑问了,C# 和 MVC 与火箭发射没有关联吧?
是的没关系,这是做个汇总它们是用来开发内部信息系统的。SpaceX中,首选的编程语言是C / C ++。对于AVR,Arduino和ARM之类的硬件,其开发也主要使用C/C ++。
SpaceX 有 4 个独立的软件团队。
1、飞行软件团队
大约有 35 人(这是 2013 年的人数)。猎鹰9号火箭、蚱蜢火箭和龙飞船上所有的代码,都由飞行软件团队包圆了。
此外,这些团队成员还要做:
编写仿真软件,测试飞行代码;
编写部署在地面站的通信和分析软件;
在飞行任务控制部门工作,为现役任务提供支持。
2、企业信息系统团队
建立内部软件系统,让 Spacex 得以正常运转。
在内部软件团队中的成员要身兼多职,但他们开发和发布的旗舰产品,几乎所有 SpaceX 员工都在使用的内部 Web 应用程序。
包括:
创建采购订单和填写零件库存的人员,
工程师创建设计和工作订单,
技术人员在现场打卡并根据这些设计查看当天的工作内容。
(基本涉及到方方面面了。市面上有一些商业化产品可以满足他们的需求,但 SpaceX 是自己开发了)
SpaceX 正在从一个研究和工程公司转型为一个制造公司,该团队功不可没。他们充分利用了C#/MVC4/EF/SQL、Javascript/Knockout/Handlebars/LESS ,使用REST API对接。
3、地面软件团队
这个团队大约有 9 人。主要在 LabVIEW 中编码,开发用于任务和发射控制的 GUI,供工程师和操作人员监控飞行器遥测和指挥火箭、航天器和平台支持设备。
他们在高度分布式系统中推送高带宽的数据,并实现由严格要求的复杂用户界面,以确保操作人员能够及时控制和评估航天器。
LabVIEW 是什么?
LabVIEW(英语:Laboratory Virtual Instrumentation Engineering Workbench)是由美国国家仪器公司所开发的图形化程序编译平台,由杰夫·考度斯基(Jeff Kodosky)发明,程序最初于 1986 年在苹果电脑上发表。
LabVIEW 早期是为了仪器自动控制所设计,至今转变成为一种逐渐成熟的高级编程语言,目前广泛的被应用于工业自动化之领域上。
图形化程序与传统编程语言之不同点在于程序流程采用数据流之概念打破传统之思维模式,使得程序设计者在流程图构思完毕的同时也完成了程序的编写。—— 维基百科
4、航电测试团队
他们与航电硬件设计工程师一起合作,编写测试软件,尽早发现硬件问题。
该团队的主要任务:写出非常全面和强大的软件,以便能够在大批量的情况下自动发现硬件的问题。
测试软件通常是在机械环境测试的时候运行。
二、SpaceX 工程师答网友问
问:导航/推进控制系统用了哪种操作系统?
答:龙飞船和猎鹰9号用的是 Linux。
问:主力编程语言是哪个?
答:火箭和飞船都是 C++。
【说明】:可能有童鞋要问,前文技术栈栈提到了 Python,怎么没有说用在哪方面。测试团队做自动化测试时,肯定用了 Python 脚本了。
问:你们当前最大的项目代码量是多少?
答:运载工具代码约为几十万行。
问:维护麻烦吗?
答:不麻烦,这就是我们的工作!实际上,我们对代码库非常满意。
问:你们最具挑战性的项目是什么?为什么?
答:龙飞船对接国际空间站是一个重大挑战。因为必须要开发许多新代码。
(程序员的那些事 补充:今天成功发射的龙飞船,可以自动与空间站完成对接。第一代龙飞船需要借助空间站上的机械臂。当然,载人龙飞船也保留了人工对接的选项。SpaceX 在 2013 年的龙飞船是第几代,我没查。)
问:你们觉得最有成就的是什么?
答:龙飞船对接国际空间站。
问:你们怎么平衡工作/生活?我听说在 SpaceX 很容易职业倦怠。你们都在煎熬吗?
答:SpaceX 体现了小型企业的心态。我们全都投资于 SpaceX 及其成功。话虽如此,我们的工作时间却更长。归根结底,还是要看你生活中最重要的是什么。我们当然要应对职业倦怠,那就是休假 :-)。
就我个人来说,大多数时候我甚至没有注意到我已经工作了12~14个小时。我看着时钟,想着“时间真快在哪里?”。我认为这证明了我们对项目感到兴奋的程度。当你真正享受自己的工作时,并不会感觉像是在工作。话虽如此,我仍然会时不时地休假,借以保持理智。
( SpaceX 的招聘信息,很多技术岗位,基本都有一个额外要求:必要的时候,能加班。 )
还有个当年正在攻读天体物理学的学位的童鞋问:
对于航天行业,你们觉得最常用/最有用的编程语言是什么?我的编程经验非常少,而且很想开始学习,因为这个行业的每一个方面/研究似乎都需要对编程有一定的了解。
SpaceX 工程师的回复说:
对于所有软件工程师来说,C 语言是一门很好的入门语言。它迫使你学习 CPU 是如何工作的,内存是如何工作的,等等。一旦你掌握了 C 语言之后,再去看 C++。
我们团队所有人都有不同的背景,没有什么特别的路径,我们都是沿着一条路走到这里的。就我个人而言,我在学校里得到的最好经验就是做了个人编程项目。这年头在网上和应用商店里有很多机会,可以做一个产品,公开自己的作品让他人看到。
动画演示 SpaceX 龙飞船如何送宇航员去国际空间站
与依旧火热的互联网创业比起来,Space X枯燥而无味,甚至充满着不可实际的想象,相信马斯克在这个阶段性的胜利后,Space X的团队和马斯克依旧继续践行那句“俗不可耐”的宣言:make the world better。
编辑:叨叨
来源:综合自Reddit,StackExchange以及程序员那点事,一并致谢。