PX4飞控源码系统框架介绍
⼀、build_px4fmu-v2_default
  编译以后⽣成的⽂件:内部主要需要在意的就是topics_temporary_header(所有的任务是要的头⽂件,在创建任务和使⽤数据结构时可以从该处检索);topics_temporary_sources(系统中所有的任务函数)
⼆、Cmake
  配置⽂件,主要使⽤ nuttx_ake。该处主要是关于系统使⽤的⽂
件的路径配置,在 PX4 系统所有的.CPP 和.C ⽂件都是通过在该处进⾏路径包含的。在需
要⾃⼰创建私有任务或者 sensor 驱动程序时需要添加到该处。
三、mavlink
公司介绍源码  主要负责和地⾯站QGC通信的协议部分,这部分可以直接调⽤。分为1.0版本和2.0版本,以后都更新到2.0版本了
四、msg
  uORB manger 的缩写:msg。该部分主要是 PX4 系统的使⽤的所有的数据结构的集
合部分,各种任务和 sensor 驱动中需要获取的 sensor 数据都在此部分,还包含各种运⾏状
态的数据结构。其中需要注意的是该⽂件夹下的 ,该⽂档是整个 msg 部分的
配置部分,类似第⼆部分的 Cmake 中的配置⽂件⼀样,在开发者创建任务或者 sensor 驱
动程序时创建对应的数据结构(***.msg)以后,需要把开发者创建的***.msg 添加到
< 中,否则编译时识别不到开发者创建的数据结构。
在该部分创建好以后,直接编译可以⾃动⽣成相对应的 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 驱动,
建议放在该部分启动。
<_default:配置和 PWM***相关的系统参数,内部含有怠速的配置。
<_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 写的,可以⾃⾏对其修改成⾃⼰需要的。
九、
如下介绍对应于上⾯的红⾊标识
1、编译以后⽣成的固件,烧录进飞控即可。内部会有⼀些需要⽤到的头⽂件和.cp⽂件p。
2、mavlink协议部分,负责地⾯站通信的库⽂件都在此。
3、msg是负责进程间通信的消息集合,在⾃⼰创建私有任务时需要再次⽂件内部添加需要的数据结构。
4、Nutt是飞控所⽤的OS,这个不做系统移植不需要深⼊研究。我们所做的都是OS之上的。
5、ROMFS内部是启动⽂件,配置需要启动哪些任务与启动顺序,还有⼀些就是关于系统默认的⼀些配置。具体配置哪些需要阅读启动脚本了解。
6、SRC内部就是所有的sensor驱动和各种任务,⽐如姿态解算和姿态控制、位置解算和位置控制等等。
7、makefile内部是常⽤的命令⾏指令集合。
下⾯主要介绍⼀下SRC⽂件夹⾥⾯的东西
1、drivers:所使⽤到的所有的sensor驱动程序都在此处。(如果添加sensor,注意该处)
2、顾名思义,实现代码,创建私有任务时可以参考。
3、Lib库,很多矩阵运算相关的数学库。
4、重点,飞⾏模式,姿态解算,姿态控制,位置结算,位置控制,落地检测等任务都在该modules⾥⾯。(飞控相关算法都在该处)
下⾯介绍重点modules
1、姿态解算的代码实现部分
2、落地检测的代码实现部分
3、姿态控制的代码实现部分
4、位置控制的代码实现部分
5、位置解算的代码实现部分
6、各种sensors的初始化部分
7、uORB:进程间通信所⽤

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。