面向太空时代的开源

作者: Joey Bernard

美国国家航空航天局(NASA)已经启动了一个相当雄心勃勃的项目:提供所有开源内容。主站点位于 http://open.nasa.gov。从这里,可以访问数据、代码和应用程序等等。对于任何对空间科学和 NASA 工作感兴趣的人来说,这是一个很好的起点。在本文中,我将介绍正在提供的各种代码,您可能想要探索一下。

可用的软件涵盖了多种类型。有些是低级、系统层软件。您可以使用行星际覆盖网络(Interplanetary Overlay Network,ION)进行真正的长距离传输。这是延迟容忍网络架构(Delay-Tolerant Networking architecture,DTN)的实现,如 RFC 4838 中所述。该软件物理托管在 SourceForge 上,您可以使用此代码与您的下一个行星际探测器进行通信。

更贴近地面的是一个中间件软件包,实际上是由 Apache 基金会托管的。您可以下载和使用面向对象数据技术(Object-Oriented Data Technology,OODT)中间件。OODT 是基于组件的,因此您可以选择要使用的部分。其中包含用于处理对分布式资源的透明访问、数据发现和查询优化以及分布式处理的组件。还有用于处理工作流和资源管理的组件。正在使用它的组织包括洛杉矶儿童医院和 NASA 的行星数据系统。如果您正在管理数据系统,这可能值得一看。

回到实际的科学处理,您可能想要下载数据生产力工具包(Data Productivity Toolkit,DPT)。该软件包是命令行工具的集合,用 Python 编写,可让您处理文本数据文件。这些实用程序遵循 UNIX 的设计方法,即拥有可以很好地完成一项任务的小型实用程序,然后将它们链接在一起以进行更复杂的处理。其中包含用于整理和操作数据的工具,用于对数据进行统计的工具,甚至还有用于可视化数据和结果的工具。许多工具甚至为基本的 Python 和 numpy/scipy/matplotlib 例程提供了 API。

当我在谈论 Python 和科学时,您还可以看看 SunPy。SunPy 旨在提供一个例程库,该库在研究太阳物理学方面非常有用。有了它,您可以查询虚拟太阳天文台(Virtual Solar Observatory,VSO)并获取可以处理的数据。许多例程可用于使用各种颜色映射和处理过滤器绘制此数据。有一个 Sun 对象,其中包含太阳物理学中使用的物理常数,以及太阳的位置和许多其他太阳属性。

NASA 完成的许多计算工作都涉及机器集群和大规模并行代码。这意味着 NASA 的工作人员需要将许多工具组合在一起以管理这些机器。他们也很友好地发布了许多此类代码供公众使用。其中第一个是 multil(多线程多节点实用程序)。在标准的 GNU 文件工具中,cp 和 md5sum 在单台机器上作为单线程进程运行。multil 工具提供了名为 mcp 和 msum 的替代品。这些实用程序使用多线程来确保每个节点都尽可能地保持繁忙。读取和写入并行性允许通过异步 I/O 交错单个副本的各个操作。拆分文件处理允许不同的线程并行处理文件的不同部分。

NASA 还提供了一个实用程序,用于提供对集群的 SSH 访问。有一个名为 mesh(使用现有 SSH 主机的中间件)的中间件实用程序,它提供单点登录功能。Mesh 位于 SSH 之上,并且不使用本地 authorized_keys 文件,而是在运行时为专用服务器加载文件。Mesh 还有自己的 shell(称为 mash),它限制了用户可以使用的应用程序。使用此系统,您可以动态添加和删除可用的 SSH 主机。此外,由于身份验证由 SSH 首次启动时预加载的库处理,因此可以确保对用户强制执行限制。

现在您已经有了一个连接机制,您可能需要在所有这些机器上处理负载平衡。同样,NASA 为您提供了帮助。它有一个名为 ballast(跨系统平衡负载)的软件包,可能会有所帮助。该软件包专门处理 SSH 连接的负载平衡。每个可用的主机都运行一个 ballast 客户端,并且有一个或多个 ballast 服务器。服务器维护从客户端收集的系统负载信息,并使用它来决定将 SSH 连接请求发送到何处。由于所有这些都是通过 SSH 处理的,因此决定连接到哪个主机的策略也可以考虑用户名。这样,您可以制定特定于每个用户的策略。这使您可以更好地调整每个用户的最佳选项,而不是试图找到每个人都被迫使用的通用策略。

回到科学研究,另一个重要的任务是可视化,NASA 发布了几个工具来提供帮助。我在这里看到的第一个是 World Wind。这是一个地球可视化系统。您可以使用它来获得地球的 3D 视图,并查看投影到地球上的数据。它是一个 Java 应用程序,因此可以在任何具有 Java 虚拟机的桌面上以及大多数浏览器中运行。它是一个完整的开发工具包,并且有几个示例应用程序,您可以将其用作您自己的代码的起点。

将可视化进一步扩展到地球表面之外,还有 ViSBARD(用于浏览、分析和检索数据的可视化系统)。此应用程序允许您从多个卫星提取数据并同时显示它们。它还允许对所有这些数据进行 3D 查看。这种类型的矢量场信息在 2D 图中很难分析,因此需要这种工具。最新版本还允许您可视化 MHD(磁流体动力学)模型。这样,您可以将模型计算的结果与实际卫星测量值进行比较。

使用 Vision Workbench 可以完成更广泛的图像处理。这是一个应用程序和一个完整的图像和计算机视觉算法库。但它并非旨在成为一个完整的、前沿的库。相反,它提供了标准算法的可靠实现,您可以将其用作开发自己的算法的起点。

当您准备好发射自己的卫星时,您可以下载并使用核心飞行执行程序(Core Flight Executive,cFE)。该软件用作飞行数据系统和仪器的基础。它用 C 语言编写,并基于 OSAL(操作系统抽象层)。它有一个执行程序,以及时间和事件服务。您可以使用 ODTBX(轨道确定工具箱)跟踪您的卫星。ODTBX 软件包处理轨道确定分析和早期任务分析。它以 MATLAB 代码和 Java 形式提供。

我在这里介绍的最后一段代码是 S4PM(用于测量的简单、可扩展、基于脚本的科学处理器)。它实际上在戈达德地球科学数据和信息服务中心用于进行数据处理。它由一个处理引擎、一个工具包和一个图形监视器组成。S4PM 允许一个人同时管理数百个作业。它还被设计为相对容易地设置新的处理字符串。

NASA 的开源项目不仅涵盖代码。NASA 也在发布数据。开普勒计划正在寻找系外行星。正如我之前提到的,您可以从太阳动力学天文台下载数据。您可以通过查看热带降雨测量任务的信息来处理气候数据。您可以查找来自各种月球任务(从阿波罗计划开始)的大量数据。还有来自各种行星探测任务的数据。气候数据和地球测量数据也可用。

我仅介绍了 NASA 为公众提供的一些项目。希望您已经看到了足够多的内容,可以去更详细地查看其余部分。普通公民可以做很多科学研究,NASA 正在尽自己的一份力量,努力将工具交到您手中。

加载 Disqus 评论