PX4 飞控源码系统框架介绍

摘要:
该部分主要是PX4系统的使用的所有的数据结构的集合部分,各种任务和sensor驱动中需要获取的sensor数据都在此部分,还包含各种运行状态的数据结构。

一、build_px4fmu-v2_default

编译以后生成的文件:内部主要需要在意的就是topics_temporary_header(所有的任务是要的头文件,在创建任务和使用数据结构时可以从该处检索);topics_temporary_sources(系统中所有的任务函数)

二、Cmake

配置文件,主要使用 nuttx_px4fmu-v2_default.cmake。该处主要是关于系统使用的文
件的路径配置,在 PX4 系统所有的.CPP 和.C 文件都是通过在该处进行路径包含的。在需
要自己创建私有任务或者 sensor 驱动程序时需要添加到该处。

三、mavlink

主要负责和地面站QGC通信的协议部分,这部分可以直接调用。分为1.0版本和2.0版本,以后都更新到2.0版本了

四、msg

uORB manger 的缩写:msg。该部分主要是 PX4 系统的使用的所有的数据结构的集
合部分,各种任务和 sensor 驱动中需要获取的 sensor 数据都在此部分,还包含各种运行状
态的数据结构。其中需要注意的是该文件夹下的 Cmakelists.txt,该文档是整个 msg 部分的
配置部分,类似第二部分的 Cmake 中的配置文件一样,在开发者创建任务或者 sensor 驱
动程序时创建对应的数据结构(***.msg)以后,需要把开发者创建的***.msg 添加到
Cmakelists.txt 中,否则编译时识别不到开发者创建的数据结构。
在该部分创建好以后,直接编译可以自动生成相对应的 C/C++下的标准头文件,即在
第一部分所介绍的 topics_temporary_header,在 PX4 系统的任何一个地方引用所需要的数
据结构,都需要把这个头文件包含进去。

五、NuttX

PX4 所使用的操作系统,其类似 UCos,关于 OS 的基本概念以及够不部分不在详述。

六、ROMFS

ROM file_system 的简写,内部的 px4fmu_common 文件夹中的 init.d 是关于 px4 系统
初始上电启动的启动脚本,即一系列的启动过程和系统配置。其中主要的几个部分就是 rcS、
rc.sensors、rc.mc_default、rc.mc_apps 等。
rcS:最先启动的脚本,负责挂载 SD、启动 uORB、配置系统参数等。
rc.sensors:启动 sensors 驱动代码。如果在 src/drivers 中创建私有的 sensor 驱动,
建议放在该部分启动。
rc.mc_default:配置和 PWM***相关的系统参数,内部含有怠速的配置。
rc.mc_apps : 启 动 上 层 application , 如 attitude_estimate 、 attitude_control 、
position_estimate 和 position_control 等。如果在 src/modules 中创建私有的上层 application,
建议放在该部分启动。

七、src

7.1drivers
pixhawk 硬件系统中使用的所有的 sensor 的驱动代码。也包含了 STM32 主控
MCU 的 io 输出控制(PX4IO)和 pwm 的驱动。
7.2 examples
PX4 系统给的一些简单的实例,为了便于开发者做二次开发调试测试使用。尤其是 px4_simple_app,内部涉及了如何通过 uORB 机制获取所需要的数据。
7.3lib
标准库。
7.4 modules
内部就是上层的应用任务代码实现部分,包含姿态结算、姿态控制、配置结算、
位置控制、落地检测、sensor 初始化、系统配置、uORB、commander 等。其中
commander 内部是实现整个控制模式的代码,包含 pixhawk 灯显控制,飞行模式切
换,解锁上锁等等。
相关算法实现也都是在该部分,比如像验证和控制算法先关(自适应 PID)就可
以在 mc_att_control 中加入自己私有的算法做验证。
下面是关于 module 里面的 application 介绍。
7.4.1、attitude_estimator_ekf:使用 EKF 算是实现姿态结算。
7.4.2、attitude_estimator_q:使用 mahony 的互补滤波算法实现姿态结算。
7.4.3、commander:整个系统的过程实现,比如起飞前的各 sensor 的校准算法实现、
安全开关是否使能、飞行模式的切换、pixhawk 硬件上的显示灯的颜色定义等
等。
7.4.4、gpio_led:IO 控制 led 的驱动。
7.4.5、land_detector:飞行过程中使用 land 模式降落或者受到降落时的落地监测部
分,内部会监测 z 轴速度和加速度等,具体实现请详细阅读源代码。
7.4.6、local_position_estimator:常说的 LPE 算法实现位置结算,类似最简单的 KF,
一个预测,一个修正。
7.4.7、logger:关于 log 日志的读写函数。
7.4.8、mavlink:和地面站通信的通信协议,结合地面站 QGC 源代码配合修改,或者
仅仅调用 mavlink 内部的 API 接口,即可通过无线信号把所需要的数据显示在
地面站 QGC 上,此方法是一种实时监测“目标数据”的方法。
7.4.9、mc_att_control:姿态控制的算法实现,主要就是姿态的内外环 PID 控制,外
环角度控制、内环角速度控制。
7.4.10、 mc_pos_control:位置控制的算法实现,主要就是位置的内外环 PID 控制,外
环速度控制、内环加速度控制。
7.4.11、 sdlog2:SD 卡的 log 日志读写部分,在 SD 卡中看到的所有数据都是通过该部
分写进去的,平时做 log 日志分析也是查看的这个内部的数据,所以,假如想
监测某个“目标数据”,也可以由此处写到 SD 卡中然后在做相应的分析。
7.4.12、 sensors:关于各种 sensors 的相关函数。
7.4.13、 systemlib:系统所需要的参数列表。
7.4.14、 uORB:IPC 通信机制。首先就是需要了解如何使用它进行进程间通信,了解
整个系统中的数据流流向。

八、Makefile:

最终的编译命令等,通过 shellscript 写的,可以自行对其修改成自己需要的。

九、

PX4 飞控源码系统框架介绍第1张

如下介绍对应于上面的红色标识

1、编译以后生成的固件,烧录进飞控即可。内部会有一些需要用到的头文件和.cp文件p。

2、mavlink协议部分,负责地面站通信的库文件都在此。

3、msg是负责进程间通信的消息集合,在自己创建私有任务时需要再次文件内部添加需要的数据结构。

4、Nutt是飞控所用的OS,这个不做系统移植不需要深入研究。我们所做的都是OS之上的。

5、ROMFS内部是启动文件,配置需要启动哪些任务与启动顺序,还有一些就是关于系统默认的一些配置。具体配置哪些需要阅读启动脚本了解。

6、SRC内部就是所有的sensor驱动和各种任务,比如姿态解算和姿态控制、位置解算和位置控制等等。

7、makefile内部是常用的命令行指令集合。

下面主要介绍一下SRC文件夹里面的东西

PX4 飞控源码系统框架介绍第2张

1、drivers:所使用到的所有的sensor驱动程序都在此处。(如果添加sensor,注意该处

2、顾名思义,实现代码,创建私有任务时可以参考。

3、Lib库,很多矩阵运算相关的数学库。

4、重点,飞行模式,姿态解算,姿态控制,位置结算,位置控制,落地检测等任务都在该modules里面。(飞控相关算法都在该处

下面介绍重点modules

PX4 飞控源码系统框架介绍第3张

1、姿态解算的代码实现部分

2、落地检测的代码实现部分

3、姿态控制的代码实现部分

4、位置控制的代码实现部分

5、位置解算的代码实现部分

6、各种sensors的初始化部分

7、uORB:进程间通信所用

免责声明:文章转载自《PX4 飞控源码系统框架介绍》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ios 苹果和百度地图的相关使用C# winform开发嵌套Chrome内核浏览器(WebKit.net)开发(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

速度之王 — LZ4压缩算法(一)

LZ4 (Extremely Fast Compression algorithm) 项目:http://code.google.com/p/lz4/ 作者:Yann Collet 本文作者:zhangskd @ csdn blog 简介 LZ4 is a very fast lossless compression algorithm, providin...

ffmpeg中的sws_scale算法性能测试

经常用到ffmpeg中的sws_scale来进行图像缩放和格式转换,该函数可以使用各种不同算法来对图像进行处理。以前一直很懒,懒得测试和甄 别应该使用哪种算法,最近的工作时间,很多时候需要等待别人。忙里偷闲,对ffmpeg的这一组函数进行了一下封装,顺便测试了一下各种算法。 简单说一下测试环境,我使用的是Dell的品牌机,i5的CPU。ffmpeg是201...

java 策略模式

定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。 类型:行为类模式 类图:        策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换。在前面说过的行为类模式中,有一种模式也是关注对算法的封装——模版方法模式,对照类图可以看到,策略模式与模版方法模式的区别仅仅是多了一个单独的封装...

Crypto++入门学习笔记(DES、AES、RSA、SHA-256)

最先附上下载地址 背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后对一些数据进行一些加密解密的操作。 笔者之前没接触过任何加密解密方面的知识(当然,把每个字符的ASCII值加1之流对明文进行加密的“趣事”还是干过的,当时还很乐在其中。),甚至一开始连Crypto+...

【高性能并行计算】——第四课 线性代数方程组的并行求解

    LU分解在本质上是高斯消元法的一种表达形式。实质上是将A通过初等行变换变成一个上三角矩阵,其变换矩阵就是一个单位下三角矩阵。这正是所谓的杜尔里特算法(Doolittle algorithm):从下至上地对矩阵A做初等行变换,将对角线左下方的元素变成零,然后再证明这些行变换的效果等同于左乘一系列单位下三角矩阵,这一系列单位下三角矩阵的乘积的逆就是L...

从零开始学区块链(4)

转自:区块链大师 1. 传统分布式一致性算法和区块链共识过程的异同点 相同点: Append only(只能增加) 强调序列化 少数服从多数原则 分离覆盖的问题:即长链覆盖短链区块,多节点覆盖少数节点日志 不同点: 传统分布式一致性算法大多不考虑拜占庭容错(Byzanetine Paxos除外),即假设所有节点只发生宕机、网络故障等非人为问题,并不考...