Firmament (FMT) 开源飞控系统

 

Firmament意为苍穹,希望无人机未来可以自由翱翔于广阔天空。仰望苍穹,也表达了对于未知的探索和科技的敬畏。

 

01


项目介绍

Firmament (FMT) 是一款基于模型设计 (Model Based Design, MBD) 的开源自驾仪,可被用来快速构建无人机,车,船,机器人等的无人控制系统。基于模型设计已经被广泛应用于汽车制造、航空航天等行业,当前采用基于模型设计模式开发的飞控系统凤毛菱角,而 FMT 就是为此而诞生。

FMT结合当前最先进的基于模型设计和3D仿真技术,致力于打造下一代的开源自驾仪系统

FMT 项目主要由三部分构成:

  • FMT-FW: 飞控嵌入式软件框架。包含飞控的核心软件,驱动以及功能模块。

  • FMT-Model: 飞控算法模型框架。包含了基于 Matlab/Simulink 实现的算法模型,如导航,控制,状态机,被控对象模型等。算法模型通过自动代码生成可以合入到 FMT-FW中,从而构成完整的飞控系统软件。

  • FMT-Sim(开发中): 基于3D引擎实现的模拟仿真环境,提供逼真的渲染效果和丰富的仿真场景。

区别于其它的开源飞控,FMT构建了从嵌入式软件,建模与仿真于一体的软件开发平台。

02


功能特点

  • C语言实现的轻量级、高实时、高性能的嵌入式软件系统,支持C/C++混合编译。

  • 基于国产RTOS RT-Thread, 拥有活跃的开源社区以及丰富的第三方组件。

  • 支持MBD(Model-based Design)全流程开发。MIL,SIL,HIL,SIH仿真支持。

  • 基于Matlab/Simulink实现的算法和模型库,图形化编程,支持仿真和自动代码生成。

  • 支持Mavlink协议以及开源地面站QGroundcontrol。

  • 支持广泛使用的开源硬件Pixhawk/Pixhawk4等,以及QEMU模拟器。

  • 采用跨平台的开发工具链,支持Win/Linux/Mac等平台的开发。

03


FMT vs PX4/APM

PX4与APM作为较为成熟的开源飞控代表,有着众多的使用者和开发者。而且因其维护时间长,功能也较为完善。相比之下,FMT起步较晚(最早开始于2016年的Starry Pilot项目)。

虽然FMT“资历尚浅”,但是其整体软件框架清晰,功能也十分强大。相比于PX4/APM这样成熟的飞控系统,由于贡献者众多,所以难免会导致系统变得臃肿,随之而来的是效率的降低以及越来越难维护。

以下是FMT与PX4的一个简单对比(非严格测试):

Pixhawk4 (FMUv5)
FMT
PX4
固件大小
~609 KB
~1908 KB
CPU使用率
~24%
~64%
内存使用率
~42%
~71%
实时性
高 (us)
中 (ms)
导航算法运行频率
500 Hz
200 Hz
控制算法运行频率
500 Hz
250 Hz
状态机运行频率
250 Hz
100 Hz

可以看到,相比与PX4,FMT软件更精简,这体现在更小的代码量,同时也拥有更高的运行效率和更低的内存使用率。所以使用同样的硬件平台,FMT可以运行更为复杂的算法以及更高的频率运行。而PX4的固件已经接近片上Flash的大小(2 MB),所以留给用户可编程的空间已经极为狭小。这意味着你需要对PX4代码足够的熟悉以进行适当的裁剪。

当然,FMT的功能也还在持续开发中,代码量也会进一步扩大,但是让FMT始终保持精简和高效的这个原则是不会改变的。相信在不久的将来,FMT会成为除了PX4/APM外的另一个选择。

04


基于模型开发 (Model-based design, MBD)

基于模型的设计方法目前在汽车、航空航天,电力能源等领域已经广泛使用,而在飞控系统开发中的应用尚处于早期,但是相信未来的趋势会转向于此。目前看到许多eVTOL企业已经开始使用基于模型的设计方法来设计它们的飞控系统。

 

相比于传统的开发模式,基于模型开发的优缺点

优点:基于MBD平台(如Simulink)以图形化方式搭建算法模型,让开发人员可以专注于算法的实现。基于仿真环境可以更高效地调试和优化算法,大大提升开发效率。代码自动生成省去了繁琐的编码步骤,减少了编码过程中可能导致的错误。后期功能维护和修改更加方便,模块复用性也更强。需求和模型实现可追溯,而且有严格的模型检查,让生成的代码鲁棒性更强,安全性更高。

缺点:基于MBD设计的灵活性相比传统编码方式差一些,当然,以Simulink为例,可以通过s函数,m函数或者c函数的方式来增加设计的灵活性。生成代码效率相比手动编码更低???这里我要打个大大的问号,因为从Simulink生成代码的实际表现来看,其生成代码的效率是很高的,甚至要高于大部分的普通程序员,而略低于经验丰富的程序员。成熟的基于模型的设计平台一般费用比较昂贵。

总的来看,基于模型设计的优点是远大于其缺点的,如果将MBD与传统编码方式相结合,相信会是未来的趋势。

当然,如果还是习惯于传统的编码方式,FMT依然支持C/C++的编码方式。

05


仿真调试

基于模型开发的强大之处除了可以自动生成代码,提升开发效率,其仿真调试功能也是非常强大。FMT结合基于模型开发实现了模型在环仿真(MIL),软件在环仿真(SIL),硬件在环仿真(HIL),纯硬件仿真(SIH)和开环仿真(Open-loop Simulation)等。

其中开环仿真为飞控提供了类似“黑匣子”的功能,只需要记录少量的模型输入数据,通过开环仿真即可获得模型所有的日志数据信息

FMT-FW提供了日志和参数模块,可以将模型输入数据和模型参数实时记录下来,然后用于开环仿真,并且开环仿真的结果跟在飞控硬件上的运行结果几乎完全一致。

如下图所示,红色曲线为开环仿真的结果,蓝色曲线为采集的飞控上实际运行的结果(100 Hz采集),两者完全吻合。

因此,通过记录真实的日志数据进行开环仿真,我们可以获取算法模型的所有数据,可更容易来定位问题以及对算法进行优化。因为仿真结果跟实际运行结果是一致的,当我们对算法进行了修改之后,只需要再运行一次开环仿真即可知道这次修改带来的效果,这样大大减小了测试的时间也避免了因为测试失败而可能导致的炸机。

对于嵌入式软件的调试,FMT支持丰富的日志数据,如开机日志,文字日志等,同时也支持J-Link单步调试,方便对代码进行Debug。

 

06


部分功能演示

控制台:

 

MIL仿真:

HIL仿真:

 

07


项目资料

源码地址

https://github.com/Firmament-Autopilot

 

文档地址

https://firmament-autopilot.github.io/FMT-DOCS/

作者:极客石头

在搞事情的路上越走越远。

1条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注