软件介绍
-
FMT (全称Firmament) 是首个基于模型设计 (MBD, Model-based design) 的开源自驾仪软件系统。可被用来快速构建无人机,无人车,无人船,机器人等无人控制平台的控制系统。FMT结合当前最先进的基于模型设计和3D仿真技术,致力于打造下一代的开源自驾仪系统。
FMT 项目主要由以下部分构成:
-
FMT-FW: 飞控嵌入式软件框架。由C语言编写,包含飞控的核心软件,驱动以及功能模块等。
-
FMT-Model: 飞控算法模型框架。包含了基于 MATLAB/Simulink 实现的算法模型,如导航,控制,状态机,被控对象模型等。算法模型通过自动代码生成可以合入到 FMT-FW中,从而构成完整的飞控系统软件。
功能特点
- C语言实现的轻量级、高实时、高性能的嵌入式软件系统,支持C/C++混合编译。
- 基于国产RTOS RT-Thread, 拥有活跃的开源社区以及丰富的第三方组件。
- 支持 MBD(Model-based Design)全流程开发 。MIL,SIL,HIL,SIH仿真支持。
- 基于Matlab/Simulink实现的算法和模型库,图形化编程,支持仿真和自动代码生成。
- 支持Mavlink协议以及开源地面站QGroundcontrol。
- 支持广泛使用的开源硬件Pixhawk/Pixhawk4等,以及QEMU模拟器。
- 采用跨平台的开发工具链,支持Win/Linux/Mac等平台的开发。
FMT-FW 软件框架
-
FMT-FW采用分层设计模式,
各个层级代码功能如下:
Target: 该目录存放各个目标平台的相关代码,比如外设驱动,板级相关文件等。如果要将FMT移植到一个新的硬件平台,那么只需要实现该目录下的文件。
Driver: 该目录存放IO驱动设备文件(注意:这里指的不是外设驱动)。IO驱动是指如传感器,Flash等其它板载芯片的驱动。
HAL: 该目录为硬件抽象层,为通用/抽象设备提供统一的上层接口。这样将大大方便软件的移植,也降低了上层与驱动之间的耦合。
RTOS: 该目录存放实时操作系统的代码,目前是存放RT-Thread的代码。
Middleware: 该目录存放中间层代码,包含FMT核心的功能和算法模块以及一些三方库。其中Modules为FMT组件代码,如基于发布/订阅模式的跨线程通信模块uMCN,分布式参数模块,分布式实时日志模块Mlog等。Models包含核心算法模块,如导航系统,控制系统等。算法模块可以是由Simulink模型自动生成的代码,也可以是手动编写的C/C++代码,或者是移植的算法,如PX4的EKF。
Task: 该目录包含FMT的顶层应用功能。每个Task通过调用Middleware中的模块,负责特定的业务逻辑。如task_vehicle负责被控对象整体控制的相关功能,包括导航,状态机,控制等。task_comm负责基于mavlink与地面站进行通信的功能。如不需要使用相关功能,则可以将对应的task注销,或者通过添加新的task来增加新的功能。
FMT-Model 软件框架
-
FMT-Model是基于MATLAB/Simulink搭建的一套MBD的开发框架。FMT-Model作为一个基础平台,提供了MBD开发所需要的基础组件,从而可以更方便、快捷的搭建算法模型。搭建好的模型可以进行MIL(Model-in-the-loop)仿真来快速验证算法,然后通过自动代码生成将算法模型一键部署到飞控(FMT-FW)上。反过来,在实际的测试以及仿真中采集真实的测试数据导入到FMT-Model中进行开环仿真,通过日志数据获取算法模型所有内部状态从而进行算法的性能调优和Bug分析。
FMT-Model各部分功能模块介绍如下:
Utils, Scripts: 该模块包含用MATLAB写的一些帮助脚本,如日志解析,传感器校准,数据分析&绘制等。
Model Library: 该模块包含FMT Toolbox,其完全基于Simulink基础模块编写,实现了基础的模型库,如Math,Quaternion,Filter,Transformation等。后续也会持续扩充FMT Toolbox。
Simulation: 为左边绿色模块框选的区域,包含一些基础仿真的模型,如MIL(模型在环仿真)和开环仿真模型。
Algorithm Model: 这个是FMT-Model的核心算法模型库,主要包含四大类别的算法模型:
-
INS :惯性导航系统。通过多种传感器数据融合算法,获得机体的所有状态信息,如姿态,速度,位置,传感器误差等。
-
FMS:飞行管理系统,或称状态机。负责逻辑控制和相关指令生成等,同时还负责安全相关的一些功能。
-
Controller:控制器。根据FMS的指令和INS的当前状态输出作动器指令,控制目标机体。
-
Plant:被控对象模型。包括动力学模型,作动器模型,传感器模型等。读取控制器输出的作动器指令,输出被控对象的状态信息,并通过状态信息生成模拟的传感器数据。通过对真实被控对象的参数建模和辨识,以建立接近于真实水平的被控对象模型。
FMT-Model作为MBD的基础框架,承载算法模型库,并为其提供必要的模型库和工具。今后结合社区的力量,使得算法库得到扩充,具备越来越多的算法模型(基于不同的算法或针对不同的被控对象)。当我们需要构建某个控制系统,如小车,那么首先去算法库中看看有没有可以满足需求的算法模型,有的话则直接拿来使用。若没有,则可以寻找类似的模型进行适当修改,或者从头搭建。新建立的算法模型可以再贡献给社区,让其他人也从中受益,这样就形成了一个大家互利互惠的良好生态。
之所以算法库采用Submodule这种分布式结构,是考虑到以后算法模型可能由不同的组织和个人贡献,通过submodule这种方式,可以更容易地将其他人的模型链接到FMT-Model中。当然,FMT官方团队也会维护一些算法模型,比如目前这套Base系列模型就是针对多旋翼开发的,以及未来会开发更多的针对不同被控对象的算法模型。
-