Proportional Integral Differential

PID全称Proportional Integral Differential,即用这个三个值,比例,积分,微分来控制每一个值稳定在一个量

[!attention] 需要明确的是 你所的是控制一个量免受外部干扰!以下这几个就算为干扰

  1. 水缸里一开始没有水
  2. 你挖走了一勺水
  3. 水持续露出

那么,有些人可能会问,这个PID究竟为什么存在?我都知道目标值了,那我直接把这个值设定为目标值不就好了? 这就说明你根本上的错误理解了这个算法的作用!我们要做的是将值稳定在一个目标值。也就是抵消阻力

例1 - ASC第二轮

就拿车轮转速举例,假设你要CCR在500,那么你一直把CCR设定在500的话,你给他施加阻力,它依然以500的转速在转,显然,此时有 \(F_{实际}=F_{输出} - F_{阻力}\) 那么实际输出就不再是我们要求的CCR = 500了!

PID要做的就是增大$F_{输出}$,来平衡阻力,是的$F_{实际}$稳定在一个值

例2 - 水缸控制

PID还有一个作用是其效率高,能够快速控制一个值 假设你有一个水缸,需要到达500的水位,如果你一直0.01的去加水,那么要加50000次才能到目标的地方。PID要做的就是加快这一过程,

参数具体说明和计算

这里我们以小车为例这里我们以小车为例这里我们以小车为例 先说明,我们最后输出的应该是一个$F_{实际}$,但我们能控制的是$F_{输出}$。关键在于怎么控制$F_{输出}$抵消$F_{阻力}$。显而易见的,我们可以这样去想象$F_{输出}$ \(F_{输出} = F_{目标} + F_{阻力补偿}\) 也就有了 \(F_{实际} = F_{目标} +F_{阻力补偿}-F_{阻力}=F_{目标}\) 而这里的$F_{阻力补偿}$就是我们需要去计算的东西 这里,我们称$F_{实际}$与$F_{目标}$值的偏差为$error(t)或e(t)$,而$t$为当前的时间

比例控制 Proportional

比例控制根据当前的偏差值进行调整,偏差越大,控制作用越强。

  • 比例控制可以迅速反映偏差,但不能消除静差。

计算公式如下 \(P_{output}=K_pe(t)\) 其中$K_p$是我们需要调试的参数

Proportional Example #1

假设我们现在依然有一个水缸,现在是没有水的,我们需要500的水,假设Kp是0.5,那么就有 \(P_{output}=0.5\cdot{e(t)}=250\) 下一个瞬间就有 \(P_{output}=0.5\cdot{e(t)}=0.5\cdot(500-250)=125\) 这样以此类推,就能达到500

问题

但是你会发现,这样似乎永远无法达到目标值 \(一旦有F_{输出}=F_{阻力},F_{实际}就将=0\) 最后一点距离始终无法达到,我们称之为静差,这时候就需要引入一个累计量

积分控制 Integral

它不只看当前的误差,而是把过去所有时间的误差加起来(积分)。它专门解决P解决不了的“静差”问题。

计算公式如下 \(I_{output}=K_i\int^t_0e(t)dt\) 他把过去每一个时间点的$e(t)$都加了起来,这样,如果我们长时间有一个静差$e_{static}(t)$,他也会累计,积分控制就会逐步的把输出提起来,直到$e(t)=0$

  • 缺陷: 反应迟钝,容易“矫枉过正”。如果I太强,它会在达到目标后,因为惯性(历史误差太大)继续冲过头,导致水位过高,然后又要反向补偿,造成系统在目标值附近反复振荡

这似乎是无法避免的

微分控制 Differential

它不看误差有多大,而是看误差变化的速度(微分)。它的任务是刹车,防止系统冲过头。 如果比例控制设置太大了,他会出手

计算公式如下 \(D_{output}=K_d{de(t)\over{dt}}\) 显然,${de(t)\over{dt}}$是一个速度量

  • 效果: 抑制振荡,提高稳定性。当水位快速上升接近目标时,D能敏锐地察觉到“上升速度太快了,马上就要冲过头了!”,于是它会在P和I还在使劲的时候,提前开始关小水龙头,起到缓冲和制动的作用。

  • 缺陷: 对噪声敏感。如果水位测量有微小的波动或噪声,D会把这些“抖动”误认为是速度的剧烈变化,从而产生剧烈的控制动作,导致系统不稳定。所以D参数通常不能设得太大。

总结

计算如下 \(F_{output}=P_{output}+I_{output}+D_{output}\) 调参时,你首先需要调 $P$,它是将值控制在目标的主力。之后调整 $D$,它的作用是做一个阻尼,使得值不会在目标周围来回跳动,波动逐渐变小。最后调整 $I$,消除最后一点误差。