本人想做做之前的电赛题--滚球平衡,但这涉及到了一些自动控制的东西,比如PID。

对PID之前只是略有耳闻,为了复现滚球平衡,只能来现学PID了。

本系列内容是看了MATLAB的教学视频后写的,视频链接在此

PID的公式在此

\[ u(t) = K_p e(t) + K_i \int^t_0 e(\tau) d\tau + K_d \frac{de(t)}{dt} \]

看着是不是觉得挺复杂,不过放心,让我们先抛弃公式,从PID是什么以及为什么要有PID开始讲起

这里有这么一个我们需要控制的设备,我们需要使用驱动信号(actuating signal)取控制它,同时,我们可以获得设备的当前信息,也就是受控变量(controlled variable)

这个驱动信号由一个控制器产生,控制器的作用是使得系统的error为0,error则是控制变量减去受控变量的值。控制变量(commanded variable)是我们对这个系统的需求,比如将烙铁加热到xx度;受控变量是从设备获得的信息,比如当前烙铁xx度。

接下来就将这个PID模型具象化,以球场上一个人走向半场的过程为例

如图所示,假设这个人离半场的距离有50m,那么控制变量为50m,设定控制器的值为0.1,那么初始速度为5m/s,人接收到速度的指令后行走,反馈回路将当前位置返回累计器,从而调整走路速度,随着人离中场越近,人的速度越慢,直到走到中场,速度为0

右下角的两张图分别是路程/时间走路速度/时间的关系图,体现了控制器不同的值时的区别

看起来似乎一个比例就可以解决控制器的问题了,那还要积分和微分器干嘛,下面换一个无人机的例子来说明

如的图所示,有这么个无人机,想悬停在50m的空中

无人机无法像上面人走路一样简单的比例就可以完成了,因为无人机会因为重力的作用下坠,如果到了50m的空中电机就定制转动,无人机会直接下坠

我们假定无人机的悬停需要100rpm的电机速度

通过增加增益,无人机电机转速会增加,然后上升,反馈使得误差减小,转速降低,降到100rpm时保持悬浮。只有继续增大增益,无人机才会继续上升

但是无论增益怎么增加,都没办法悬浮在50m处,如图中表格所示,最终会有误差无法消除,管这种误差叫做稳态误差(steady state error)

为了消除这种稳态误差,可以请积分器出场了

如图所示,一个常数值经过积分器后得到一个增大的函数,会使得转速增加,从而使得无人机上升减小误差

当误差为0时,只有积分器的输出100rpm,而比例输出为0

但是现实中并不是这么理想的,当误差E比较小的时候积分器的输出会大于100rpm,而比例的输出大于0,会使得总输出大于100rpm,会使得无人机突然超越50m的高度。这种情况叫做超调

为了减小这种超调的问题,就需要使用微分器了

对函数的求导可以得到它的斜率。误差函数由于是下降的趋势,微分得到的斜率是小于0的,并且随着下降的速度增大,误差函数斜率的绝对值也增大,这个负值的斜率输出到电机时会减慢电机的速度,这样就可以减小超调量

比例、微分、积分组合起来就是我们常说的PID控制器了,通过调整Kp Ki Kd权重因子,还可以只使用PI PD P等等

下一篇会讲到积分器的保护或者说抗饱和积分问题