055、角度环与角速度环的串级PID实现

📅 2026/8/2 11:31:41 👁️ 阅读次数 📝 编程学习
055、角度环与角速度环的串级PID实现

飞控算法从入门到精通 · 055 · 角度环与角速度环的串级PID实现

从一次炸机说起

去年夏天,我在调试一架自组四轴时遇到一个诡异现象:悬停时飞机像喝醉了酒,轻微晃动后突然朝一个方向猛偏,然后翻倒。地面站日志显示角度误差只有2度,但角速度却飙到了800度/秒。当时我用的还是单级PID——直接拿角度误差算油门差量。后来才明白,那根本不是PID参数没调好,而是控制结构本身就有缺陷。

单级PID的问题在于:它试图用一个控制器同时处理“角度偏差”和“角速度变化”两个不同时间尺度的物理量。角度变化慢,角速度变化快,两者混在一起,参数永远顾此失彼。串级PID把这两个环拆开,外环算角度,内环算角速度,各管各的,这才是飞控该有的样子。

串级PID的结构拆解

串级PID的核心就一句话:外环的输出是内环的期望值

具体到飞控的姿态控制:

  • 角度环(外环):输入是期望角度和当前角度,输出是期望角速度。这个环的更新频率可以慢一些,比如100Hz到200Hz。
  • 角速度环(内环):输入是角度环给的期望角速度和陀螺仪实测角速度,输出是电机控制量(油门差量)。这个环必须快,至少400Hz以上,最好能到1kHz。

为什么内环要快?因为角速度是角度的微分,变化剧烈。如果内环更新太慢,外环算出来的期望角速度还没执行到位,角度已经跑偏了,整个系统就会振荡。