迭代学习控制方式Simulink建模与仿真
1 什么是迭代学习控制迭代学习控制(iterative learning control,简称ILC)由Uchiyama于1978年首先提出,不过因为论文由日文撰写,影响不是很大。1984年,Arimoto等人用英文介绍了该方法。它是指不断重复一个同样轨迹的控制尝试,并以此修正控制律,以得到非常好的控制效果的控制方法。迭代学习控制的特点是“在重复中学习”,通...
1 什么是迭代学习控制
迭代学习控制(iterative learning control,简称ILC)由Uchiyama于1978年首先提出,不过因为论文由日文撰写,影响不是很大。1984年,Arimoto等人用英文介绍了该方法。它是指不断重复一个同样轨迹的控制尝试,并以此修正控制律,以得到非常好的控制效果的控制方法。
迭代学习控制的特点是“在重复中学习”,通过反复的迭代修正,达到改善控制效果的目的。迭代学习控制的原理是根据系统前次运行所获得的输出误差信息,在控制过程中不断修正控制输入,随着迭代的进行,逐步改进下一次控制输入,以使控制效果越来越好。迭代学习控制仅需要较少的先验知识,对于处理模型未知且具有重复运动性质的系统,是一种行之有效的控制策略。
ILC控制适应于运行过程能够不断地重复的系统。 通常用于跟踪某一特定目标,且跟踪目标往往保持不变。(是不是非常类似于重复控制?)。ILC控制方式是一种智能控制方式,它能够通过不断迭代次数的增加不断学习进化,从而适配到最优的控制方式。ILC可以不需要关心系统的精确控制模型,只是以非常简单的控制方式就可以实现精度非常高的控制性能。
考虑重复运行的动力学系统模型如下:
迭代学习的控制律用最简单的表述方式就是:
解释一下这几个变量的意义:
—— 第k+1次控制时的控制器在t时刻的输出
—— 第k次控制时控制器在t时刻的输出
—— 第k次控制时参考输出和实际输出的误差
这里L算式可以是任意算法。常用的是P算法、PD算法或PID算法。按照误差更新方式又分为开环迭代和闭环迭代。
开环PD迭代控制律的用数学方程表示为:
闭环PD迭代控制率的数学方程表示为:
2 迭代学习控制实例
考虑一个二阶系统,其连续传递函数表述为:
当采样周期Ts=0.001时,其离散化传递函数为:
现在假设输入信号为幅值为4的10Hz正弦波,要让系统跟踪这个正弦波,采用开环PD迭代学习控制律。
3 Simulink建模
建立的Simulink系统模型如图:
这里Sine Wave是输入参考信号。Y为保存到工作空间的系统输出。uk为从Matlab的工作空间读取的上次迭代控制量。U为保存到工作空间的本次迭代控制输出量,故有关系式:
Chart为Stateflow模块,里面实现了系统建模与PD迭代控制律。Chart内部流程图如图:
Matlab中建立一个m文件来控制模型的仿真:
clc;
clear all;
T=1;%和SIMULINK中相同
Ts=0.001;
t=0:0.001:1;%采样时间和仿真时间可修改,但是要注意SIMULINK的也要修改
for k=1:1:1001
ud(k)=4*sin(2*pi*10*Ts*k);
uinit(k)=0;
end
uk=[t',uinit'];
for i=1:10
sim('ILC_stateflow');
uk=[t',U];
figure(i);
plot(t,ud','r',t,Y,'b');
end
这里设置仿真次数为10次,每一次都画出参考和输出的对照图。
运行M文件查看仿真结果:
第一次迭代
运行:
第3次迭代:
第10次迭代:
可见仿真结果非常不错,基本实现了对输入的无静差跟踪。仿真模型已上传CSDN,在我的资源中有下载。资源下载链接:
https://download.csdn.net/download/liuzhijun301/11561528
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)