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

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐