1 什么是迭代学习控制

迭代学习控制(iterative learning control,简称ILC)由Uchiyama于1978年首先提出,不过因为论文由日文撰写,影响不是很大。1984年,Arimoto等人用英文介绍了该方法。它是指不断重复一个同样轨迹的控制尝试,并以此修正控制律,以得到非常好的控制效果的控制方法。
迭代学习控制的特点是“在重复中学习”,通过反复的迭代修正,达到改善控制效果的目的。迭代学习控制的原理是根据系统前次运行所获得的输出误差信息,在控制过程中不断修正控制输入,随着迭代的进行,逐步改进下一次控制输入,以使控制效果越来越好。迭代学习控制仅需要较少的先验知识,对于处理模型未知且具有重复运动性质的系统,是一种行之有效的控制策略。

迭代学习的控制律用最简单的表述方式就是:

解释一下这几个变量的意义:
—— 第k+1次控制时的控制器在t时刻的输出
—— 第k次控制时控制器在t时刻的输出
—— 第k次控制时参考输出和实际输出的误差
这里L算式可以是任意算法。常用的是P算法、PD算法或PID算法。按照误差更新方式又分为开环迭代和闭环迭代。
以下是一个PD开环迭代学习跟踪机械臂运动程序:
实现轨迹完全跟踪

```MATLAB
clear all;
close all;
m=20;
n=100;
gama=0.9;
x1(1:m,1:n)=0;
x2(1:m,1:n)=0;
u(1:m,1:n)=0;
y(1:m,1:n)=0;
e(1:m,1:n)=0;
err(1:m,1:n)=0;% b=beronulli(1,1000,1);
% w=randn(m,n)/5;
for n=1:100  y_d(n) = sin(8*(n-1)/50);
%y_d(n) = 5*sin(n*pi/100)+0.3*cos(n*pi/100);
%     if n<=300
%         y_d(n) =5*(-1).^round(n/100);
%     else if n<=700
%         y_d(n) = 5*sin(n*pi/100)+0.3*cos(n*pi/100);
%     else
%         y_d(n) =5*(-1).^round(n/100);
%     end
%     end%y_d(n)=12*n.^2*(n-1);%y_d(n) = sin(2*pi*n/50);
end
for k=1:mfor t=2:n-1   x1(k,t)=(-0.8*x1(k,t-1))-0.22*x2(k,t-1)+0.5*u(k,t-1);x2(k,t)=x1(k,t-1)+u(k,t-1);y(k,t-1)=(x1(k,t-1)+0.5*x2(k,t-1));e(k,t-1)=y_d(t-1)-y(k,t-1);err(k,t-1)=abs(e(k,t-1)).^2;      endfor t=2:n-1  u(k+1,t-1)=u(k,t-1)+gama*e(k,t)+0.3*e(k,t-1);    enderrn(k)=max(err(k,:));
endplot(y_d(1:90),'-r');hold onplot(y(1,1:90));hold on;plot(y(2,1:90));hold on;plot(y(3,1:90));hold on;plot(y(5,1:90));hold on;
% plot(y(8,1:90));hold on;
%plot(y(10,1:90));hold on;
%plot(y(15,1:90));hold on;
figure
plot(err(5,1:90));
%plot(err(12,1:20));hold on
%plot(err(15,1:20));hold on
k=1:20;
figure;plot(k,errn(k))

分享一个简单的迭代学习机器人双臂控制(MATLAB)相关推荐

  1. 手机语音翻译怎么做?分享一个简单办法,快速实现中英文语音对话

    翻译分为文字翻译和语音翻译,文字翻译使用手机浏览器直接搜索就能完成,但实现语音翻译还是比较困难的,随着科技的发展,语音翻译用手机也能轻松实现了,就算进行中英文语音实时对话也是非常简单的事,那么手机该如 ...

  2. 使用 Python 实现一个简单的智能聊天机器人

    使用 Python 实现一个简单的智能聊天机器人 文章目录 使用 Python 实现一个简单的智能聊天机器人 简要说明 总体的思路 需要准备的环境 接收用户的语音输入, 并将其存为音频文件 调用百度A ...

  3. php运行socket服务器,PHP_php简单socket服务器客户端代码实例,本篇文章分享一个简单的socket - phpStudy...

    php简单socket服务器客户端代码实例 本篇文章分享一个简单的socket示例,用php.实现一个接收输入字符串,处理并返回这个字符串到客户端的TCP服务. 产生一个 socket 服务端 /*文 ...

  4. 分享一个简单好看的科技公司官网模板-纯HTML+CSS

    分享一个简单好看的科技公司官网模板-纯HTML+CSS 首页: 首页的HTML源码部分: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr ...

  5. 【Python】潜水小白,分享一个简单基础的tkinter的猜拳小游戏

    潜水小白,分享一个简单基础的tkinter的猜拳小游戏 没什么技巧,代码如下,喜欢的可以试验一下. 图片是我自己的,可一手动换成你想要的(tkinter默认好像支持gif格式的,其它好像要转换一下,另 ...

  6. c dbhelper类下载mysql_分享一个简单的C#的通用DbHelper类(支持数据连接池)

    每次新项目的时候,都要从头去找一遍数据库工具类.这里分享一个简单实用的C#的通用DbHelper工具类,支持数据连接池. 连接池配置 DbHelper类 public classDBHelper { ...

  7. 搭建去中心化交易所——分享一个简单的DEX项目代码及文档

    分享一个简单的DEX项目代码及文档 Dex.top项目源码及文档分享 // DEx.top - Instant Trading on Chain // // Author: DEx.top Teamp ...

  8. 使用 Python 实现一个简单的智能聊天机器人(附完整代码)

    文章目录 简要说明 总体的思路 需要准备的环境 接收用户的语音输入,并将其存为音频文件 技术提升 调用百度AI接口, 识别音频文件并以文本信息返回 请求智能机器人, 发送文本信息, 返回智能聊天内容 ...

  9. 给大家分享一个简单的例子 给SWF加一个壳

    //今天给发家分享下 一个简单的给SWF加壳处理,用到的类是Loader package {//我有一点不明白哦,明明可以用Loader来动态的加载SWF 为什么很多人喜欢用loadMovie 有懂的 ...

最新文章

  1. 远程重启h3c路由器_【一号机房】教你怎么配置H3C路由器NAT及远程telnet
  2. 【python初识】数据和对象
  3. Python 学习笔记(一)
  4. android中组件获取焦点
  5. 真机调试及上线简略流程
  6. java jsp公共异常页面_Java如何创建JSP错误页面以处理异常?
  7. C++ 虚拟继承与虚基类
  8. 便利店小程序需要服务器吗,便利店开发小程序的功能
  9. HDU 6312.Game-博弈-签到题 (2018 Multi-University Training Contest 2 1004)
  10. 通信系统设计中的凸优化问题
  11. JavaScript高级程序设计(第3版)中文高清完整pdf
  12. matlabrobert锐化_图像锐化matlab算法
  13. Win10 Build 18237发布:登录屏幕启用毛玻璃特效
  14. 关于使用vue-quill-editor出现p标签的解决方案
  15. 根据经纬度计算距离(百度地图)
  16. 【爬坑】解决“ImportError: cannot import name ‘soft_unicode‘ from ‘markupsafe‘ ”的问题
  17. Android aosp10,AOSP Android10 hook dlsym
  18. Cisco路由器入侵
  19. 又有12款APP违规收集用户信息,下架整改
  20. Unity 3D学习笔记(5)物体的碰撞/触发检测

热门文章

  1. Win10注册表无法保存对权限所作的更改拒绝访问
  2. nmap的网络拓扑实现
  3. 位段(域)机制——结构体的特殊实现
  4. 强烈推荐一款开源项目! (OPC)微服务能力开放平台!
  5. glGenTextures(GLsizei n, GLuint *textures)函数说明
  6. 「思考人生」未来的路该怎么走下去
  7. 汇编实现数字的输入与输出
  8. 运行时错误-2147024770 或者 word运行时错误424
  9. 根据屏幕大小自适应根字体大小
  10. matlab ps液化,photoshop液化工具崩溃怎么办 ps液化工具崩溃解决方法