ardupilot采用了级联式PID,我认为级联式可以简单理解为串联,串联中混杂着并联,本质来说控制的上层的输入作为下层的输出。
在 ArduPilot 中,各个控制层级分别对应不同的文件或模块,以下是各层级在 ArduPilot 文件结构中的具体位置说明:
1.位置控制层
• 文件位置:ArduCopter/PositionControl.cpp
和ArduCopter/PositionControl.h
• 作用:根据目标位置和实际位置的偏差,生成速度目标。
2.速度控制层
2.1• 水平速度控制
• 文件位置:ArduCopter/VelocityControl.cpp
和ArduCopter/VelocityControl.h
• 作用:根据水平速度目标和实际水平速度的偏差,生成水平加速度目标。
2.2• 垂直速度控制
• 文件位置:ArduCopter/PositionControl.cpp
和ArduCopter/PositionControl.h
(与位置控制层部分逻辑在一起)• 作用:根据垂直速度目标和实际垂直速度的偏差,生成总推力变化需求。
3.姿态控制层
• 文件位置:libraries/AP_AttitudeControl/AP_AttitudeControl.cpp
和libraries/AP_AttitudeControl/AP_AttitudeControl.h
• 作用:根据加速度目标或力的变化,结合当前姿态,生成期望的角速度目标。
4.角速度控制层
• 文件位置:libraries/AP_AttitudeControl/AP_AttitudeControl.cpp
和libraries/AP_AttitudeControl/AP_AttitudeControl.h
• 作用:根据期望的角速度目标和实际角速度的偏差,生成所需的力矩。
5.力矩控制层
• 文件位置:ArduCopter/motors/AP_MotorsMatrix.cpp
和ArduCopter/motors/AP_MotorsMatrix.h
• 作用:根据所需的力矩和总推力需求,计算每个电机的转速指令。
6.电机控制层
• 文件位置:ArduCopter/motors/AP_MotorsMatrix.cpp
和ArduCopter/motors/AP_MotorsMatrix.h
• 作用:根据转速指令,生成电机驱动信号。
这些文件在 ArduPilot 的源代码库中具有特定的作用和功能,涵盖了从位置控制到电机驱动的整个控制流程。每个文件都包含相应的头文件(.h 文件),这些头文件定义了类、结构体和函数原型,而实现代码则在对应的.cpp 文件中。