>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
C-plus-plus

如何使用NASA的框架在轨道上运行代码

想象一下,为一个位于地球上方数百公里的设备编写软件。你没有办法按下重置按钮,走过去用调试器调试,或者拔掉电缆再重新插上。任何内存管理错误或未处理的异常都会让一颗昂贵的卫星变成太空碎片。这正是喷气推进实验室(JPL)的工程师们创建F´(F Prime)的环境。



这个项目是什么

F´是一个面向组件的飞行软件开发框架。简单来说,它是一套现成的嵌入式系统架构模式和工具。NASA在任务中使用它——例如,这段代码控制了火星上的Ingenuity直升机。

该项目的主要特性不是某个神奇的库,而是方法本身。与其编写控制一切的单一代码,不如用隔离的构建块来构建系统。当需要保证遥测采集模块的故障不会导致飞船姿态系统崩溃时,这一点至关重要。

开发是如何进行的

F´的整个过程围绕类型化和代码生成展开。你用一种特殊的建模语言(FPP)描述组件及其接口,框架负责处理常规工作:创建消息队列、管理线程以及链接模块。

清晰的组件分离

系统中的每个组件都是自主的。它只通过类型化端口与外部世界通信。这类似于微服务,但运行在单个二进制文件中,并具有严格的实时要求。你可以完全隔离地测试一个传感器或算法,而无需运行整个固件。

代码生成和C++

该框架使用C++编写。你得到的不仅是一门简洁的语言,还有一个提供基本原语的抽象层:线程处理、队列和互斥锁。同时,大部分样板代码会根据你的描述自动生成。你只需要在虚方法中实现业务逻辑。

测试工具

太空不会原谅错误,所以F´包含了一个强大的测试堆栈。有单元测试工具和集成设施。该软件包包含GDS(地面数据系统)——本质上是一个可以在笔记本电脑上运行的小型任务控制中心。通过它,你可以向设备发送命令并实时查看遥测数据。

技术细节

要开始使用,你只需要Linux、macOS或带WSL的Windows。依赖项包括用于工具链的Python 3.10和C++编译器(GCC或Clang)。

安装过程对于现代工具来说很标准:

pip install fprime-bootstrap
fprime-bootstrap project

之后,你将获得一个可以为目标平台构建的项目结构。有趣的是,该框架在Raspberry Pi上运行得很好。这使得它不仅对NASA工程师开放,也对机器人爱好者或小型卫星制造商(CubeSats)开放。

这可以在哪里应用

显然,我们不是每天都为火星探测器编写软件。但F´的架构原则在任何需要高可靠性的地方都很有用:

  1. 工业自动化。如果你的控制器管理着一台机床,一个意外的段错误可能导致设备损坏。
  2. 无人机。四旋翼和自主机器人面临与卫星相同的问题:资源有限、实时需求以及从故障中恢复的需要。
  3. 智能家居。对于火灾报警器或漏水检测等关键系统,组件方法确保了可预测的行为。

是否值得尝试

F´不是一个面向初学者的项目。如果你习惯了轻量级的Python脚本,入门门槛可能看起来很高。你需要理解C++原理,熟悉嵌入式系统,并准备好阅读文档。

另一方面,这是一个难得的机会来深入了解真实太空技术的"内部运作"。该项目有出色的文档、循序渐进的"Hello World"教程,以及GitHub Discussions上的活跃社区。如果你感到普通的Arduino库限制了你的能力,想学习如何构建真正可靠的系统,F´是进入专业嵌入式软件开发的一个很好的切入点。

当然,对于简单的LED闪烁来说,这就有点杀鸡用牛刀了。但如果你的任务是创建一个必须在自主模式下多年无故障运行的设备,NASA的经验肯定会派上用场。至少,你应该研究他们的端口架构和组件拓扑方法——这会显著改变你对代码组织的看法。

相关项目