传统PID 的缺陷

ESO是自抗扰控制的核心,了解了ESO就了解了自抗扰控制的精髓。

自抗扰控制又名ADRC,相比传统的PID到底有什么优势呢?为啥高精度控制都在追求ADRC控制?

传统的PID:

P比例,I积分,D微分,了解过PID的都知道公式,这我们就不列举PID公式了。

P调节控制的反应,D调节物体控制的刹车,I修正静态误差。

I += err *KI;

err即控制的误差err=期望值-测量值;err为正则I正方向增加,err为负则I负方向增加。这样就很容易引起I值的震荡,err接近0时I值过大,导致控制输出值过冲。所以I控制的曲线大概如下:

项目开发中 es阶段是什么 eso是什么阶段_正则


引起控制不稳定。

ESO公式详解

ESO的公式也比较简单,但是方法很精妙,我们来看一下公式:
e(k) = z1(k) - y(k) ------------------------------------------------------------------1
z1(k+1) = z1(k) + h[z2(k) - b01 * e(k)] ----------------------------------------2
z2(k+1) = z2(k) + h[z3(k) - b02 * fal(e(k), 0.5,q) + b * u] -----------------3
z3(k+1) = z3(k) - h * b03 * fal(e(k), 0.25,q)----------------------------------4
各个变量的物理意义才是关键:
y(k) 为当前量测值
z1(k) 为当前计算出来的预估值
所以e(k)就是预估值与量测值的差,这个差值后面参与的运算很重要,作为预估值微分以及微微分都有参与运算。包括预估值的修正等。
z2(k)为z1的微分
h为计算步长
b02为误差值e(k)的修正增益
fal(e(k), 0.5,q) 为一个非线性函数,因为最优的控制曲线不一定是线性曲线
b为观测器增益
u为控制输出值
z3为计算出来的扰抗值

z3扰抗值

z3怎么就成了扰抗值了呢?这里有一个很重要的信息U,U作为控制器的输出,其理论上U输出越大量测值y(k)就越大,所以我们可以做一个假设:
假设物体有一个确定的线性模型,输出U与Z2成线性正比关系:
z2 = U * a---------------5;线性比例为a
在没有扰抗的情况下z1应该非常接近y的,此时假设扰抗为零。
在某一个时间段内外界给系统输出一个阻力,使得U与Z2不再适用于之前的公式5,此时z1因为经过z2积分,慢慢的偏离y,从而产生了数值比较大的e。
扰抗值z3因为是由e积分而得来,所以经过时间的积累z3慢慢趋近于扰抗值,当z3与扰抗值相近是e也会慢慢的收敛趋近0.从而达到动态平衡。
这个扰抗值加入到控制器可以达到消除静差的一个目的。

ADRC自抗扰控制的本质

ADRC分三个阶段:
微分-跟踪器(TD)、扩张状态观测器(ESO)、非线性控制
微分-跟踪器(TD)可以去看ACKFLY的一篇文章,我觉得写的非常详细:

ESO其实本质上也存在滤波效果
相比于传统PID,ADRC控制的本质就是数据的滤波、传统PD控制和扰抗计算的控制。这套系统调的好的话控制效果是可以非常接近目标值的,关键就是扰抗的计算,扰抗的计算又设计到系统模型的搭建,模型搞对了控制效果才会有一个明显的提升