PX4 飞控源码系统框架介绍

转载自:https://my.oschina.net/u/4394481/blog/3321552

PX4 飞控源码系统框架介绍

osc_ozmm6ila

2019/12/31 17:19

阅读数 618

一、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.1 drivers

  pixhawk 硬件系统中使用的所有的 sensor 的驱动代码。也包含了 STM32 主控

MCU 的 io 输出控制(PX4IO)和 pwm 的驱动。

  7.2 examples

  PX4 系统给的一些简单的实例,为了便于开发者做二次开发调试测试使用。尤其是 px4_simple_app,内部涉及了如何通过 uORB 机制获取所需要的数据。

   7.3 lib

  标准库。

  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、编译以后生成的固件,烧录进飞控即可。内部会有一些需要用到的头文件和.cp文件p。

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

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

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

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

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

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

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

PX4 飞控源码系统框架介绍

 

 

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

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

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

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

下面介绍重点modules

 PX4 飞控源码系统框架介绍

 

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

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

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

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

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

6、各种sensors的初始化部分

7、uORB:进程间通信所用

上一篇:周博磊老师强化学习纲领笔记第二课:无模型的价值函数估计和控制


下一篇:Centos7升级SQLite