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.1driverspixhawk 硬件系统中使用的所有的 sensor 的驱动代码。也包含了 STM32 主控
MCU 的 io 输出控制(PX4IO)和 pwm 的驱动。
7.2 examples
PX4 系统给的一些简单的实例,为了便于开发者做二次开发调试测试使用。尤其是 px4_simple_app,内部涉及了如何通过 uORB 机制获取所需要的数据。
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:进程间通信所用