LADRC的学习——总概
作者:墨心; 日期:2019.7.25;
学习LADRC结构:
1.学习PID的相关知识,作为学习ADRC的基础铺垫,在simulink中搭建模块,通过调节参数,看调节效果,分析Kp,Ki,Kd参数对系统的影响。
2. 介绍ADRC的一些相关知识及其理解LADRC相关的参数及其意义,用Simulink对模型进行搭建,进行仿真测试。
3. 然后通过对论文的阅读,在Simulink中换被控对象,调节参数,看LADRC控制器是否满足控制要求。
4. 接下来理解LADRC的基本思路,通过Matlab编程,来理解实现离散LADRC功能,为以后在其他仿麦呢应用作为铺垫。(难点—需要时间会长一些)
5. 在以后项目中,利用实际工程来利用LADRC。(可能以后会有更新)
LADRC介绍
1.引用论文及其作者介绍
引用文献作者:
韩京清:韩京清,系统与控制专家,我国控制理论和应用的早期开拓者之一。用最优控制理论提出了拦截问题中新的制导概念和方法;在国内率先推动控制系统计算机辅助设计软件的开发和研究;创造性地提出了计算人口“总和生育率”的“生育基数法”;创建了自抗扰控制技术,为我国控制理论与应用的发展作出了重要贡献。(这里来自百度百科,具体作者信息大家可以自己百度,韩老师是ADRC方法的提出者)
高志强:高志强于1987年和1990年在美国圣母大学分别获得电机工程的硕士和博士学位,从1995年起与韩京清研究员长期合作,全面开展自抗扰控制技术的应用研究,使其突破了参数整定的瓶颈口,以高效、鲁棒、节能、简单易行的特点成为工业控制除PID外又一用途广泛的有力工具。自抗扰技术近年来在国内外学术界也受到了普遍的关注。
参考文献:
[1]韩京清.从PID技术到“自抗扰控制”技术[J].控制工程,2002(03):13-18.
[2]Zhiqiang Gao. Scaling and bandwidth-parameterization based controller tuning[P]. American Control Conference, 2003. Proceedings of the 2003,2003.
2.ADRC结构及其分析介绍
从传统 PID 的原理出发 , 分析了它的优缺点,利用非线性机制来开发了一些具有特殊功能的环节 : 跟踪微分器 (TD) , 扩张状态观测器 (ESO) , 非线性 PID(NPID) 等,并以此组合出高品质的新型控制器 - 自抗扰控制器 (ADRC - Active Disturbances Rejection Controller) , 从而形成了新的“自抗扰控制”技术。
PID 的优点 : 靠控制目标与实际行为之间的误差来确定消除此误差的控制策略。
PID 的缺点 : ①误差的取法 ; ②由误差 e 提取de/dt 的办法 ; ③“加权和”策略不一定最好 ; ④积分反馈有许多副作用。
ADRC结构如下:
其结构分为这几个部分,安排过渡过程,非线性反馈,扩张状态观测器(ESO - Extended state observer),被控对象等这几个主要部分,接下来按照引文文献1[1],一一讲解。
a.安排过渡过程
因为直接用误差的方法不一定好,因为e = r - y这样的方法容易出现超调,这样对于低扰动-高精度控制不能满足要求。
因此安排一个过渡过程v1(t),v2(t)为微分信号,采用的是e = v1(t) - y,有跟踪微分器的阶跃响应为:
其中变量h为步长,上式中x1,x2为输入向量,r决定跟随速度,h0决定滤波作用,fst(v1,v2,h,r,h)为:
其中a,d,a0按照系统调节的参数,sgn为符号函数。
b.扩张状态观测器(ESO)
这里为扩张状态观测器,其中beta01,beta02,beta03,alpha1,alpha2.,epsilon1都为参数然后z的一阶导和z都为状态变量,其中fal函数为:
c.非线性PID
利用跟踪微分器 ( TD) , 把经典 PID 改造成“非线性 PID ”,如图所示:
这里TD(跟踪微分器)给出跟踪输出y的量 z1及其微分z2; 误差、积分、微分是由安排的过渡过程和TD
的输出 z1 , z2 来产生的。
把原先的“加权和”改成“非线性组合”而得“非线性 PID ”。 采用上面提到的fal 函数具有:小误差 , 大增益 ; 大误差 , 小增益的特性。
3.ADRC算法
这里也是完全采用韩京清老师的算法思路进行介绍,上面介绍的部分是从数学上推导出来的连续的表达式,但是我们在计算机处理中,或者在现实生活中应用采用的是离散的形式。下面部分是韩老师给出的离散算法部分截屏:
4.Matalb编程实现并且检验(这个部分不完善,我个人理解仅仅完成一部分,希望能够有人指正和讨论)
在这里以上内容完全是根据韩老师的论文,见引用文献1截屏抄录,仅仅只加上一个自我的浅薄理解。接下来的部分是个人自己按照韩老师论文的自己用matlab编程实现(是否正确还不太确定,希望大家讨论指正),里面注释用中文再次打开会乱码,因此用自己的Chinglish作为注释,还望不要嘲笑。
代码部分:
a.fst函数代码实现:
%%%
%Input Parameter:
%x1: Input vector1
%x2: Input vector2
%r : The speed of element;It up to tracking speed
%h : The filter of element;It determines the strength of filt.
%x : This is input vector.
%
%Output Parameter:
%y : Function output value.
%%%
function y = fst_function(x1,x2,r,h)Length1 = length(x1);
% Length2 = length(x2);% define the length of the variables.
% This can achieve smooth operation.
y = zeros(1,Length1);
a0 = zeros(1,Length1);
a = zeros(1,Length1);% These two parameters are constants.
d = r*h; % This parameter is known.
d0 = d*h; % Known.for i = 1:Length1% This part can get the value of three parameters.% get y a0 a,respectively.y(i) = x1(i) + h*x2(i); a0(i) = power(d.^2 + 8*r*(abs(y(i))),1/2);if abs(y(i)) > d0a(i) = x2(i) + (a0(i) - d)./2;endif abs(y(i)) <= d0a(i) = x2(i) + y(i)./h;end%This is fst function.if abs(a(i)) <= dy(i) = -r*a(i)./d;endif abs(a(i)) > dy(i) = -r*sign(a(i)); endend
end
这里是fst函数的fst_function函数,里面参数为随意设置来检验,如下在command windows窗口输入部分:
>> x1 = 0.1:0.2:10;
>> x2 = x1 + 0.01*rand;
>> r = 4;
>> h = 3;
>> y = fst_function(x1,x2,r,h);
>> plot(x1,y);
得到结果为:
b.fal函数实现
%This function is fal function
%Input Parameter:
%alpha : Parameter1
%delta : Parameter2
%epsilon: Input Vector
%
%Output Parameter:
%y : Function output value.
%%%
function y = fal_function(alpha,delta,epsilon) Length = length(epsilon);% define the length of the variables.
% This can achieve smooth operation.
y = zeros(1,Length);if delta <= 0error("Delta must greater than to zero");
endfor i = 1:Lengthif abs(epsilon(i)) > delta y(i) = (abs(epsilon(i)).^alpha)*sign(epsilon(i));endif abs(epsilon(i)) <= delta && delta > 0y(i) = epsilon(i)./(delta.^(1 - alpha));endend
end
这里是fst函数的fal_function函数,里面参数为随意设置来检验,如下在command windows窗口输入部分:
>> alpha = 3;
>> delta = 7;
>> epsilon = -19.9:0.1:20;
>> y = fal_function(alpha,delta,epsilon);
>> plot(epsilon,y);
得到结果为:
c.根据上述描述的算法,整体总的编程(没有实现成功,希望可以和大家讨论)
% TD + ESO + NLSEF = ADRC
function y = ADRC_Algorithm(Length)% Call fst and fal function below.
fst = @fst_function;
fal = @fal_function;% define the length of the variables.
% This can achieve smooth operation.
v1 = zeros(1,Length + 1);
v2 = zeros(1,Length + 1);
Z1 = zeros(1,Length + 1);
Z2 = zeros(1,Length + 1);
Z3 = zeros(1,Length + 1);
epsilon1 = zeros(1,Length + 1);
u0 = zeros(1,Length + 1);
e1 = zeros(1,Length + 1);
e2 = zeros(1,Length + 1);
u = zeros(1,Length + 1);% Set System Parameters.
r = 0.1; % r :Speed factor ;It depends on the tracking speed.
h0 = 4; % h :Filter factor;It determines the strength of the filter.% Set initial value.
v1(1) = 0.1; % This is v1(0)
v2(1) = 0.2; % This is v2(0)
Z1(1) = 0.5; % This is Z1(0)
Z2(1) = 0.1; % This is Z2(0)
Z3(1) = 0.7; % This is Z3(0)
v0 = 8; %This is the Pro_Set or expectation value.(vital)beta01 = 0.2;
beta02 = 0.3;
beta03 = 0.4;
b = 0.4;
delta = 3.5;alpha1 = 0.5; %
alpha2 = 0.25; %% Implemente algorithms and updates the data of parameters in the loop.
for i = 1:Length %Arrange the Transition Processv1(i+1) = v1(i) + h*v2(i);v2(i+1) = v2(i) + h*fst(v1(i) - v0,v2(k),r,h0);%Evaluate the state and total disturbance.%ESO Equationepsilon1(i) = Z1(i) - y(i);%f0(i) = z1(k) + z2(k); %This function is known,but I don't know its expression.%u(i) = u0 - (z3(i) + f0(i))./b;%Control yolume formation u0(i) = beta01*fal(e1(i),a1pha1,delta) + beta02*fal(e2(i),alpha2,delta);u(i) = u0(i) + Z3(i)/b;Z1(i+1) = Z1(i) + h*(Z2(i) - beta01*epsilon1(i));Z2(i+1) = Z2(i) + h*(Z3(i) - beta02*fal(epsilon1(i),alpha1,delta)) + b*u(i);Z3(i+1) = Z3(i) - h*beta03*fal(epsilon1(i),alpha2,delta);%Control yolume formatione1(i) = v1(i) - Z1(i);e2(i) = v2(i) - Z2(i);%data updatev1(i) = v1(i+1);v2(i) = v2(i+1);Z1(i) = Z1(i+1);Z2(i) = Z2(i+1);Z3(i) = Z3(i+1);end
end%This function is fst function
%%%
%Input Parameter:
%x1: Input vector1
%x2: Input vector2
%r : The speed of element;It up to tracking speed
%h : The filter of element;It determines the strength of filt.
%x : This is input vector.
%
%Output Parameter:
%y : Function output value.
%%%
function y = fst_function(x1,x2,r,h)Length1 = length(x1);
% Length2 = length(x2);% define the length of the variables.
% This can achieve smooth operation.
y = zeros(1,Length1);
a0 = zeros(1,Length1);
a = zeros(1,Length1);% These two parameters are constants.
d = r*h; % This parameter is known.
d0 = d*h; % Known.for i = 1:Length1% This part can get the value of three parameters.% get y a0 a,respectively.y(i) = x1(i) + h*x2(i); a0(i) = power(d.^2 + 8*r*(abs(y(i))),1/2);if abs(y(i)) > d0a(i) = x2(i) + (a0(i) - d)./2;endif abs(y(i)) <= d0a(i) = x2(i) + y(i)./h;end%This is fst function.if abs(a(i)) <= dy(i) = -r*a(i)./d;endif abs(a(i)) > dy(i) = -r*sign(a(i)); endend
end%This function is fal function
%Input Parameter:
%alpha : Input vector1
%delta : Input vector2
%epsilon:
%
%Output Parameter:
%y : Function output value.
%%%
function y = fal_function(alpha,delta,epsilon) Length = length(epsilon);% define the length of the variables.
% This can achieve smooth operation.
y = zeros(1,Length);if delta <= 0error("Delta must greater than to zero");
endfor i = 1:Lengthif abs(epsilon(i)) > delta y(i) = (abs(epsilon(i)).^alpha)*sign(epsilon(i));endif abs(epsilon(i)) <= delta && delta > 0y(i) = epsilon(i)./(delta.^(1 - alpha));endend
end
在这里,存在的问题是f0在论文中没有找到其表达式,随意的添加了一个式子,还有存在参数调整的问题还有初始值设定的问题。这些都需要在接下来学习中理解和加入实际的一些工程进行调节,来理解其中意义。
这是学习的开端,接下来是进行PID理解的学习,作为理解ADRC的开始,这是我的第一篇博客,自己以后将会以自己的理解,学习后分享自己的成果,然后大家一起讨论进步。
如果在文章有哪里提到,没有标注来源的请评论我,我一定补充上来源,如果有侵权的地方也请联系我,我尽快删除。
LADRC的学习——总概相关推荐
- LADRC的学习——寻找物理模型被控对象(验证调参效果)
LADRC的学习--寻找实际被控对象传函(验证调参效果) 一.前文总结 这篇文章主要寻找英文论文,然后提取里面实际被控对象的物理模型,用LADRC控制器进行控制,然后用三种方法验证其中的控制效果. ...
- FMEA学习(1总概)
FMEA:Failure Mode and Effects Analysis 失效:功能在规定条件下,达不到预期,有突然功能失效,功能衰减等 风险:对实现预期结果有潜在影响的所有不确定因素 FMEA分 ...
- LADRC的学习——换被控对象进行仿真测试
LADRC控制器的检验--用不同的被控对象测验 一.前文总结 这篇文章主要根据清华大学的硕士陈星写的论文:自抗扰控制器参数整定方法及其热工过程中的应用 进行学习. 参考文献为: [1] Zhiqi ...
- LADRC的学习——用simulink搭建仿真模型
作者:墨心: 时间:2019.7.25 用simulink搭建仿真模型 前面两篇博客主要讲了ADRC的相关概念和知识,并且尝试着搭建模型和仿真,之后学习了PID的相关知识,了解了Kp,Ki,Kd三个参 ...
- LADRC的学习——PID的学习
PID部分的学习 上文介绍了ADRC的理论,并试着按照自己的理解用Matab编程实现韩老师论文中的算法,但是对调节参数和一些地方还不太懂,因此我打算从头开始理解,从PID的好坏开始学习理解,看Kp,K ...
- Python接口自动化脚本业务框架总概(一)
目录 接口自动化框架目录 基础类封装概览 基础类封装方法详解 Log.py文件 Request.py文件 Python是目前主流的接口自动化脚本语言之一. 本专栏将联系业务介绍使用python接口自动 ...
- 用cocos2d 2.1制作一个过河小游戏(1): 总概
今天老师布置了任务,要大家分小组设计"牧师与恶魔过河"的游戏并使用cocos2d框架实现.虽然之前自己一直有跟随兴趣学习iOS开发,但是先前所有的开发都只是基于简单应用的,很少涉及 ...
- DotNetty学习—— 总章(索引)
前一阵子学习了基于.net core的Socket编程.觉得很是有趣.准备深入学习一下Socket编程,听闻Java的Netty框架很是优秀.所以今天来了解一下-DotNetty 这个东西是怎么来的呢 ...
- 计算机系统结构总概,计算机系统结构概论
第一章计算机系统结构概论,,目录,计算机系统的多级层次结构计算机系统结构.组成与实现计算机系统的软硬取舍.性能评测及定量设计原理软件.应用.器件对系统结构的影响系统结构中的并行性发展和计算机系统的分类 ...
最新文章
- JQuery获取append后的动态元素:live()和on()
- MVVM模式的3种command总结[2]--RelayCommand
- 颜宁:批评一下当年的「颜宁同学」
- excel 区间人数柱状图_Excel中,区间统计的3种技巧都不掌握,那就真的OUt了!
- 连接linux工具Mtr,Linux常用网络工具:路由扫描之mtr
- 16 CO配置-控制-产品成本控制-产品成本计划编制-定义成本构成结构
- Swift语言高速入门
- 深度学习笔记(35) 滑动窗口的卷积实现
- Python md5 sha1 的使用
- 数据驱动测试之——CSV+TestNG
- DPM 2012 R2恢复Exchange 2013单用户邮箱
- [裴礼文数学分析中的典型问题与方法习题参考解答]4.5.7
- while循环python次数定义_Python学习笔记之While循环用法分析
- 最新常用会计科目表及详细解释
- 《研究生英语科技论文写作》学习笔记
- IPHONE屏幕大小,分辨率解析
- 驾驶员理论考试系统的设计与实现(论文+源码)_kaic
- Smart210学习记录-------内存初始化
- canvas-vue彩色丝带展示
- Linux小知识:查看当前最耗费CPU的线程(Arthas工具)
热门文章
- python 实现SOM: 函数更新
- tensorflow: 重置/清空计算图
- PHP Overview
- luogu P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles (递推)
- Iphone通过ssh进行访问
- AForge.net简介和认识
- javascript 将时间戳格式化
- 网站防盗链就是那么简单
- SQL系统教程一(表之间的连接关系)
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(59)-BLL层重构