四旋翼起飞就翻车?平衡车死活站不稳?一文讲透“串级PID”的灵魂架构
前言想象一下你正在调一台四旋翼无人机。你想让它保持水平角度为 0°。 你写了一个单环 PID读取 MPU6050 的倾角算出误差直接乘上 Kp 变成电机的 PWM。 结果一上电飞机稍微偏了一点电机就猛烈加速飞机瞬间冲过 0° 倒向另一边接着又反向猛烈加速……最后在疯狂的低频震荡中砸向地面。 为什么你的参数调了三天三夜无论怎么加微分D它就是稳不住因为你忽略了物理世界最重要的中间变量——角速度。一、 单环 PID 的绝望为什么它不够用单环 PID 的逻辑是“你偏了多少度我就给你多大的力”。 但这违背了物理直觉。假设飞机现在左偏了 30°你的 P 项给了一个巨大的力向右掰。当飞机回到 0° 的瞬间角度误差为 0P 项输出为 0。但是此时飞机正以极快的角速度向右甩虽然力没了但巨大的惯性会带着飞机继续向右翻滚这就造成了极其严重的超调Overshoot。二、 串级架构老板与打工人的完美配合为了对抗惯性我们需要引入内环角速度环和外环角度环。这就像一个公司的管理层级外环 PID老板 - 角度环输入你期望的角度比如 0°和当前真实角度。输出期望的角速度老板不直接干活他只下达指标“我看你偏了 30°我要求你现在以 50°/s 的速度给我转回来”内环 PID打工人 - 角速度环输入外环给的“期望角速度” 和 陀螺仪读出的“当前真实角速度”。输出直接给电机的 PWM 控制量。打工人只看速度“老板让我转 50°/s我现在只有 10°/s我要加大油门”三、 为什么串级能“稳如老狗”当飞机在老板的指挥下快速回正到 0° 时老板外环的输出期望角速度变成了 0。 此时打工人内环发现“老板让我保持 0 速度但飞机现在还在凭借惯性往右转比如还有 30°/s 的真实角速度” 于是内环会瞬间输出一个巨大的反向刹车力反向 PWM强行把飞机的惯性按死在 0° 的位置。这种“外环看位置内环盯速度”的双重防御不仅消除了惯性带来的震荡还对外界干扰比如一阵风吹来角速度瞬间突变有极快的抵抗能力。四、 调参玄学保姆级实操指南串级 PID 有两套参数内外环共 6 个很多新手一起调最后陷入走火入魔。秘诀是由内而外先斩后奏Step 1彻底关闭外环外环输出设为 0。Step 2只调内环角速度环。用手捏住飞机/平衡车给一个目标角速度调内环的 P 和 I有时是 P 和 D取决于系统。调到什么程度手感“很硬”它极力抵抗你旋转它的力且高频震荡很小。Step 3开启外环。此时内环已经是一个完美的“速度跟随器”了。你只需要轻轻给外环加一点 P纯比例控制系统就会像被施了魔法一样顺滑地回到目标角度。需要的话再加一点点外环的 D 来消除最后的微震荡。五、 总结单环 PID 是在和惯性搏斗而串级 PID 是在利用速度来降伏惯性。掌握了串级你就拿到了电赛所有姿态控制飞控、云台、倒立摆的万能钥匙。