当前位置:   article > 正文

PID控制算法原理(抛弃公式,从本质上真正理解PID控制)_pid控制加水解释

pid控制加水解释

PID控制应该算是应用非常广泛的控制算法。

小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。

这里我们从原理上来理解PID控制。PID(proportion integration differentiation)其实就是指比例,积分,微分控制。

先摆控制框架和公式,可先不做理解:

P:比例控制算法

我们先说PID中最简单的比例控制,抛开其他两个不谈。

假设我有一个水缸,最终控制目的要保证水缸的水位永远维持在1米。假设初始时刻,水缸的水位是0.2米,那么当前时刻的水位和目标水位存在一个error(误差),且error为0.8。

这个时候,一个人通过往缸里加水控制水位。如果单纯的用比例控制算法,就是指加入的水量u和误差error成正比。即u=kp*error,假设kp取0.5。

t=1时刻,(表示第1次加水,也就是第一次对系统施加控制),那么u=0.5*0.8=0.4,所以这一次加入的水量会使水位在0.2的基础上上升0.4,达到0.6;

t=2时刻,(第2次施加控制),当前水位是0.6,所以error是0.4。u=0.5*0.4=0.2,会使水位再次上升0.2,达到0.8;

如此这么循环下去,就是比例控制算法的运行方法。

可以看到,最终水位会到我们需要的1米。

但是,单单的比例控制存在一些不足,其中一点就是--稳态误差

什么是稳态误差?为什么有稳态误差?

像上述的例子,根据kp取值不同,系统最后都会达到1米,只不过kp大了到达的快,kp小了到达的慢一些。不会有稳态误差。

但是,考虑另外一种情况,假设这个水缸在加水的过程中,存在漏水的情况,假设每次加水的过程,都会漏掉0.1米高度的水。

仍然假设kp取0.5,那么会存在着某种情况,假设经过几次加水,水缸中的水位到0.8时,水位将不会再变换!

因为,水位为0.8,则误差error=0.2. 所以每次往水缸中加水的量为u=0.5*0.2=0.1.同时,每次加水,缸里又会流出去0.1米的水。加入的水和流出的水相抵消,水位将不再变化!

也就是说,我的目标是1米,但是最后系统达到0.8米的水位就不再变化了,且系统已经达到稳定。由此产生的误差就是 稳态误差

在实际情况中,这种类似水缸漏水的情况往往更加常见:比如控制汽车运动,摩擦阻力就相当于是“漏水”;控制机械臂、无人机的飞行,各类阻力和消耗都可以理解为本例中的“漏水”。

所以,单独的比例控制,在很多时候并不能满足要求。

I:积分控制算法

在上面所举例子中,如果仅仅用比例,可以发现存在稳态误差,最后的水位就卡在0.8。于是,在控制中,我们再引入一个分量,该分量和误差的积分是正比关系。

所以,比例+积分控制算法为:u=kp*error+ ki∗∫ error

继续举例说明:

第一次的误差error是0.8,第二次的误差是0.4,至此,误差的积分(离散情况下积分其实就是做累加),∫error=0.8+0.4=1.2. 这个时候的控制量,除了比例的那一部分,还有一部分就是一个系数ki乘以这个积分项。

由于这个积分项会将前面若干次的误差进行累计,所以可以很好的消除稳态误差!

假设在仅有比例项的情况下,系统卡在稳态误差,即上例中的0.8,由于加入了积分项的存在,会让输入增大,从而使得水缸的水位可以大于0.8,渐渐到达目标的1.0。

这就是积分项的作用。

D:微分控制算法

换一个另外的例子,考虑刹车情况。

平稳的驾驶车辆,当发现前面有红灯时,为了使得行车平稳,基本上提前几十米就放松油门并踩刹车。当车辆离停车线非常近的时候,则使劲踩刹车,使车辆停下来。整个过程可以看做一个加入微分的控制策略。

微分在离散情况下,就是error的差值。就是t时刻和t-1时刻error的差,即u=kd*(error(t)-error(t-1)),其中的kd是一个系数项。

在刹车过程中,因为error是越来越小的,所以这个微分控制项一定是负数,在控制中加入一个负数项,他存在的作用就是为了防止汽车由于刹车不及时而闯过线。

从常识上可以理解,越是靠近停车线,越是应该注意踩刹车,不能让车过线,所以这个微分项的作用,就可以理解为刹车,当车离停车线很近并且车速还很快时,这个微分项的绝对值(实际上是一个负数)就会很大,从而表示应该用力踩刹车才能让车停下来。

切换到上面给水缸加水的例子,就是当发现水缸里的水快要接近1的时候,加入微分项,可以防止给水缸里的水加到超过1米的高度,其实,就是减少控制过程中的震荡。

现在再回头看这个公式:

括号内第一项是比例项,第二项是积分项,第三项是微分项,前面仅仅是一个系数。很多情况下,仅仅需要在离散的时候使用,则控制可以化为:

每一项前面都有系数,这些系数都是需要实验中去尝试然后确定的,为了方便起见,将这些系数进行统一:

这样看就清晰很多,且比例,微分,积分每个项前面都有一个系数,且离散化的公式,很适合编程实现。

讲到这里,PID的原理和方法就说完了,剩下的就是实践了。在真正的工程实践中,最难的是如果确定三个项的系数,这就需要大量的实验以及经验来决定了。通过不断的尝试和正确的思考,就能选取合适的系数,实现优良的控制器。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/635580
推荐阅读
相关标签
  

闽ICP备14008679号