目录
文章目录
- 目录
- 无人机实现飞行的控制流程
- PX4固件框架学习
- 具体框架(总体)
- 具体框架(boards)
- 具体框架(build)
- 具体框架(SRC)
- 具体模块数据之间的关系
- PX4中的PID代码体现
- uORB
- 其他
- QGC的姿态控制PID参数体现
- QGC的位置控制PID参数体现
- 注意
[!NOTE]
- PID本质上是对误差进行处理,然后进行反馈控制。
- 姿态控制使用P-PID控制
- 位置控制使用P-PID控制
- 这两个模块是相互构成串级PID
[!IMPORTANT]
PX4中其实是没有高级控制算法的,都是朴素的PID算法。一个是算力限制,另一个是应用场景限制。(原来的东西就很稳定而且够用)
无人机实现飞行的控制流程
PX4飞控中的控制流程如下:
[!IMPORTANT]
最底层是motor_driver,再往上是混控器mixer,再往上是姿态控制att_ctrl,再往上是位置控制pos_ctrl和姿态估计attitude_estimator。
1.其中位置控制pos_ctrl由导航模块navigator和位置估计position_estimator两个部分组成。这里面navigator模块来自于commander和stickmapper。position_estimator模块来自于GPS或者是optical_flow。
2.其中姿态估计attitude_estimator由position_estimator和inertial_sensors两个模块构成。
[!IMPORTANT]
有一个很有道理的点,就是四旋翼运动的本质落脚到最底层其实姿态控制。那么就有一个问题?先有电机转速,还是先有姿态控制?
需要考虑两个量:实际量与期望量。
以att_ctrl这个模块为例子:实际量来源于attitude_estimator,期望量来源于pos_ctrl
以pos_ctrl这个模块为例子:实际量来源于position_estimator,期望量来源于navigator
不太理解的地方是pos_ctrl与att_ctrl的关系
PX4固件框架学习
具体框架(总体)
[!NOTE]
Firmware的整体框架如上图。
具体框架(boards)
[!NOTE]
boards文件夹里主要存放了固件支持的硬件,px4是最常用的
[!NOTE]
boards文件夹中px4内,可以看到各个硬件版本对应的硬件,比如硬件PIXHAWK2.4.8对应的固件fmu-V2,硬件PIXHAWK4对应的固件fmu-V4。
[!NOTE]
fmu-v2固件中的内容。主要存放的是硬件的配置。
[!NOTE]
fmu-v2/src文件夹中存放的是硬件的相关驱动和板卡配置部分。
具体框架(build)
[!NOTE]
存放编译好PX4固件后生成的,可以直接烧录进pixhawk硬件的二进制文件。
[!NOTE]
px4固件中,由一些重要的头文件。
具体框架(SRC)
[!NOTE]
控制算法中使用到的库。
[!NOTE]
src/modules文件夹中放了最关键的控制算法。
具体模块数据之间的关系
[!NOTE]
具体的msg数据流消息的流动
PX4中的PID代码体现
在mc_att_control_params.c中存放了进行姿态控制所需要的各种参数。
[!NOTE]
上述文件与qgc地面站中的参数设置是一一对应的。