ADRC,全称叫做Active Disturbance Rejection Control,中文名是自抗扰控制技术。这项控制算法是由中科院的韩京清教授提出的。韩教授继承了经典PID控制器的精华,对被控对象的数学模型几乎没有任何要求,又在其基础上引入了基于现代控制理论的状态观测器技术,将抗干扰技术融入到了传统PID控制当中去,最终设计出了适合在工程实践中广泛应用的全新控制器。
一般来说,ADRC控制器包括三个组件:跟踪微分器,非线性状态反馈(非线性组合),扩张观测器。ADRC的框图如下(盗图自《从PID技术到“自抗扰控制”技术》):
简单的介绍下ADRC的结构:
注意,这里介绍的是线性ADRC的参数整定方式。ADRC分为三部分,跟踪微分器的参数整定比较容易,很多地方都有介绍,这里就不再细说了。这里主要介绍其余参数的整定方法。首先线性ADRC的公式罗列如下:
e = z 1 ( k ) − y ( k ) z 1 ( k + 1 ) = z 1 ( k ) + h ⋅ ( z 2 ( k ) − β 01 e ) z 2 ( k + 1 ) = z 2 ( k ) + h ⋅ ( z 3 ( k ) − β 02 e + b u ( k ) ) z 3 ( k + 1 ) = z 3 ( k ) − h ⋅ β 03 e e 1 = v 1 ( k ) − z 1 ( k ) , e 2 = v 2 ( k ) − z 2 ( k ) u 0 = k p e 1 + k d e 2 u ( k ) = u 0 − z 3 ( k ) / b \begin{array}{lcl} e=z_1(k)-y(k) \\ z_1(k+1)=z_1(k)+h\cdot(z_2(k)-\beta_{01}e) \\ z_2(k+1)=z_2(k)+h\cdot(z_3(k)-\beta_{02}e+bu(k)) \\ z_3(k+1)=z_3(k)-h\cdot\beta_{03}e \\ e_1=v_1(k)-z_1(k),\ e_2=v_2(k)-z_2(k)\\ u_0=k_pe_1+k_de_2\\ u(k)=u_0-z_3(k)/b \end{array} e=z1(k)−y(k)z1(k+1)=z1(k)+h⋅(z2(k)−β01e)z2(k+1)=z2(k)+h⋅(z3(k)−β02e+bu(k))z3(k+1)=z3(k)−h⋅β03ee1=v1(k)−z1(k), e2=v2(k)−z2(k)u0=kpe1+kde2u(k)=u0−z3(k)/b
其中,重要的参数包括六个:
β 01 , β 02 , β 03 , k p , k d , b \beta_{01},\ \beta_{02},\ \beta_{03},\ k_p,\ k_d, b β01, β02, β03, kp, kd,b
根据高老师的结果,那么我们的线性ADRC需要整定的参数就只剩下四个了:
ω o , k p , k d , b \omega_o, \ k_p,\ k_d, b ωo, kp, kd,b
关于带宽 ω o \omega_o ωo
关于补偿系数 b b b
关于 k p , k d k_p,\ k_d kp, kd
当被控对象发生抖震时,可能的解决方法有:
1、固定一个 b b b,设定较小的 k p k_p kp和 k d k_d kd,之后尽可能选用大的带宽。
带宽多大合适?
一是,看扰动补偿的输出大小和实际系统可接受的输入范围是否匹配;
二是看是否已经发生了抖震现象。
2、选定好带宽以后,逐步调高 k p k_p kp和 k d k_d kd。
3、在 ω o , k p , k d \omega_o, \ k_p, \ k_d ωo, kp, kd三个参数都调好了,但是控制效果依然不满意,可以尝试调整 b b b,之后再进行一次上述过程。
另外,如果对应最开始选定的 b b b,找不到稳定的 ω o , k p , k d \omega_o, \ k_p, \ k_d ωo, kp, kd,那么就加大 b b b,直到可以找到稳定的 ω o , k p , k d \omega_o, \ k_p, \ k_d ωo, kp, kd。
最后,我想说,前面的这些都是我的经验之谈,没有经过任何的理论分析,未必适合你的应用。尽管我花了很长时间,希望找到一份资料,给出关于ADRC参数整定的权威的理论,但是最后也是徒劳无功。所以,我要给出最重要的一个方法论了。 如果你只想把ADRC在你的实验平台上用一用的话,你完全可以按照我提供的路数来行事!
首先,在Simulink里搭建被控对象的仿真模型;其次,固定三个参数,单纯改变一个参数,观察每个状态量的变化趋势;再次,总结每个参数对系统的影响;最终,你就能找到对于你的系统的参数整定方法啦!
你要相信,虽然我说的是最基本的控制变量法>_<,但是一定会比你无脑瞎调节省很多很多时间的。(别问我为什么知道,毕竟我就是这样过来的。。。)