简介
人们在设计和编程实现一套嵌入式系统时,会受到很多约束条件。这些约束包括处理器速度、执行期限、允许中断的延迟时间以及内存约束等。由于太空飞行的使命,这些约束条件会变得很严酷。通常,在太空飞行器上的计算机只使用非常昂贵的能够抗辐射的内存。它的中央处理器(CU),通常也是经过专门设计的设备,因为它需要承受高能量宇宙射线的破坏性影响。从商业标准来看,其CPU运行速度并不快,而只是典型的抗辐射电子设备。这其中的权衡是速度和被一个星际粒子直接击中后还能不断运转的能力。例如,一台典型的PC机里的双核CPU将在太空中无法长时间正常运转(同理,该PC机的其他大部分电子设备也不会正常运转)。
还有一些科学目标,它们驱动着软件的功能和性能需求。所有需求必须满足太空飞行器的计算环境的约束条件。经过无数次的权衡抉择之后,最终产品必须能够运转,而且在飞行任务期间不能出现致命的错误。因为,对于机器人太空飞行器,任何错误都足以导致飞行任务非正常终止,所以,在点燃火箭、飞向蓝天之前,有必要保证所有的方面都是正确的。
在2008年5月25日,凤凰号火星探测器安全降落在火星的北极地区。图3-1是一位艺术家所画的凤凰号着陆效果图。和巡游在火星赤道附近相对温暖的地区的探测器不同,凤凰号探测器是位于贫瘠荒岛上的一个静止的探测器,荒岛上气候寒冷,大气压力相当于在地球上约10万英尺的高度时的压力。火星上稀薄的大气的主要成分也是二氧化碳。虽然算不上是一个理想的度假胜地,但却是一个寻找古代固态水的好地方。
图 3-1:凤凰号火星探测器在火星上的着陆效果图(图像来源:美国航空航天局和喷气推进实验室NASA/JPL,见彩图10)
该探测器的任务是寻找可以证明水存在的直接证据——可能在火星表面下以冰的形态存在(顺便提一下,探测器找到了冰),以及能够说明火星曾经提供了适合生命的栖息地的证据。由于飞行器的着陆点的位置靠近极地,它的寿命是有限的;当火星的冬季来临时,凤凰号几乎肯定会结束“生命”。在高纬度的着陆点,该探测器在一个完全黑暗的、被固态二氧化碳所覆盖的极寒冷的(-90℃或者更冷)冬天下存活的机会是非常非常渺茫的。
我是凤凰号探测器的成像软件的首席软件工程师。在本章中,我将分享在设计凤凰号火星探测器的成像飞行软件的各种各样的数据处理策略的过程中所做的一些思考。因为该软件负责处理在火星表面的所有成像相关的任务,又具备“飞行软件”的使命,所以在喷气推进实验室/美国航天局(JL/NASA)的术语中,该成像软件又称为“成像飞行软件”。
对于凤凰号火星着陆探测器,其面临的挑战是同时捕获并处理四个感光元件(carge-coupled device,CCD)成像器的数据(类似于普通的数码相机的功能),而且所有这些操作都是在探测器的主计算机预分配的非常有限的内存中完成。不仅如此,图像可能还需要在传输回地球之前使用一个或几个不同的压缩方法进行压缩。此外,一些最终的数据产品(即图像)需要被细分为不同的分段,每个分段都有自己序列化的数字数据头,这种方式可以满足高效存储在太空飞行器的闪存中,并且当数据包从火星传到地球时,可以减少数据包丢失等原因所造成的数据量的丢失。最终生成的嵌入式代码,在凤凰号火星着陆探测器正常运转的生命周期内,获取并处理了超过25000张的图像。