FMT 开源飞控 - RT-Thread 与 SCons 构建系统深度解析

FMT 开源飞控 - 移植注意事项 这很可能是指多旋翼飞行器(MAV,Multi-rotor Aerial Vehicle)的板载计算机(OBC,On-Board Computer)的初始化。:这可能是指多旋翼飞行器的地面控制站(GCS,Ground Control Station)的初始化。这个组件负责记录飞行过程中的各种数据,如位置、速度、传感器读数等,以便于后续的数据分析和飞行性能评估。并把RTT的IO设备管理器总线驱动组件的include/目录下的头文件分开到各个子目录下面。配置遥控的协议,通道数,采样时间,通道数值范围等。 阅读详情

1. 从零认识 FMT 与它的“左膀右臂”

如果你刚接触无人机飞控开发,面对 PX4、ArduPilot 这些庞然大物,可能会觉得门槛有点高,代码结构复杂,想动点东西都无从下手。我第一次接触 FMT(Firmament)开源飞控时,感觉像是发现了一个新大陆。它给我的第一印象是“清爽”——代码结构清晰,文档(虽然当时还不算特别完善)努力在讲人话,最关键的是,它选择的技术栈非常有意思:RT-Thread 操作系统和 SCons 构建系统。

简单来说,FMT 是一个基于**模型设计(MBD)**理念打造的开源自驾仪平台。你可以把它想象成一个乐高积木套装。它的核心框架(FMT-Firmware)提供了标准的接口和模块化的结构,而具体的算法,比如怎么让飞机保持平衡(控制算法)、怎么知道飞机现在的位置和姿态(导航算法),都可以用 Simulink 像搭积木一样画出来,然后一键生成 C 代码,“咔哒”一声嵌入到框架里。这种方式特别适合算法工程师和需要快速迭代验证的团队,能把更多精力放在算法本身,而不是纠结于底层驱动和系统调度。

那 RT-Thread 和 SCons 在这其中扮演什么角色呢?你可以把 RT-Thread 看作是飞控这个“机器”的“神经系统”和“调度中心”。它是一个国产的、开源实时的操作系统,负责管理飞控软件里所有的任务(比如读取传感器、计算控制指令、记录日志、通信等),确保它们能在正确的时间、以确定的优先级被执行,这对于飞行安全至关重要。我之前用过一些裸机或者简单调度器的飞控,当任务多起来的时候,管理和调试简直就是噩梦,而 RT-Thread 提供了线程、信号量、消息队列这些标准组件,让多任务开发变得规范很多。

SCons 呢,则是这个项目的“高级建筑工程师”兼“自动化流水线”。我们平常写 C 项目,可能用一个简单的 Makefile,但当项目像 FMT 这样庞大,有几十上百个源文件,依赖关系复杂,还要为不同硬件(比如 ICF5、Pixhawk)生成不同配置的固件时,手写和维护 Makefile 就非常痛苦了。SCons 基于 Python,你用 Python 脚本描述构建规则,它就能智能地分析文件依赖,只编译改动过的文件,极大提升编译效率。在 FMT 项目里,SCons 不仅仅是调用编译器,它还承担了系统配置解析、组件裁剪、链接脚本生成等一系列繁重工作。可以说,理解了 SCons 在 FMT 中的运作,你就掌握了定制和移植 FMT 飞控的钥匙。

2. 揭秘 SCons:不止于“替代 Makefile”

很多人刚看到 SCons,觉得它就是另一个构建工具,和 CMake、Make 差不多。我在最初移植 FMT 到新硬件平台时,也是这么想的,结果踩了不少坑。后来才发现,SCons 在 FMT 项目里被用到了极致,它深度参与了构建、配置、裁剪的整个生命周期。

2.1 SCons 构建的核心逻辑

FMT 的代码根目录下,你会找到一个 SConstruct 文件,这是 SCons 的“总入口”。它不像 Makefile 那样写一堆晦涩的规则,而是像一段 Python 程序。我们来看一段简化后的逻辑:

# 导入必要的模块和工具
import os
from building import *

# 1. 加载构建选项和配置
env = DefaultEnvironment()
opts = Variables('config/defconfig.py')
env.Append(ENV = os.environ)

# 2. 处理命令行参数,比如指定目标硬件
AddOptions(opts)
target = ARGUMENTS.get('target', 'icf5')
print('Building for target: %s' % target)

# 3. 根据目标加载对应的硬件描述(BSP)目录
bsp_path = os.path.join('target', target)
SConscript(os.path.join(bsp_path, 'SConscript'), exports='env', duplicate=0)

# 4. 加载飞控核心框架的构建脚本
SConscript('src/SConscript', exports='env', duplicate=0)

这个过程很有意思。当你执行 scons target=icf5 时,SCons 会先解析总控脚本,然后通过 SConscript 函数“递归”地进入各个子目录(比如 target/icf5/ 和 src/)。每个子目录里也有自己的 SConscript 文件,负责收集本目录下的源文件、设置特有的编译选项。最后,所有信息汇总回顶层,生成最终的编译命令。

这种“递归式”的构建描述,非常契合飞控的模块化设计。传感器驱动、通信模块、算法模型,每个都是独立的目录,有自己的构建脚本,互不干扰。你想添加一个新模块?很简单,在对应的 SConscript 里加几行,告诉 SCons 这个新模块的源文件在哪、依赖谁就行。

2.2 依赖分析与增量编译的威力

SCons 一个让我爱不释手的功能是它强大的依赖分析。它不光看源文件(.c)和头文件(.h)的修改时间,还会分析 #include 语句。这意味着,如果你只修改了一个头文件的内容,所有包含了这个头文件的源文件都会被自动识别为“需要重新编译”。这避免了手动清理再编译的麻烦,也杜绝了因头文件更新未触发重编导致的诡异 bug。

在实际开发中,我经常一边改代码一边测试。用传统的 Makefile,有时忘了 make clean,跑出来的结果不对,排查半天才发现是旧的目标文件在作祟。用 SCons 后,几乎没再遇到过这个问题。执行 scons -j8(-j8 表示用8个线程并行编译),它总能精准地只编译必要的部分,编译速度非常快。对于 FMT 这种规模的项目,全量编译可能需要一两分钟,但增量编译往往几秒

RT-Thread新手必看:FMT飞控移植中的5个常见坑及解决方案 本文针对RT-Thread新手在移植FMT开源飞控时遇到的5大核心挑战,提供了深度解决方案。内容涵盖SCons构建系统配置、RT-Thread版本API兼容性处理、BSP与设备驱动适配、TOML系统配置解析以及算法模块集成调试,帮助开发者高效避坑,成功完成飞控移植。 阅读详情

相关推荐

飞控FirmamentAutopilot介绍

飞控FirmamentAutopilot介绍

one__leaf的博客 1905

FMT(基于rtthread)开源代码编译 win10下编译环境搭建及编译

FMT(基于rtthread)开源代码编译 win10下编译环境搭建及编译 什么是Firmament? Firmament (FMT) 是一款基于模型设计 (Model-Based-Design, MBD) 的开源自驾仪,可被用来快速构建无人机,无人车,无人船,机器人等平台的控制系统。 系统主要由两部分构成. FMT-Firmware: 一个基于C/C++开发的稳定、高性能的嵌入式系统. FMT-Model: 一个基于MATLAB/Simulink开发的仿真框架以及算法库. 昨天得知FMT开源飞控项目已经开

weixin_45786595的博客 2872

AWTK在windows下搭建环境

一,开发环境 系统环境:win7 或者 win10 开发环境:vs2015(或者以上),python2.7(或者3.7等其他版本),scons 自动化构建工具,vscode(可选)

博客 2140

Firmament (FMT):基于模型设计的开源飞控,如何重塑无人机开发流程?

Firmament (FMT) 是一款基于模型设计的开源飞控系统,它通过图形化建模与自动代码生成,将开发者从繁琐的底层编码中解放出来。其核心优势在于提供从模型仿真、软件在环到硬件在环的完整验证闭环,大幅提升算法开发效率和系统可靠性,降低了无人机与机器人系统开发的门槛。

weixin_29201933的博客 457

Firmament (FMT):以模型驱动重塑开源飞控开发范式

本文深入探讨了Firmament(FMT)如何通过Model Based Design(MBD)方法革新开源飞控系统开发。FMT的三层架构(FMT-FW、FMT-Model、FMT-Sim)显著提升开发效率,实现算法快速建模、仿真验证与自动代码生成。通过与传统飞控的实战对比,展示了FMT在性能、开发体验上的优势,并提供了MBD开发全流程指南与真实项目案例,助力开发者高效构建无人机控制系统。

weixin_33725722的博客 216

基于matlab的IMU计算源码-fmt_user_guide_cn:FMT中文用户指南

基于matlab的IMU计算源码 Firmament Autopilot 概述 Firmament (FMT) Autopilot 是首个基于模型设计 (Model-Based Design, 简称MBD) 的开源自驾仪。FMT 项目从 开源飞控发展而来。FMT 包括嵌入式一个主要用C语言写的嵌入式飞控系统以及基于 Matlab/Simulink 开发的算法模型库和仿真框架。 基于FMT平台可以更快速的开发和验证的飞控算法,无需手动编写嵌入式代码,只需要在Simulink中通过图形化的方式设计算法模型并一键生成代码然后合入飞控。 项目源码地址: 为什么使用 FMT 基于模型设计是一种数学及可视化的设计方法,通过图形化的方式设计复杂的飞控或者其它控制系统。目前大部分开源飞控系统的研发手段还是采用传统的手动编码的开发模式。这种方式固然有其优势,但是其劣势也越来越明显。特别当系统变得越来越庞大,功能越来越复杂,使用手写的算法模块变得越来越难以维护,也不可避免的造成代码的安全性和可移植性越来越差。 FMT 的核心算法使用 Simulink 搭建,继承了 MBD 开发模式的诸多优点。基于 FMT

MEG预处理-Brainstorm

Brainstorm下载和安装 去Brainstorm官网进行下载:打开网页后,点击左侧Download;在跳出来的界面中进行简单的注册,注册完成后可以进行下载 解压后得到“brainstorm3”的文件夹,里面包含Brainstorm工具包的所有文件,把这个文件夹放在某个路径如"E:\matlab_tools\brainstorm3"即可 同样在某个路径建立空的文件夹命名为:brainstorm_db用于工具包运行过程中自动存储生成的文件,所以这个文件中生成的数据不要手动移动删除 在Matlab中,把.

AxeChen的博客 6124

基于ESP32-C3的便携式血氧仪硬件与算法实现

血氧饱和度(SpO₂)监测是生理参数无创检测的核心技术之一,其原理基于光电容积脉搏波(PPG)信号中红光与红外光吸收比值的动态变化。该技术依赖高精度模拟前端、稳定光学激励及实时数字信号处理能力,在消费级健康设备中面临功耗、体积与测量鲁棒性的多重约束。ESP32-C3凭借集成LEDC、12位ADC与低功耗双核架构,成为PPG终端的理想主控平台;结合定制化指夹式光学探头与比率法血氧算法,可实现非诊断级但趋势可靠的日常健康监测。本文围绕硬件电路设计、电源管理策略与嵌入式信号处理流程展开,覆盖从LED驱动、跨阻放大

weixin_29025501的博客 132

3D打印切片软件Cura及CuraEngine原理分析

引言         年初开始进入3D打印行业,受命以Cura为基础,研发一款自主的3D打印切片软件。         自主研发要取其长处,补其不足,首先自然是要搞清楚Cura到底做了什么,读Cura的代码是必需的。我一向都觉得比起自己写代码来,读别人的代码是一个漫又而痛苦的过程,读者的思想与写者总有偏差,往往又无法验证自己的猜想是否正确,只叹人脑不是电脑,无法把眼前的代码从头到尾执行一遍...

AiDiShengDeXiaoWu的博客 4420

Apollo control模块横向控制原理及核心代码逐行解析

看完这篇文章,你会对apollo横向控制有一个整体的概念

weixin_39199083的博客 2万+

手把手教你调试eDP接口:Main Link信号异常、AUXCH通信失败怎么办?

本文提供了一份详尽的eDP接口调试实战指南,重点解决Main Link信号异常与AUXCH通信失败两大核心难题。文章系统介绍了从工具准备、信号完整性分析(眼图、抖动测量)到AUXCH协议解码、HPD信号检查的完整排查流程,并分享了链路训练诊断与常见避坑技巧,帮助硬件工程师高效定位并解决显示问题。

Jerry的专栏 828

从养虾到退坑:OpenClaw 卸载不留残留,一步到位

文章摘要: 本文提供OpenClaw软件的完整卸载指南,适用于Windows、macOS和Linux系统。内容包含卸载前的数据备份步骤(配置文件、日志、插件列表),以及详细的卸载脚本。Windows版通过批处理文件删除程序文件、注册表项和环境变量;macOS/Linux版则提供shell脚本,涵盖服务停止、软件包卸载、配置清理等步骤。特别强调要删除所有用户数据(包括多用户环境),确保系统无残留。文末建议重启计算机以使更改生效,实现"一步到位"的彻底卸载。

一键难忘的博客 298

AIPex:AI + 自然语言驱动的浏览器自动化扩展

AIPex是一款革命性的Chrome扩展,通过AI技术实现自然语言驱动的浏览器自动化。它支持30多种自动化工具,包括智能标签页管理(分组、切换、批量操作)、页面内容提取(文本、链接、元数据)、交互元素操作(点击、滚动)以及表单智能填写等功能。用户只需用自然语言下达指令,即可快速完成复杂的浏览器操作,大幅提升工作效率。AIPex特别适合需要处理大量重复性网页操作的用户,如数据分析师、产品经理等。

blues_C的博客 1127

SillyTavern 酒馆在 Mac 和 Linux 上的部署教程(含启动器安装方法)

SillyTavern 是一个支持多种大模型聊天接口的本地前端项目,适用于 MacOS 和 Linux 系统。本文提供了两种部署方式:手动安装和使用 SillyTavern Launcher 安装器。手动安装需要先安装 Git 和 NodeJS,然后克隆项目源码并运行启动脚本。使用 Launcher 则更为简便,适合新手用户,能够自动安装依赖和配置环境。部署完成后,用户可以通过浏览器访问本地服务器,加载角色卡片并连接大模型 API,享受二次元角色扮演聊天的乐趣。无论是开发者还是终端用户,都能轻松完成 Sil

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3393

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: Metal版本演进与iOS/macOS兼容性全解析
下一篇: EtherCAT主站开发选型指南:为什么SOEM+QT组合能搞定80%的工业控制场景?
algae
博客等级 码龄19年 1378粉丝 1719原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值