飞控FirmamentAutopilot介绍

article/2025/9/6 2:16:50

Firmament特色

  • 使用 RT-Thread 嵌入式操作系统,Fatfs 文件系统,完整的系统功能支持 (如跨进程通信,文件管理,参数系统等)

  • 基于 Pixhawk 硬件平台开发,完美支持 Pixhawk 硬件

  • ADRC 控制和 PID (串级) 控制

  • 支持 Mavlink 协议 (QGC 地面站)

  • 支持 Gazebo 硬件在环 (HITL) 仿真

  • Msh 指令系统,提供丰富以及可扩展的系统指令

  • Log 日志系统,方便抓取飞行日志信息,并提供相应的日志查看工具。

  • 基于最小二乘法的最优椭球拟合校准算法 (可校准零偏误差缩放误差非正交误差),可用于磁力计和加速度计的校准。

整个系统除了Pixhawk之外,还有一些外接的电子设备,如无刷电机,GPS,电调,数传,RC接收机,Lidar-Lite激光雷达等。整体的系统框架图如下图所示:

【软件设计】

软件采用分层结构设计,如下图所示,从底层到上层分别是Driver层,RTOS(RTT + Fatfs),HAL硬件虚拟层,Framework层和应用层。

一、Driver层

        Driver层实现了Pixhawk板载的所有硬件设备的驱动,如传感器设备(陀螺仪,加速度计,磁力计,气压计等),总线设备(UART, I2C, SPI等),USB,电机驱动,SD卡驱动,GPS驱动,LED灯以及一些板载设备的驱动。 各个驱动以Device的形式向RTT进行注册,并且提供各自的init(), read(), write, ioctrl()函数供上层调用。这里仅以hmc5883磁力计的驱动举例说明驱动程序的一般设计步骤。

- 设备初始化函数

        如下为hmc5883的初始化函数。首先对设备的功能函数进行函数指针赋值,这里定义了init(), read()和ioctrl()三个函数。然后向RTT注册名为hmc5883的驱动设备,上层可以通过查找设备名的方式来获取该驱动设备。接下来就是给hmc5883设置对应的总线设备。这里 hmc5883使用的是i2c通信,所以初始化中会为其查找对应的i2c设备。

- init()函数

Init()函数主要做一些芯片的初始化的工作,包括寄存器配置等。

- read()函数

read()函数实现设备数据读取的功能,如原始磁场数据和标定后的磁场数据读取。

- ioctrl()函数

Ioctrl()函数主要实现一些设备的配置功能,如设置测量磁场的范围,采样频率等。

二、RTOS层

        RTOS采用RT-Thread嵌入式操作系统,它的功能强大,除了提供基本的线程调度,内存管理,同步等基本功能外,还提供了如msh的shell系统,device设备驱动系统,使得系统的整体架构更加清晰,功能也更加完善。

三、HAL层

        HAL层主要是对底层驱动设备进行进一步封装,将具体的设备抽象为一个类别的设备。以串口设备为例,不同的硬件平台,串口的底层驱动会有差异,通过HAL层,将串口设备封装为统一的接口,这样当系统移植到不同平台的时候,上层代码不需要做任何改变,而只需要将对应底层驱动进行简单替换就行。这将大大降低系统移植的复杂程度。

四、Framework层

        Framework层实现了飞控设备的主要功能,如姿态估计,位置估计,控制器通信,日志管理等等。可以说,这一层是整个系统的核心,大部分的功能模块都在这一层来实现。

五、Application层

        应用层是将飞控的各个大的功能进行分割,变成一个个小的功能每个功能在系统中为一个单独的线程,每个线程负责执行自己的任务,并且跟其他线程通过IPC进行通信。Vehicle线程具有最高优先级,执行周期为1ms。其负责实现无人机飞行相关的所有功能,如状态估计和电机的控制。

【启动流程】

        下面介绍一下系统的启动流程. 启动流程沿用RTT提供的原始结构。首先在rtthread_startup()函数中进行RTOS的一些初始化,然后进入到rt_application_init()中。 在这个函数中会建立一个init的初始线程,在这个线程中,会对飞控各个模块进行初始化的工作。在初始化完成之后,会根据Application层的定义,建立各个线程,并唤醒,最后将init线程自己给销毁掉,避免不必要的内存消耗

FMT Model

        FMT Model 为 基于 Matlab/Simulink平台编写的一个完整的仿真模型框架和算法模型库。支持模型在环仿真 (Model-in-the-loop Simulation, MIL),软件在环仿真 (Software-in-the-loop Simulation, SIL) 和开环仿真 (Open-loop Simulation)。

        FMT Model 的模型库包括一套完整的无人机算法模型。可以分为导航系统,飞行管理系统,控制系统和被控对象模型四个部分。每个部分包含多种类的算法模型,以支持不同的算法和被控对象。

其架构如下图所示:

        

        其中算法库通过Github Submodule的方式进行组织,用户可以用来独立维护自己的算法模型,并添加到FMT Model的仿真框架中。FMT提供种类丰富而且功能完善的仿真模型,可以很容易的基于已有模型或者提供的模型模板进行二次开发。

FMT Model 算法模型库主要由四类模型组成:

· INS : 惯性导航系统。通过多传感器融合算法得到被控对象的状态信息(如姿态、速度和位置等)以及各个传感器的健康状况信息等。

· FMS : 飞行管理系统。主要负责飞行逻辑相关的控制,内部主要由状态机实现。包括飞行模式控制,自动起飞降落,轨迹跟踪控制,安全检测等功能。

· Controller : 控制器模型。基于 FMS 输出的指令信息和 INS 输出的状态信息进行速度环、姿态环和角速度环的控制。控制器的输出经由控制分配将控制信号转成作动器(电机)信号。

· Plant : 被控对象模型,如无人机,无人车/船,机器人等。对象模型包括了动力学模型,作动器模型,环境模型和传感器模型。通过对不同的被控对象进行科学的建模,以达到对不同被控对象进行闭环仿真的目的。

        可以看到由于引入了被控模型Plant,从而构成了一个完整的闭环。Plant模拟真实世界中的被控对象,如无人机,无人船等,它接收控制器的控制信号,然后更新状态信息(姿态,速度,位置等)并由其内部的传感器模型生成传感器数据供导航模型进行数据融合。

        Plant输出状态信息供Virtualization可视化模块进行3维显示。可视化模块可以使用Simulink自带的Simulink 3D,也可以使用外部的,如UE4,Webots,Gazebo等。

        通过外接遥控输入(Pilot Cmd)或者自行构造输入指令,我们就可以像操控真机一样来对整个系统进行完整功能的仿真。仿真完成后,我们可以通过Simulink Data Inspector来查看任意的数据。

仿真能力

        模型在环仿真和开环仿真,可以大大简化调试难度并优化算法,也更容易发现设计中的问题。特别是开环仿真,能提供“黑匣子”一样的功能,仅需记录少量的模型输入数据,即可通过开环仿真得到算法模型输出和所有内部信号的数据,方便问题定位和算法优化,大大提高测试效率。

代码生成

        基于Simulink开发的模型,其代码生成功能已经非常成熟,生成的代码特别清晰,且比一般的工程师写的代码更好。可以大大提高编码效率,并减少因人为编码而导致的错误。

文档自动化

        基于模型的设计可以帮助我们实现文档自动化,大部分文档可以让计算机帮助我们完成。

遥控输入

        遥控信号通过Pilot Cmd总线将数据传输给FMS模型,再由FMS来进行处理。遥控信号的输入源包括:

  • - Joystick: 通过手柄输入。可以通过接入USB手柄(比如XBox游戏手柄)来产生遥控信号。

  • - Mavlink: FMT飞控通过Mavlink将飞控端的遥控信号传给Simulink。

  • - Fake: 通过Simulink滑块构建遥控信号。

  • - None:无遥控信号输出(使用GCS Cmd进行控制。因为当遥控信号无效时,地面站信号GCS才会有效)

GitHub - Firmament-Autopilot/FMT-Firmware: FMT Autopilot 嵌入式系统

开源飞控StarryPilot无人机的制作 - 腾讯云开发者社区-腾讯云 (tencent.com)

飞控FirmamentAutopilot介绍

科研福利|基于模型设计的飞控FirmamentAutopilot内测招募!-爱码网 (likecs.com)


http://chatgpt.dhexx.cn/article/ff0nMQ3p.shtml

相关文章

大疆A3飞控使用|飞控配置

大疆A3飞控使用|飞控配置 大疆A3飞控介绍总体特性飞行特性外围设备保护功能SDK拓展拓展功能 A3 飞控使用配置连接飞机基本设置机架安装遥控器电调动力配置感度电池 控制参数调试基础感度动力带宽高级感度灵敏度控制器性能参数 大疆A3飞控介绍 全新A3系列飞控系统结合安全可靠和…

开源飞控的现状

无人机能被快速普及,很大程度上是得益于开源飞控的发展,因为困扰着无人机发展的关键设备是自动驾驶仪。那么,开源飞控是什么?又是如何发展过来的? 在纷繁复杂的无人机产品中,四旋翼飞行器以其结构简单、使…

飞控和飞控固件的讲解

本人目前是一名大二学生,调了不少时间的多旋翼,飞控是很重要的一环。下面我将讲解一些我对飞控和固件的浅显理解。 1.飞控固件 目前来说,主流开源的飞控有两类:PX4和APM。从我自己的使用经验来看:对于你要使用多旋翼…

无人机飞控三大算法汇总

无人机飞控三大算法:捷联式惯性导航系统、卡尔曼滤波算法、飞行控制PID算法。 一、捷联式惯性导航系统 说到导航,不得不说GPS,他是接受卫星发送的信号计算出自身位置的,但是当GPS设备上方被遮挡后,GPS设备无法定位了。…

python脚本王者荣耀自动刷金币

基于ADB(Android Debug Bridge) 1、下载ADB下载地址 下载之后解压文件随便放置到那个文件夹都可以 需要将adb.exe所在的文件路径添加到环境变量中在CMD中输入adb显示如下,说明adb没有问题了 2、手机进入开发者模式 这个进入开发者模式比…

Python实现王者农药自动刷金币

想写一个游戏的辅助脚本(或者外挂? )很久了。这几天工作、考试都完成的差不多了,闲下来写一个王者荣耀的刷金币脚本,供大家参考。 原理 很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不…

Python轻松制作王者荣耀自动刷金币脚本

由于每次通过冒险模式都会有金币,而这个动作十分重复,连图像识别都不需要,可以考虑使用程序代替人工。 简单的说是重复以下的步骤: 界面打开至挑战关卡:陨落的废都 - 魔女回忆 【点击下一步】 点击开始闯关 进入挑…

王者荣耀刷金币C/C++语言脚本

一.开发环境: (1)本脚本适用于安卓游戏区,需要真实安卓手机。 本人用的是viov x9(1920*1080),如果代码运行有差错,是因为屏幕大小问题,请手动调试tap x y参数。 (2)手机需开启USB调试模式和模…

Python 实现王者荣耀自动刷金币

开发者(KaiFaX) 面向全栈工程师的开发者 专注于前端、Java/Python/Go/PHP的技术社区 作者 | 大瑞大 来源 | blog.csdn.net/qq_42882717/article/details/112345924 正文 想写一个游戏的辅助脚本(或者外挂? )很久了。这几天工作、…

用Python实现自动刷王者荣耀金币,这简直不要太爽了

相信有很多小伙伴都喜欢玩王者荣耀吧,王者里边有很多英雄购买都是需要金币的,并且金币还可以抽奖。今天,你就可以实现王者的金币自由了,我把王者刷金币的教程分享给大家,记得学起来。 一、原理 我想,游戏的…

python脚本 游戏赚金币_Python实现王者荣耀刷金币脚本功能

王者荣耀很多朋友都想买脚本和挂之类的,想更加容易的获得金币等可以在游戏里买英雄等,Python在我们开发中也很重要,今天给大家带来的是用Python语言写一个关于手游王者荣耀刷金币的脚本,有兴趣的朋友参考学习下希望能帮助到大家。…

30行Python代码刷王者荣耀金币

原理 王者荣耀的冒险模式里有个挑战模式,第一次过关可以获得比较多的金币,后面重新挑战还是会获得少量金币,这不算是bug,只有你不嫌烦手动蛮力也可以刷金币。 推荐关卡:陨落的废都 - 魔女回忆 此关卡使用纯输出英雄20…

王者刷金币(周上限)(自用)()

windows10adbpython 首先说原理,利用adb实现简单的点击,用python循环,文末打包下载; 首先配置手机端 设置进入开发者选项,不同手机进入方法自行百度 USB调试和允许通过usb调试修改权限或模拟点击(点开&a…

王者荣耀刷金币(python+adb实现)

想写一个游戏的辅助脚本(或者外挂? )很久了。这几天工作、考试都完成的差不多了,闲下来写一个王者荣耀的刷金币脚本,供大家参考。 脚本编写及使用教程 原理环境配置刷金币步骤测试 原理 我想,游戏的脚本应该都是差不…

【脚本】Python+adb王者荣耀闯关自动刷金币

文章目录 1 工具2 原理3 准备4 完整代码5 声明 1 工具 pythonadb(安卓调试桥)abd基础教程 2 原理 使用adb工具模拟点击手机 adb shell input tap x y获取手机坐标的最简洁方法 打开 开发者模式 → 开启 指针位置 3 准备 作用:简化代码…

Python-王者荣耀自动刷金币+爬取英雄信息+图片

####前提: 本文主要功能是: 1.用python代刷王者荣耀金币 2.爬取英雄信息 3.爬取王者荣耀图片之类的。 (全部免费附加源代码) 思路: 第一个功能是在基于去年自动刷跳一跳python代码上面弄的,思路来源陈想大佬,主…

【Python小脚本】实现王者农药自动刷金币啦~啦啦啦走跟我一起组队~

前言 🚀 作者 :“程序员梨子” 🚀 **文章简介 **:本篇文章主要是写了自动刷金币脚本啦! 🚀 **文章源码获取 **: 为了感谢每一个关注我的小可爱💓每篇文章的项目源码都是无偿分 享滴&…

各种电容的区别

&#xff08;一&#xff09;陶瓷电容&#xff08;瓷片电容、独石电容&#xff09; 瓷片电容耐压大&#xff0c;独石电容容量大 MLCC用于小功率场景&#xff0c;因为耐压低&#xff08;<100v&#xff09; 瓷片电容 独石电容&#xff08;MLCC&#xff09; -----------------…

电容的耐压值选择---陶瓷电容、钽电容、电解电容

电容的耐压值&#xff0c;在弱电领域主要有4V、6.3V、10V、16V、20V、25V、35V、50V这些档位。上百伏的电容主要用在强电上。耐压值的选择非常非常重要&#xff0c;选错了会有生命危险。 如果把25V的电容&#xff0c;用在50V的电源上&#xff0c;会怎么样&#xff1f;陶瓷电容…

电解电容、钽电容、普通电容

1、电解电容&#xff1a;金属箔为正极&#xff08;铝或钽&#xff09;&#xff0c;与正极紧贴金属的氧化膜&#xff08;氧化铝或五氧化二钽&#xff09;是电介质&#xff0c;阴极由导电材料、电解质&#xff08;电解质可以是液体或固体&#xff09;和其他材料共同组成&#xff…