视频用“大雄追静香”解释 PID:静香的位置代表目标 Setpoint,大雄的位置代表实际 Gyro;控制器要让大雄尽快追上、少过冲,并在追上后不因风等持续扰动慢慢漂走。P 项按当前误差立即出力,I 项累积一段时间内的误差来消除长期偏差,D 项在 Betaflight 3.5 之后主要对 Gyro 变化率提供反向阻尼。理解三者在黑盒中的形状,比背诵一组 PID 数字更重要。
大雄追静香:先定义控制目标
把静香想成飞手要求的位置或角速度 Setpoint,把大雄想成陀螺仪测到的实际状态 Gyro。静香移动后,大雄需要决定此刻朝哪个方向、用多大力度追赶。好的控制不只是“最终追到”,还要足够快、尽量少冲过头,并在追上后抵抗风力或机体偏差,避免慢慢漂开。
在黑盒中,Setpoint 与 Gyro 越贴合,代表飞机越准确地执行命令;两线的差就是误差。P、I、D 项不是三个互相独立的模式,而是按各自权重产生输出,最后相加形成控制器的主要命令。
P 项看此刻还差多少
P 项可以理解为当前误差乘以权重 Kp。Setpoint 与 Gyro 相差越大,P 输出幅度越大;两条线重合时,瞬时误差为零,P 也接近零。误差带正负号,因此 P 会自动选择追赶方向,而不是永远朝某个固定方向推。
P 的优点是反应直接,适合快速纠正当前偏差;但只靠 P 时,小而持续的偏差可能只产生很弱输出,无法完全抵消风、重心或长期负载。P 过高还可能造成过冲和振荡,所以需要 I 的长期记忆与 D 的阻尼配合。
I 项累积两条曲线之间的面积
I 项把误差随时间积分,可以直观理解为 Setpoint 与 Gyro 曲线之间带正负号的面积,再乘以权重 Ki。即使每一瞬间误差很小,只要同方向持续存在,面积会不断累积,I 输出逐渐增强,直到把长期偏差消除。这就是 I 帮助守线、抗风和防止稳态漂移的原因。
积分也带来慢反应和记忆。视频曲线中,前一段负面积让 I 逐渐变负;Setpoint 越过 Gyro 后出现相反符号的面积,需要一段时间才能抵消先前积累,I 才回到零。因此快速反向时旧 I 可能短暂拖住新动作,Betaflight 后续用 I-Term Relax 等机制管理这类累积。
D 项看 Gyro 变化有多快
微分可以理解为曲线斜率。视频特别纠正了常见旧说法:在 Betaflight 3.5 之前,可以用“对误差微分”描述历史实现;之后的 Betaflight 主要直接对 Gyro 做微分,并取反方向输出,使 D 倾向于阻止角速度快速变化。当 Gyro 曲线平坦、斜率为零时,D 接近零;曲线越陡,阻尼输出越明显。
D 能减少过冲、帮助机体停止和抵抗快速扰动,却会放大高频 Gyro 噪声,并可能提高电机温度。阅读黑盒时应同时看 Gyro 斜率与 D 的反向关系,而不是把自动转写中的同音词当作参数。当前 Betaflight 算法、滤波与字段仍可能变化,具体实现以现行官方文档为准。
操作步骤
- 在黑盒中找到 Setpoint 与 Gyro
把 Setpoint 视为静香的目标,Gyro 视为大雄的实际状态,先观察两线何时分离、追上和过冲。
- 用瞬时差理解 P 项
比较同一时刻 Setpoint−Gyro 的符号和幅度;差越大,P 输出通常越大,重合时接近零。
- 用带符号面积理解 I 项
沿时间观察两条曲线之间的面积如何累积;相反符号面积会逐步抵消旧积分,而不是瞬间清零。
- 识别 I 的慢反应和记忆
在快速反向处检查 I 是否仍保留旧符号,理解它为何能守住长期偏差、也可能拖慢瞬时变化。
- 按 Betaflight 3.5 后语境理解 D
主要观察 Gyro 的变化率及 D 的反向阻尼,不再把当前 D 简化为对误差直接微分。
- 在斜率过零处验证 D
Gyro 从上升转为下降时会经过近乎平坦的区段,D 应接近零并随后换符号。
常见问题
P、I、D 中哪一个最重要?
没有单一答案。P 处理当前误差,I 处理长期累积误差,D 提供对快速变化的阻尼;三者按机架和目标协作。
为什么 Setpoint 与 Gyro 重合时 P 接近零?
因为 P 由瞬时误差决定,两条线相同时误差为零;此时长期扰动仍可能由 I 维持补偿。
I 项为什么不会在误差换向时立刻换向?
I 保存的是过去误差的积分面积,新方向的面积需要先抵消旧累积,因此具有记忆和延迟。
Betaflight 的 D 是对误差还是 Gyro 微分?
视频说明 3.5 之后主要对 Gyro 做微分;历史教程可能描述 error derivative。当前细节仍应查对应版本官方文档。
完整时间轴文字稿
文字稿按视频时间排列,便于快速定位讲解内容。文字稿语言:简体中文。
大家好我是QualRank欢迎回到我的频道上一期我们谈到了滤波这一期我们来谈一谈PID的工作原理以及PID他们几个参数的特性为我们下一期的PID 调参打好基础首先我们来看一下PID它是用来解决一个什么问题的小时候我们都看过Doraemon对不对Doraemon里面有一个静香还有大熊那大熊是喜欢和静香玩的
现在静香会是我的鼠标移动而移动那大熊他因为喜欢和静香玩对不对他会跟上那么大熊他在某一个时间点以多大的速度移动才能够很好的追上静香呢这个时候就需要我们的PID算法了PID算法他能告诉大熊在某一个时刻以多大的速度来追静香能够很好的追倒静香很好的意思就是说第一他能够很快的追倒
第二呢,它追到之后,它不会冲过头太多。还有就是,当你锁定住静香之后,你不能慢慢的飘到其他地方去了,对不对?那就就是,这个PID算法,在这个例子当中,它发挥的作用。PID这个算法呢,其实非常古老了,已经有100多年的历史了。它其实是一个非常非常简单的算法。这下面是它的一个公式。大家不要被这个公式吓到,其实是非常简单的。我们一个一个来看。
首先,它主要有三个组成部分,对不对?平常我们都说PID Sum,PID Sum,为什么是一个PID Sum呢?因为这个PID算法最终。
PID 三个构成项。
一个是Kp·e(t),Kp就是我们平常在Betaflight里面调PID调的那个P我们调的那个P值其实不是说这个P组件多大而是调了这个它的权重就是P在这个PID里面的权重大小那在这个公式里面对应的是Kp在业界大家喜欢用Kp来表示权重然后e(t)是什么呢?e(t)就是
比如说大熊想住到这里,那大熊现在的位置和他想要去的位置之间是不是有个差值,这个差值就是我们的e(t),这个e(t)呢,根据比如说静香在左边还是右边,它会有个正负的区别,那这就是我们的P值,P值其实非常简单,就是就是这个差值,能以一个权重。
好,那么接下来呢,我们来看这个I 项,I 项跟p组件一样,也有一个Ki 权重值,然后呢,它会对误差做一个积分,不懂积分的朋友不用着急啊,我们待会会通过黑盒曲线来看一下,这个积分它到底是在积一个什么东西,I 项它的主要作用是什么呢,它的主要作用就是,当大熊追上这个静香之后,它不会被,不会渐渐的飘到其他地方去。
有可能风力吹把大熊吹歪了对不对如果吹歪了那一点点误差如果不积分的话那我们P 项它的作用就非常非常微弱所以就需要积分来减小这种误差那这就是我们在I 项然后呢D 项也是一样的有一个权重值然后呢它会对误差做一个微分 不懂微分的朋友也不用着急跟这个I 项一样我们待会会通过Blackbox 曲线来具体看一下它是怎么工作的D 项做一件什么事情呢就是它帮助大熊追到静香之后
好,接下来我们用这个黑盒曲线来分析一下这个PID在动态情况下它们之间的变化情况,以及它们之间的关系。首先在这个图里面我们要注意几条非常重要的线,一条是这个gyro,就这条gyro roll,还有这个setpoint,setpoint是什么呢?setpoint就是静香所在的位置,所在的这个位置,然后gyro是大熊所在的位置,大熊想要一直去追上静香,对不对,还有
努力的要跟Setpoint这条曲线重合但是我们只要把这个曲线放大放大放大它始终会有一些误差对不对那么这个误差呢就会被我们的PID这个讯法捕捉的然后我们首先来看这个P 项P 项就是这条红色的线P 项我们刚刚说了它是误差乘以一个权重对不对那你看误差是什么误差就是这个Setpoint键Gyro
現在副81剪去副73还是一个副的对不对所以现在的P值也是副的它是在这个虚线上方这叫虚线代表的就是零然后而且是你这个差值越大差值越大那么这个P值越大所以在这个地方大家看这个地方Gyro跟Setpoint曲线几乎重合了所以这个时候P值几乎就是零的比如说在这里
它们都是付218,付218,那这个时候P这个权重,P这个组件它就是等于零的。好,接下来我们来一起来看一下这个I 项。我刚刚说I 项是对误差做一个积分,对不对?积分是什么意思?其实就是这两条曲线之间的面积,就是这个setpoint和gyro之间的面积,当然它是有正负的。比如说现在setpoint在gyro下面,那么它这个面积就是负的,因为你是用setpoint减去 Gyro对不对?
然后这个面积,你看这个面积是不是一直在增大我们随着时间的推移,这个面积一直在增大所以这个时候呢我们的I 值其实也是一直在不停增大你看从刚刚的附0.7到附0.8再到附0.9虽然很小啊因为因为这个误差非常小但是它是一直在增大的然后增大增大增大到现在I 值附1.7最大最大之后你看现在到这边
Setpoint 跑到Gyro上面去了,这个时候面积是不是就1号了,跟之前我们的面积符号是不是就反过来了,这个时候这段面积在加拿大之前的面积就会抵消掉一部分1号的面积,所以这个时候I 值就开始减小,减小减小减小,一直减小减小到这个时候,可能这一段的面积跟刚刚的面积相等了,所以它就I 值就变到0了。
通过这个图形我们可以看出,I 项它有一个非常大的特点就是它的反应非常慢,因为它要对刚刚的面积,比如说刚刚我有一个负的面积对不对,它要过很久才能把这个负的面积给抵消掉,所以它的反应相当来说是非常慢的,这就是为什么 Betaflight 里面加入了这个I-Term Relax,将来我们可以做一些视频专门讲。
好,接下来我们来看这个D 项刚刚我说D 项是对误差座微分其实这对 Betaflight 来说不适用了在 3.5 之前可能还适用到现在 Betaflight 已经不对这个误差座微分它其实是直接对陀螺仪座微分为什么要这么做呢?我们将来可以做一期视频专门讲现在暂且挖一个坑在这里那今天我们姑且先看一下它是怎么对这个陀螺仪的变化做微分的
微分是个什么意思?大家可以简单理解我就是这个斜率比如说这一段陀螺仪它的斜率几乎一直没变像这一段,这条黄色曲线是这个D 项这个斜率几乎是远几乎是这条直线所以这个时候这个D 值几乎也是没变的然后直到到这一段开始这个斜率就突然有点陡峭有点陡峭但是现在这个D 值现在就增大增大增大增大增大增大
然后一直保持在这里然后再来看一段你看这一段非常非常有意思就是刚开始我们这个Gyro还是还是在不停的增大了对不对不停的往往底下走然后到这点开始往上走那这个中间肯定有一段它是平的对不对中间平的这一段这个D 值就告诉我呢是在这里因为它如果平着的话它斜率是什么斜率是零的斜率的斜率是零的D 值呢也就是零
然后到这一段开始,因为这个Gyro开始又在往上走,那这个时候斜率就反过来了,反过来,然后D 值呢,现在就变回负了。这个D 值为什么负呢?因为它始终是为了阻止Gyro变化,而存在。好了,这一期的视频就到这里,谢谢大家的收看,也欢迎大家点赞收藏、加转发,收拾三连走一发,我们下期PID 调参,不见不散。



