自从好奇号火星车在8月6日13点31分(北京时间)着陆火星后,这几天有关它的消息媒体一直有报道。本文将综合整理网上讨论“好奇号”引出的一些软硬件信息。
“好奇号”火星车简介
“好奇号”火星车(Curiosity),是美国国家航空航天局迄今(2012年)最昂贵的火星探测项目。于2011年11月26日15点02分发射,在2012年8月6日中午13点31分(北京时间)降落火星。这辆探测车比2004年登陆的“机遇号”火星探测器和“精神号”火星探测器大得多,携带更多先进科学仪器。预计将运作至少一个火星年(约2个地球年),调查火星以前或现在存在生命的可能性。(摘自互动百科)
“好奇号”的“大脑”硬件
与2004年发射的上一代漫游车“精神号”和“机遇号”有何差别?一个显而易见的差异是它们彼此的硬件:
“精神号”和“机遇号”包含 3 MB EEPROM,128 MB 内存和 256 MB闪存,处理器是 RAD6000(110万个晶体管),运算速度35 MIPS;
“好奇号”的 Rover Compute Element 包含两套相同的计算机系统,一个发生故障后另一个会自动配置接管,它包含 256KB EEPROM,256MB内存,2GB 闪存。抗辐射处理器是BAE 系统公司的 RAD750 (1040万晶体管,核心频率 110到200 MHz),基于IBM的PowerPC 750设计,速度400MIPS。(摘自 Solidot ,英文全文:extremetech。NASA官网也有简要介绍。)
“好奇号”的软件信息???
关于这方面,似乎没看到过 NASA 官方或其他媒体的正式消息。(注:可能有,但笔者没看到。)
今年 6 月底有一则简讯提到:“50 万行代码决定“好奇号”登陆火星最后惊心动魄的 7 分钟。” 但其中并未说这50万行代码都是哪种编程语言。在“好奇号”着陆火星后,StackExchange 上有个讨论帖:What is the Mars Curiosity Rover’s software built in?
The Mars Curiosity rover has landed successfully, and one of the promo videos “7 minutes of terror” brags about there being 500,000 lines of code. It’s a complicated problem, no doubt. But that is a lot of code, surely there was a pretty big programming effort behind it. Does anyone know anything about this project? I can only imagine it’s some kind of embedded C.
在这个讨论帖的回答中,World Engineer 回复说:
It’s running 2.5 million lines of C on a RAD750 processor manufactured by BAE. TheJPL has a bit more information but I do suspect many of the details are not publicized. It does appear that the testing scripts were written in Python.
“好奇号”在 BAE 系统公司制造的 RAD750 处理器上运行着 250 万行 C 代码(基于一份 2009 年的 PDF 文档)。NASA 喷气推进实验室(JPL)上有些信息,但我怀疑很多细节信息都没有公布。“好奇号”的测试脚本似乎是用 Python 编写的。
根据 World Engineer 提到的那份来自喷气推进实验室(JPL)的文档《 Monitoring the Execution of Space Craft Flight Software | 飞船飞行软件执行监控》(注意文档页眉上的 Copyright 2009 年字样),其中提到了“ Mars Science Laboratory(火星科学实验室)任务”当时的一些基本信息:
• programmer team of 30 | 有 30 位程序员
• testing team of 10+ people | 测试团队大于 10 人
• programming language is C, 2.5 M LOC | 250 万行 C 代码
在 StackExchange 那个讨论帖的回答中,Nate Parsons 提供了另外一些信息:(下面摘译了部分回复,另外 Nate Parsons 特别强调他不是 JPL 员工)
The code is based on that of MER (Spirit and Opportunity), which were based off of their first lander, MPF (Sojourner). It’s 3.5 million lines of C (much of it autogenerated), running on a RA50 processor manufactured by BAE and the VxWorks Operating system. Over a million lines were hand coded.
“好奇号”的代码基于 MER(“精神号”和“机遇号”), MER 都是基于第一代登陆器 MPF (“索杰纳号”)。有 350 万行 C 代码(大部分是自动生成的),运行在 BAE 公司制造的 RA50 处理器和 VxWorks 操作系统。超过 1 百万行代码是手写。
The code is implemented as 150 separate modules, each performing a different function. Highly coupled modules are organized into Components that abstract the modules they contain, and “specify either a specific function, activity, or behavior.” These components are futher organized into layers, and there are “no more than 10 top-level components.”
整个代码由 150 个独立模块实现,每个模块执行不同的功能。高度耦合的模块组织成部件(提取他们所包含的模块,给各个模块指定具体的功能、动作或行为)。这些部件再进一步组织分层,顶层部件不超过 10 个。
Source: Keynote talk by Benjamin Cichy at 2010 Workshop on Spacecraft Flight Software (FSW-10),slides, audio, and video (starts with mission overview, architecture discussion at slide 80).
来源:Benjamin Cichy 在 2010 年飞船飞行软件研讨会(FSW-10)上的演讲。(开始是任务概述,架构讨论从第80页开始)
译注:① Benjamin Cichy 是喷气推进实验室(JPL )的高级软件系统工程师,于 2002 年加入JPL;②飞船飞行软件研讨会(FSW) 由美国航天工业总公司主办,喷气推进实验室(JPL)和约翰·霍普金斯大学应用物理实验室协办。
注意,上面这两个回答并不是 NASA 官方发布的消息,只是根据以前的资料(2009年和2010年)推断得出的。
补充信息:
① 《 (NASA) JPL Institutional Coding Standard for the C Programming Language | 喷气推进实验室 之 C 语言编码标准》33 条规则概要见附图。微盘下载:http://t.cn/zWOyWu7
② 最后可以回顾一下“好奇号”火星车的全程登陆模拟动画: