尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

F´ Ref 参考应用实战指南:在 Linux/macOS 上构建、运行与验证 F Prime 完整部署

F´ Ref 参考应用实战指南:在 Linux/macOS 上构建、运行与验证 F Prime 完整部署 F´ Ref 参考应用实战指南在 Linux/macOS 上构建、运行与验证 F Prime 完整部署【免费下载链接】fprimeF´ - A flight software and embedded systems framework项目地址: https://gitcode.com/GitHub_Trending/fpr/fprimeF´F Prime即 Ref 参考应用是 NASA 开源飞行软件框架自带的完整组装演示部署用于在嵌入式硬件就绪之前于 Linux 与 macOS 上快速体验一个包含指挥Commanding、事件Event、遥测通道Channels与参数Parameters的航天器软件系统。本文将带你完整走通从克隆源码、创建 Python 环境、生成构建目录、编译部署到启动浏览器地面站GDS并验证遥测与命令收发的全流程并结合仓库源码剖析 Ref 应用的拓扑结构、速率组调度与命令行参数机制。1. Ref 参考应用是什么RefReference是 F´ 框架自带的一个参考部署Deployment其目的正如 TestDeploymentsProject/Ref/README.md 所述演示一个完全组装好的、可直接运行在 Linux 和 macOS 上的 F´ 应用。它让使用者无需等待嵌入式硬件即可快速上手 F´ 的工程流程生成、构建、运行验证 F´ 安装是否成功在纯软件环境里提前熟悉 F´ 的组件、端口与拓扑组织方式。Ref 应用通过 Ref/docs/sdd.md 被描述为一颗参考航天器集成了三类组件示例应用组件部署特有组件作用SendBuffApp发送缓冲区buffer的示例组件RecvBuffApp接收缓冲区的示例组件BlockDriver一个概念性驱动把缓冲区从 SendBuffApp 中继给 RecvBuffAppSignalGen按波形生成遥测的组件SG1~SG5 共 5 个实例PingReceiver接收健康 ping 的测试组件可被关闭TypeDemo类型演示组件DpDemo数据产品Data Product演示组件可复用服务组件来自 F´ 框架可跨项目复用组件作用源码位置EventManager记录事件并打包下传Svc/EventManagerActiveRateGroup按周期执行一组组件Svc/ActiveRateGroupBufferManager管理缓冲区池Svc/BufferManagerCmdSequencer从二进制文件装载命令序列并执行Svc/CmdSequencerCmdDispatcher将地面命令分发到已注册组件Svc/CmdDispatcherFileDownlink / FileUplink / FileManager文件下传、上传与文件操作Svc/FileDownlink 等Health周期性 ping 活动组件以验证线程存活Svc/HealthPrmDb启动时装载参数库并对外提供参数Svc/PrmDbRateGroupDriver向多个 ActiveRateGroup 分发周期信号Svc/RateGroupDriverTlmChan缓存遥测通道并周期下传Svc/TlmChanPolyDb管理多态数据值数据库Svc/PolyDbPosixTime在 POSIX 系统上为遥测/事件打时间戳Svc/PosixTimePassiveConsoleTextLogger把事件的文本形式打印到标准输出Svc/PassiveConsoleTextLogger提示若需要为真实嵌入式平台做交叉编译README 建议参考 F´ 官方的 LED 闪烁LED Blinker教程本文以 Linux/macOS 本机直接运行为主线。2. 构建前的准备安装 F´ 与创建虚拟环境2.1 前置条件理解 Ref 应用只需少量前提最重要的是先完成 F´ 的安装请按 安装指南 操作。安装完成后fprime-util与fprime-gds等命令行工具即可用。2.2 获取源码并进入部署目录获取 F´ 仓库源码例如git clone本仓库后进入 Ref 部署所在的工程目录git clone F´ 仓库地址 # 例如克隆本 fprime 仓库 cd fprime/TestDeploymentsProject注意README 中的克隆地址为公开的 nasa/fprime 仓库在本文所述场景下你当前所在的仓库即为其源码本体进入TestDeploymentsProject目录即可。2.3 创建 Python 虚拟环境并安装依赖F´ 的构建与地面站工具链依赖 Python 包建议在独立虚拟环境中安装python3 -m venv fprime-venv . fprime-venv/bin/activate pip install -r ../requirements.txt虚拟环境目录fprime-venv创建于TestDeploymentsProject之下../requirements.txt指向仓库根目录的依赖清单即 requirements.txt其中包含fprime-tools、fprime-gds等核心工具包。2.4 工程配置文件说明TestDeploymentsProject/settings.ini 是 F´ 工程级配置的示例它声明[fprime] framework_path: .. project_root: . default_cmake_options: FPRIME_ENABLE_FRAMEWORK_UTSOFF FPRIME_ENABLE_AUTOCODER_UTSOFFframework_path指向上一级目录即框架本体project_root指向当前工程default_cmake_options默认关闭框架单元测试UT与自动代码生成器单元测试以加快部署构建——这与 README 中快速构建的定位一致。3. 生成构建目录并编译 Ref 应用F´ 底层使用 CMake需要一个构建目录来工作。fprime-util是 CMake 的封装工具用于精简标准 F´ 流程。3.1 生成构建目录fprime-util generate执行后会在工程内生成build-artifacts/平台/目录树。除非构建目录被删除否则无需再次运行generate。3.2 构建部署二进制fprime-util build该命令会针对当前系统Linux 或 macOS完成编译产出可在本机直接运行的二进制。构建完成后可执行文件位于build-artifacts/平台/bin/下其中平台如default或linux-x86_64之类。3.3 构建定义与编译选项Ref 的构建定义位于 TestDeploymentsProject/Ref/CMakeLists.txt它通过add_fprime_subdirectory依次引入 PingReceiver、RecvBuffApp、SendBuffApp、SignalGen、TypeDemo、DpDemo、BlockDriver、Top 等子目录再以register_fprime_deployment把 Main.cpp 注册为部署可执行文件并依赖自动生成的_Top拓扑模块。该文件还为部署二进制启用了严格告警并视告警为错误target_compile_options(${PROJECT_NAME} PUBLIC -Wall -Wextra -Werror -pedantic) target_compile_options(${PROJECT_NAME} PUBLIC -Wshadow -Wconversion -Wsign-conversion -Wformat-security -Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual -Wundef)这说明 Ref 不仅是功能参考也是 F´ 推荐的编译规范参考注释中说明这些严格选项仅作用于部署可执行文件以免在核心框架代码中触发冗余告警。3.4 小技巧单独构建组件fprime-util build同样支持构建单个组件例如只需编译 SignalGen 时可以指定其目录详见第 7 节快速提示。4. 运行 F´ 地面系统与 Ref 应用F´ 自带一个基于浏览器的测试地面系统GDS用于帮助开发者低开销地快速测试 F´ 代码。4.1 一键启动GDS Ref 应用在运行 GDS 之前请确保已经完成上述fprime-util build构建。然后执行cd fprime/TestDeploymentsProject fprime-gdsfprime-gds会自动同时启动 Ref 应用二进制实现开箱即用的快速测试这正是 Linux/macOS 上的典型体验。启动后浏览器会打开 GDS 界面你可以在以下标签页观察 F´ 的实际运行Commanding命令向 Ref 应用发送命令Event事件查看应用上报的事件流Channels通道查看遥测通道的实时数值与曲线Logs日志查看运行日志其中Logs - Ref.log展示 Ref 应用的标准输出出错时可在此排查。4.2 只启动 GDS不启动 Ref 应用cd fprime/TestDeploymentsProject fprime-gds --no-app随后可手动从构建产物目录独立运行 Ref 应用cd fprime/TestDeploymentsProject/build-artifacts/platform/bin/ ./Ref -a 127.0.0.1 -p 500004.3 命令行参数解析原理./Ref支持的-a与-p参数解析逻辑在 TestDeploymentsProject/Ref/Main.cpp 中使用getopt实现while ((option getopt(argc, argv, hp:a:)) ! -1) { switch (option) { case a: hostname optarg; break; // -a主机名/IP 地址 case p: port_number static_castU16(atoi(optarg)); break; // -p端口号 case h: default: print_usage(argv[0]); return (option h) ? 0 : 1; } }参数被存入Ref::TopologyState inputs后传入Ref::setupTopology(inputs)若hostname与port均有效RefTopology.cpp 会调用comDriver.configure(hostname, port)配置 TCP 客户端并启动名为ReceiveTask的接收线程优先级 34主程序随后调用Ref::startRateGroups(Fw::TimeInterval(1, 0))以1Hz 周期驱动系统循环并注册SIGINT/SIGTERM信号处理按下Ctrl-C时通过Ref::stopRateGroups()停止速率组再执行Ref::teardownTopology完成资源回收后正常退出。4.4 GDS 帧格式配置TestDeploymentsProject/Ref/fprime-gds.yml 指定了 GDS 的链路层帧格式command-line-options: framing-selection: space-packet-space-data-link即选用空间数据链路 空间包CCSDS 风格的组帧方式与 Ref 部署中 Ccsds 子拓扑使用的编解码器相匹配。5. 深入源码Ref 应用的拓扑与运行机制5.1 拓扑总览四类连接视图Ref 的拓扑定义在 TestDeploymentsProject/Ref/Top/topology.fpp其内部模块连接图IBD由 Ref/docs/sdd.md 按功能维度拆分讲解核心视图包括Commanding指挥组件注册命令、命令分发与执行状态回传的连接Telemetry遥测组件向TlmChan更新遥测通道的连接Logging日志组件向EventManager发送事件的连接Parameters参数组件从PrmDb读取/更新参数的连接Time时间组件获取时间戳用于事件与遥测时间标签的连接Health健康Health组件 ping 活动组件验证线程存活的连接Rate Groups速率组组件以不同频率被执行的连接Ground地面通过 TCP/IP 套接字与地面系统通信的连接Drivers驱动示例驱动收发数据包并为RateGroupDriver提供节拍tick的连接。速率组视图展示 Ref 拓扑中三个 ActiveRateGroup 如何将组件按不同速率调度执行图片来自 Ref/docs/sdd.md。地面视图CDH 组件通过 TCP/IP 套接字与地面系统收发命令与遥测图片来自 Ref/docs/sdd.md。5.2 组件实例与 Base ID 规划TestDeploymentsProject/Ref/Top/instances.fpp 定义了 Ref 的全部组件实例及其 Base ID遵循0xDSSCCxxx八位十六进制约定D 部署位1-FSS 子拓扑位00 为主拓扑CC 组件位xxx 组件内部条目事件、命令、遥测预留。示例blockDrv的 base id 为0x10000000rateGroup1Comp为0x10001000comDriver为0x10025000。活动组件如blockDrv、三个ActiveRateGroup还配置了队列大小默认QUEUE_SIZE 10、栈大小默认STACK_SIZE 64 * 1024与线程优先级如blockDrv优先级 47、rateGroup1Comp43、cmdSeq20。5.3 1Hz 时钟驱动的三级速率组Ref 拓扑在connections RateGroups中把linuxTimer.CycleOut接到rateGroupDriverComp.CycleIn并由RateGroupDriver分频驱动三个速率组。其分频器配置在 RefTopology.cppSvc::RateGroupDriver::DividerSet rateGroupDivisorsSet{{{1, 0}, {2, 0}, {4, 0}}};即以1Hz 时钟为基准分频出 1Hz、1/2Hz、1/4Hz三条节拍偏置均为 0分别对应三个 ActiveRateGroup。每个速率组的成员槽位在 topology.fpp 中分配例如rateGroup11Hz调度 SG1、SG2、遥测发送tlmSendRun、文件下传、系统资源采样、命令队列、命令分发等rateGroup21/2Hz调度命令序列器、SendBuffApp、SG3/SG4、DpDemo、文件管理、WASM 序列器定时rateGroup31/4Hz调度健康检查、SG5、BlockDriver、缓冲区管理、数据产品Dp相关组件与事件处理。被调度组件的schedIn即由这些速率组周期调用。该机制保证遥测、健康监控、文件传输等任务以确定性的节拍运转。5.4 启动与拆除流程RefTopology.cpp 中setupTopology依次执行自动生成的初始化initComponents、setBaseIds、connectComponents、configComponents、regCommands、参数装载、startTasks随后做项目特定配置rateGroupDriverComp.configure(rateGroupDivisorsSet); rateGroup1Comp.configure(rateGroup1Context); // ... cmdSeq.allocateBuffer(0, mallocator, 5 * 1024); // 命令序列缓冲 5 KiB FileHandling::fileUplink.configure(.); FileHandling::fileDownlink.configure(.); FileHandling::prmDb.configureSandbox(.); // 文件访问沙箱限定在工作目录teardownTopology则负责停止任务、回收命令序列缓冲并拆除组件保证 Ctrl-C 退出时资源释放干净。6. 用集成测试验证 Ref 应用Ref 部署附带了一套可复用的集成测试参考实现位于 TestDeploymentsProject/Ref/test/int/ref_integration_test.py演示了 F´ 集成测试的标准写法test_is_streaming在 10 秒内断言收到至少 5 条遥测更新并验证Ref.sendBuffComp.SendState通道的值为SEND_IDLE——这是飞行软件在正常流式输出的快速冒烟检查test_send_command通过send_and_assert发送一对 NO-OP 命令验证命令的发送、分发与回执全链路事件过滤通过CdhCore.events.SET_EVENT_FILTER命令按严重级别COMMAND、ACTIVITY_LO/HI、WARNING_LO/HI、DIAGNOSTIC启用或禁用事件上报测试EventManager的过滤能力。配套的还有 test_cmd_parameter.py、序列文件 test_seq.seq 与 int_config.json 等可作为你自己的部署工程编写集成测试的模板。7. 快速提示与下一步学习原文档总结了三条高频实用提示GDS 默认端口为 50000。更多参数可执行fprime-gds --help查看例如自定义端口、串口/回环地址等fprime-util build可以只构建单个组件适合在大型部署中仅重编译所修改的组件以节省时间fprime-util generate可附带工具链参数用于快速生成交叉编译目录例如fprime-util generate raspberrypi即生成树莓派交叉编译目标需已配置对应工具链。进一步熟悉 F´ 的工程化开发流程可以继续阅读 HelloWorld 教程若想深入理解 Ref 部署每一张拓扑连接图指挥、遥测、日志、参数、时间、健康、速率组、地面、驱动的细节可直接研读 Ref 部署 SDD 文档 及其配套的 TestCases.txt。8. 小结通过本文你已经掌握了在 Linux/macOS 上以零嵌入式硬件方式运行 F´ 参考应用的完整链路clone → venv → pip install → fprime-util generate → fprime-util build → fprime-gds也理解了 Ref 应用背后由组件实例、Base ID、三级速率组与 TCP/IP 地面通信构成的拓扑骨架以及Main.cpp中-a/-p参数与 Ctrl-C 优雅退出的实现细节。Ref 不仅是快速验证 F´ 安装的试验台更是一份可直接参照的部署工程范例——从 CMakeLists.txt 的构建规范到 ref_integration_test.py 的测试范式都值得在真实 F´ 项目中复用。【免费下载链接】fprimeF´ - A flight software and embedded systems framework项目地址: https://gitcode.com/GitHub_Trending/fpr/fprime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表