F´ (F Prime) 开源飞控框架快速入门与核心架构指南
2026/9/24 14:47:16 网站建设 项目流程
  • 嵌入式
  • 系统编程

【免费下载链接】fprime

F´ - A flight software and embedded systems framework

项目地址:https://gitcode.com/gh_mirrors/fp/fprime
点击查看免费下载

F´(F Prime)是由 NASA 喷气推进实验室(JPL)开发、面向航天飞行软件与嵌入式系统的组件驱动框架。本文基于仓库根目录 README.md,结合仓库内的安装指南、用户手册与参考应用源码,系统讲解 F´ 的安装、项目创建、构建运行与核心概念,帮助你快速上手用 F´ 搭建一套具备指令(Command)、遥测事件(Event)与通道(Channel)能力的嵌入式系统。

F´ 是什么:一个面向航天与嵌入式系统的组件驱动框架

F´ 是一个组件驱动的框架,旨在加速航天飞行软件及其他嵌入式软件应用的开发与部署。它最初在 NASA 喷气推进实验室开发,已成功部署于多个空间任务,特别适配 CubeSat、SmallSat 和科学载荷等小型航天系统的开发需求,但也适用于任意规模、任意领域的嵌入式系统。

F´ 提供以下核心能力(见 README.md):

  • 架构分解:将飞行软件拆分为接口清晰、职责单一的离散组件(Component);
  • C++ 框架:提供消息队列、线程等嵌入式系统核心能力的基础框架;
  • 建模工具:用于定义组件与连接关系、并自动生成代码的建模工具;
  • 现成组件库:持续扩充的、开箱即用的功能组件集合;
  • 测试工具:支持单元级与集成级的飞行软件测试。

从源码结构看,这些能力在仓库中有清晰的组织:Fw/目录存放框架核心(缓冲、指令、通信、日志、遥测、时间等基础类型),Svc/目录存放服务组件(指令分发、事件记录、遥测管理、健康监控等),Autocoders/目录实现了建模到 C++ 代码的自动生成。

核心技术概念:组件、端口、拓扑与数据构造

要理解 F´,首先要掌握它划分系统的三大抽象(详见 用户手册完整介绍):

  • 组件(Component):系统中一个离散的功能单元,负责管理系统的某一部分,例如负责射频通信的 Radio 组件;
  • 端口(Port):组件之间通信的通道,一个组件通过端口与其他组件交互;
  • 拓扑(Topology):由端口连接起来的所有组件构成的完整网络图,封装了整个系统。

以框架内置的 Command Dispatcher 组件为例:它接收地面通信并转换为动作,将动作派发给其他组件处理,通过 Event 上报派发与完成状态,并用 Channel 统计已派发指令的数量。由此可见,一个组件可定义三类数据构造(详见 Commands, Events, Channels, and Parameters):

  • 命令(Command):组件能够处理的、来自地面的动作;
  • 事件(Event):系统操作历史的记录,例如"已建立通信";
  • 通道(Channel):系统当前状态的命名分段,例如"当前温度:3C";
  • 参数(Parameter):可在运行时配置的持久化设置。

F´ 通常运行于带线程调度器的单核操作系统之上,但也可用于 baremetal 与多核系统,只是设计时需要理解执行上下文(参见 F´ On Baremetal and Multi-Core Systems)。

系统需求

根据 README.md 与 安装指南,使用 F´ 前需准备以下环境:

需求说明
操作系统Linux、Windows(配合 WSL)或 macOS
git版本控制与项目拉取
CMake3.16 及以上,CLI 工具须在系统 PATH 中
C/C++ 编译器Clang 或 GNU 编译器(如 gcc、g++)
Python3.8 及以上,支持虚拟环境与 PIP

注意事项:

  • 强烈建议使用最新版 PIP;非 x86_64/aarch64 架构或旧版 PIP 环境需要 Java;
  • Ubuntu/Debian 用户若遇 Python/PIP 问题,可参考 troubleshooting.md;
  • macOS 用户需确保 CMake 命令行工具在 PATH 中。

快速开始:安装引导工具并创建项目

F´ 的工具链以 Python 包形式通过 PIP 分发,并由 F´ Bootstrap 工具在项目的虚拟环境中统一安装,官方推荐每个项目使用独立的虚拟环境(详见 安装指南)。

第 1 步:安装 fprime-bootstrap 引导工具

pip install fprime-bootstrap

第 2 步:创建新项目

fprime-bootstrap project

该命令会提示输入项目名,例如:

[1/1] Project name (MyProject): MyProject

fprime-bootstrap project会执行以下动作:

  • 以标准 F´ 项目结构创建新的 git 仓库;
  • 在项目内创建虚拟环境并安装全部依赖。

第 3 步:激活虚拟环境

cd MyProject . fprime-venv/bin/activate

之后每次在项目中工作前都记得先激活虚拟环境。至此,你就拥有了一个包含完整 F´ 工具链的独立项目环境。

与已有 F´ 项目协作

若需使用他人已有的 F´ 项目,安装指南 提供了两种方式:

方式 a:使用 fprime-bootstrap clone

pip install fprime-bootstrap fprime-bootstrap clone <project_url>

其中<project_url>是托管在远程 git 仓库中的项目地址。

方式 b:手动克隆

  1. 为项目创建并激活虚拟环境;
  2. 下载项目(使用 git 子模块时记得执行git submodule update --init --recursive);
  3. 安装项目指定的 F´ 工具版本:
pip install -r <project>/fprime/requirements.txt

若项目自带requirements.txt,则以项目自身文件为准。本仓库根目录即提供了一份 requirements.txt,列出 F´ 框架所需的全部 Python 依赖。

构建与运行:fprime-util 与 CMake 构建体系

F´ 自带基于 CMake 的构建系统,用于处理 Autocoder 依赖并将生成的代码与用户代码组装(见 用户指南)。为标准化开发流程,F´ 提供了fprime-util辅助工具,将常用命令映射到底层构建系统。其完整用法见 fprime-util 用户指南。

核心子命令

子命令作用
generate生成构建缓存目录;默认生成 release 构建缓存,加--ut生成单元测试构建缓存。这是使用 F´ 构建系统的第一步
purge删除全部构建缓存;当构建系统未正确检测到变更时用于重新开始
build构建当前目录;在组件目录编译组件库,在部署目录生成二进制并复制构建产物
impl依据*Ai.xml自动生成组件骨架实现(加--ut生成单元测试骨架),节省大量开发时间
check构建并运行当前目录单元测试;--all运行部署中所有已知单元测试
coverage类似check,额外生成单元测试覆盖率报告
new创建新组件或新端口,通过--component/--port指定类型
hash-to-file当断言配置为输出文件哈希(FW_ASSERT_LEVEL = FW_FILEID_ASSERT)时,将哈希转换回完整文件路径
info打印当前目录的构建缓存位置与可用命令信息

常用通用参数

  • -j JOBS, --jobs JOBS:并行编译任务数,默认 1,建议设为机器核心数 +1,例如fprime-util build -j 10
  • --all:以部署全局作用域运行命令,例如fprime-util check --all运行所有可用单元测试;
  • --ut:对单元测试目标生效,例如fprime-util build --ut编译项目单元测试;
  • -v, --verbose:输出详细调试信息;
  • -p PATH, --path PATH:手动指定fprime-util运行目录,例如fprime-util check -p SigGen
  • -d DEPLOY, --deploy DEPLOY:手动指定部署目录,例如fprime-util build -d ~/fprime

以 Ref 参考应用为例

仓库中的 Ref 是一个完整组装、可直接在 Linux 与 macOS 上运行的参考应用,用于在嵌入式硬件就绪前快速验证安装与运行。构建流程如下:

cd fprime/Ref fprime-util generate

生成一次构建目录后,无需重复执行generate(除非构建目录被删除)。随后执行:

fprime-util build

即针对当前系统平台构建出可运行的二进制。

运行地面系统(GDS)

F´ 附带一个基于浏览器的测试用地面系统,可快速测试 F´ 代码,且会自动启动 Ref 应用二进制:

cd fprime/Ref fprime-gds

之后可在 "Commanding"、"Event"、"Channels" 标签页观察 F´ 代码的实际运行;"Logs" 标签页中的Ref.log记录 Ref 应用标准输出。若只想运行地面系统而不启动应用:

fprime-gds --no-app

随后可手动从构建产物目录启动 Ref 应用:

cd fprime/Ref/build-artifacts/<platform>/bin/ ./Ref -a 127.0.0.1 -p 50000

F´ GDS 默认使用 50000 端口,更多信息可通过fprime-gds --help查看。

Ref 应用的完整拓扑(组件实例及其连接)定义在 Ref/Top/topology.fpp,其中可以看到cmdDisp(指令分发)、eventLogger(事件记录)、tlmSend(遥测发送)、rateGroup1Comp等组件实例与Ports_RateGroupsPorts_StaticMemory等端口枚举,是理解 F´ 拓扑建模的直观样例。

目标平台与交叉编译

fprime-util默认以native平台构建(即宿主机平台)。需要交叉编译时,可将平台名作为位置参数传入(见 fprime-util 用户指南),例如为树莓派交叉编译:

fprime-util generate raspberrypi fprime-util build raspberrypi

仓库中的 RPI 参考应用演示了面向树莓派(Raspberry Pi 2 Model B)的完整交叉编译流程,其构建步骤包括:在树莓派配置菜单中启用 SPI 与 UART、在宿主机(如 Ubuntu)安装gcc-arm-linux-gnueabihfg++-arm-linux-gnueabihf交叉编译器,然后生成并构建针对raspberrypi平台的构建目录。由于 RPI 示例在 CMakeLists 中设置了默认工具链文件,生成时无需在命令行额外指定工具链。

用 settings.ini 定制部署构建

每个 F´ 部署可通过根目录下的 settings.ini 文件配置构建默认值(配置详解见 settings.ini 配置指南)。该文件采用 Pythonconfigparser兼容的 INI 格式,位于包含项目根CMakeLists.txt(含project()调用)的部署目录中,仅对所在部署生效。

[fprime]段可配置的关键项:

配置项说明
project_rootF´ 项目根路径
framework_pathF´ 框架根路径
library_locations附加 F´ 库与组件的路径,多个路径以:分隔
default_toolchain默认构建平台,缺省为native
default_ut_toolchain默认单元测试构建平台,缺省为native
environment_file构建期间设置环境变量的 ini 文件
config_directory配置头文件目录

此外可用与平台同名的段(如[gr712-vxworks6])为特定平台覆盖config_directoryinstall_destinationenvironment_file等设置。注意:修改settings.ini仅在fprime-util generate阶段生效,改动后必须重新生成构建。

仓库内开箱即用的框架内容

除了建模工具与构建体系,用户指南 还总结了 F´ 仓库自带的核心框架内容:

  • 服务组件(Svc):提供指令收发、事件记录、遥测管理等航天嵌入式系统最基础的指令与通信功能,仓库中Svc/目录下的CmdDispatcherActiveLoggerTlmChanHealthFatalHandler等组件即属此类;
  • Autocoder 自动编码器:定义可扩展的 XML schema,用户可据此以组件、端口、拓扑等高层抽象描述飞行软件应用,Autocoder 自动将模型翻译为 C++ 类,大幅减少构建嵌入式系统所需的样板代码(实现位于 Autocoders/);
  • 操作系统抽象层(OSAL):以通用方式提供 RTOS 与非实时操作系统 API 的实现,抽象线程、互斥锁、消息队列、文件、定时器与时钟等特性,使上层代码可无修改地切换操作系统。仓库开源实现覆盖 Linux 与 macOS(Windows 下经 WSL 使用 Linux 实现),对应目录为 Os/ 下的Linux/MacOs/Posix/等平台实现;
  • 地面数据系统(GDS):开箱即用的地面系统解决方案,可在 Linux、macOS、Windows 上运行,提供 GUI 工具与集成测试 API,用于集成测试与遥测快速查看。其工作方式为:用户定义组件与遥测后,字典(dictionary)由设计自动生成并被 GDS 读取;
  • Linux 驱动组件Drv/目录下提供 UART、I2C、SPI 等标准硬件的基础驱动实现示例,方便选用 Linux 的用户直接对接常用外设。

资源与帮助

  • 入门后可继续阅读 用户指南,其中分用户手册、最佳实践、开发者文档三部分,覆盖端口/组件/拓扑、数据类型、单元测试、开发流程、GDS 使用、FPP 建模与 CMake 指南等主题;
  • 新用户建议按 HelloWorld 教程 走完 F´ 项目的完整开发流程;
  • 设计理念与架构细节可参阅 软件架构设计 等设计文档;
  • 遇到安装问题可查阅 troubleshooting.md;
  • 项目版本历史与发布产物记录在 Releases 中,仓库根目录同时提供 CITATION.cff 用于学术引用。

总而言之,从安装引导、项目创建到fprime-util构建、GDS 联调与交叉编译,F´ 提供了一条从零到可运行飞控系统的完整路径。其组件/端口/拓扑的架构抽象与命令、事件、通道、参数的内置数据构造,使得开发者可以专注于业务组件本身,而把通信、调度、遥测等基础设施交给框架。

  • 嵌入式
  • 系统编程

【免费下载链接】fprime

F´ - A flight software and embedded systems framework

项目地址:https://gitcode.com/gh_mirrors/fp/fprime
点击查看免费下载

相关推荐

上一篇:如何在 Claude Code、Codex 和 Cursor 中使用 ego-lite:AI 浏览器自动化完整生态指南
下一篇:DevToysMac命令行补全功能:如何为终端集成工具命令提示

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询