第1章:PID控制基础
各位同学好,我是你们的飞控算法讲师。今天咱们聊聊PID控制基础——这部分内容,说实在的,是后面所有调参工作的根基。我自己带过不少新人,发现很多人一上来就急着调参数,结果越调越乱。嗯,咱们先把基础打牢。
核心观点:PID不是玄学,它就是一个“看误差、算输出”的数学公式。搞懂了它,你就能看懂飞控在干什么。
什么是PID?
PID,全称是比例-积分-微分控制。说白了,就是一个控制器,它根据“当前偏差”来决定“怎么调整”。
我举个例子你就明白了:
你用手托着一个盘子,想让盘子保持水平。你的眼睛看到盘子往左边歪了(这就是误差),你的大脑会计算:
- 比例P:“歪了多少?歪得多就用力往回推,歪得少就轻轻推”
- 积分I:“一直歪着?那就持续加力,直到它回正”
- 微分D:“歪的速度快不快?如果正在快速歪过去,提前用力顶住”
飞控里的PID,干的就是这个活。它读取传感器(比如陀螺仪、加速度计)的数据,算出当前姿态和目标姿态的偏差,然后输出一个控制量给电机,让无人机回到期望的位置。
我的经验:刚开始学PID时,别急着看公式。先理解这个“看偏差、做调整”的逻辑。我在项目中带过的新人,凡是先理解逻辑的,后面调参都很快上手。
比例P的作用与问题
比例P,是PID里最直观的部分。它的逻辑很简单:偏差越大,输出越大。
公式里就是:P_out = Kp × e(t),其中e(t)是当前偏差。
你想想看,无人机要悬停在一个高度。如果它偏低了1米,P项就会给一个向上的力;如果偏低了0.1米,给的力就小一些。这就是比例控制。
P的问题在哪里?
我遇到过不少情况:P太小,系统反应慢,无人机像“喝醉了酒”一样晃晃悠悠。P太大,系统会震荡,甚至直接炸机。
更麻烦的是——纯P控制会有稳态误差。什么意思?比如无人机悬停,如果风一直吹,P项只能产生一个“对抗”的力,但永远无法完全消除偏差。因为偏差为零时,P输出也为零,那谁来对抗风?
避坑指南:我曾经在调试一架大四轴时,只用了P控制,结果悬停高度总是差那么几厘米。折腾了半天,才发现是P的局限性——它无法消除持续的外力干扰。这时候就需要I项上场了。
积分I的作用与问题
积分I,就是用来解决“稳态误差”的。它把过去的偏差累加起来,只要偏差一直存在,I项就会持续增大输出,直到偏差被消除。
公式:I_out = Ki × ∫e(t)dt
说白了,I项有“记性”。它记得过去犯了多少错,然后根据这个“总账”来调整。
I的问题:
- 积分饱和:如果偏差长时间存在,I项会累加到一个很大的值。等偏差反转时,I项需要很长时间才能“消化”掉这个累积值,导致系统响应变慢,甚至超调。
- 积分过大:会导致系统震荡,甚至不稳定。我见过有人把I调得太大,无人机在空中像“抽风”一样上下抖动。
我的习惯:调参时,我一般先调P,让系统基本稳定,再加一点点I来消除稳态误差。I不要一开始就给太大,否则后面很难收场。
微分D的作用与问题
微分D,是PID里的“预言家”。它根据偏差的变化率,提前做出反应。
公式:D_out = Kd × de(t)/dt
你想想看,如果无人机正在快速偏离目标,D项会提前输出一个反向力,阻止它继续偏离。这就像你开车时,看到前面有弯道,提前减速一样。
D的问题:
- 对噪声敏感:微分放大了高频噪声。传感器数据稍微抖一下,D项就会产生很大的输出,导致电机乱转。
- D过大:系统会变得“僵硬”,响应迟钝,甚至出现高频震荡。
避坑指南:我曾经在调试一架小四轴时,D给得太大,结果无人机在地面测试时就疯狂抖动,电机发出尖锐的啸叫声。后来发现是D放大了陀螺仪的噪声。解决办法是:先对传感器数据做低通滤波,再减小D值。
PID公式解析
好了,咱们把三个部分合起来,就是完整的PID公式:
u(t) = Kp × e(t) + Ki × ∫e(t)dt + Kd × de(t)/dt
其中:
- u(t):控制输出(比如电机PWM值)
- e(t):当前偏差(目标值 - 当前值)
- Kp、Ki、Kd:三个待调参数
在实际飞控中,我们用的是离散化版本(因为单片机是数字系统):
// 伪代码示例
error = target - current;
integral += error * dt;
derivative = (error - last_error) / dt;
output = Kp * error + Ki * integral + Kd * derivative;
last_error = error;
这个代码,说白了就是飞控里最核心的循环。每次传感器更新,就执行一次这个计算,然后输出给电机。
重要提醒:公式里的dt(采样时间)很关键。如果dt不稳定,PID性能会大打折扣。我在项目中遇到过因为定时器中断优先级设置不对,导致dt抖动,结果无人机悬停高度忽高忽低。后来把定时器优先级调高,问题就解决了。
知识体系总览
下面这张图,是我自己整理的PID知识结构。你可以把它当作本章的“地图”:
这张图把PID的三个部分、它们的公式和特性都串起来了。你可以把它保存下来,后面调参时对照着看,会清晰很多。
我的建议:刚开始接触PID时,别急着记公式。先理解每个部分“为什么存在”、“解决了什么问题”、“会带来什么新问题”。这样你调参时,看到无人机的表现,就能反推出是哪个参数出了问题。