2022/12/10改
我重新搭建了一个simulink模型文件,已上传网盘:(有问题请评论提出,有空会改正)
链接:https://pan.baidu.com/s/1EIfzICPp2XgwKr7Uhzv-aA
提取码:2579
1、理论基础
主要参考韩老的论文:《从PID技术到"自抗扰控制"技术》。
对于系统:
这是一个常见的二阶系统,适用于牛顿-欧拉方程中,位置/速度及角度(姿态)/角速度的控制。
上述皆可化成二阶系统(6)的形式。
对于(6)式中的, 通常为未知项:因为包含建模不准确性而引起的内部干扰和系统外部干扰,那么建立观测器的形式为:
转化为离散形式(因为绝大多数实际控制系统为离散系统):
其中:h为采样时间。fal函数为:
其中fal函数类似于一个低通滤波和一个变参滤波器的叠加,用于逼近e。
理解以上的知识之后即可在simulink下搭建仿真模型了。
2、simulink
1、先搭建这样一个二阶系统:类似于m=1的位置控制系统(F=ma):
其中 f(.) 为系统扰动。
搭建模型如下(暂时没有加 f(.) )
x的状态反馈加了白噪。
2、搭建ESO
根据上面的离散公式,建立matlab func,代码如下(代码和上面的公式一一对应):
function [z1_hat,z2_hat,z3_hat] = fcn(y,u)
h=0.001;
alpha1=0.5;
alpha2=0.3;
beta01=100;
beta02=2500;
beta03=12000;
delta=0.01;
persistent z1 z2 z3
if isempty(z1)
z1=y;
z2=0;
z3=0;
end
z1k=z1;
z2k=z2;
z3k=z3;
e1=z1-y;
z1=z1k+h*z2k-h*beta01*e1;
z2=z2k+h*z3k-h*beta02*fal(e1,alpha1,delta)+h*u;
z3=z3k-h*beta03*fal(e1,alpha2,delta);
z1_hat=z1;
z2_hat=z2;
z3_hat=z3;
end
function f=fal(e,alpha,delta)
if abs(e)>delta
f=abs(e)^alpha*sign(e);
else
f=e/(delta^(1-alpha));
end
end
采样时间为0.001s,注意将matlab仿真时长定为0.001s(定步长)。其余参数都是随便给的,没这么调。
模块写出来是这样的:
y为状态x的估计,u的输入F,输出为z1,z2,z3的估计。
3、将ESO加入控制系统中
参考韩老论文:
我们实现红色部分:
需要注意 接入ESO模块的u的位置以及扰动加入系统的位置。
memory模块避免代数环问题。
4、控制效果
首先是对x的控制,期望轨迹为一个sin曲线,跟踪效果较好(可以自行搭建不带ESO扰动补偿的控制系统进行对比,自行调整PID和ESO参数以达到较好效果)
其次是对扰动的估计:本次仿真扰动 f(.)。
其估计效果也还可以。对x1和x1微分的估计效果应该都还可以。文章来源:https://www.toymoban.com/news/detail-402840.html
5、总结
- ESO的matlab代码可以直接用,适当调整参数即可。
- ESO是ADRC的核心,是自抗扰的核心,常将ESO和神经网络,自适应控制等结合。
- ESO的滤波效果和TD(微分跟踪器)差不多。
- 最后,对韩老在控制领域和ADRC技术等领域的贡献致敬!
文章来源地址https://www.toymoban.com/news/detail-402840.html
到了这里,关于ADRC——ESO扩张状态观测器simulink实现(含代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!