声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2073|回复: 4

[控制理论] 机器手臂直接型模糊自适应控制----详细的说明

[复制链接]
发表于 2012-6-1 11:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
%刘金琨——机器人模糊自适应控制
%4.1 单臂机械手臂直接自适应控制。直接采用的是控制知识,间接是被控对象的知识
%直接型模糊自适应控制是基于模糊系统设计一个反馈控制器U 和一个调整参数向量W的自适应控制规律
%似的系统能够跟踪理想的输出,
%U=W*fx : W is 可调参数,通过自适应规律。 U的输出是模糊自适应控制器输出

%跟踪效果不是很理想。。在转弯处有不好的扰动。
%本控制程序的优点:(1)可以在参数未知的情况下进行控制
%(2) 扰动考虑了摩擦为库伦摩擦和粘性摩擦的情况。设计之初没有考虑扰动。。。在有扰动的情况下扔具有较好的跟踪性能。
%(2) 对控制输出进行模糊设计
%(3)模糊隶属函数难以确定。需要经验。
%(4)经过自适应调整后面的效果越来越好
%(5)可以想象Q的数值越大,误差跟踪响应越快
%(6)控制力矩输出不平缓,这个是个大缺点
function aaa=fuzzy_adaptive_single()
clc
clear all
close all

global Q k1 k2 ranta K1 K2
%初始参数(控制器的调节参数)
Q=[200 0;0 200];k1=0.3;k2=1.5;              %事关扰动的大小,Q为李雅普的正定矩阵
K1=10;K2=1;  ranta=50; W=0.1*rand(36,1);  %ranta
x10=[1;0;W]; %初始值
%程序需要的参数
t=0;tmax=5; n=1; u=0; h=0.001;
while t<tmax
   
[u,dX]=derives(t,x10,u);
       m1=h*dX;              t=t+0.5*h;X=x10+0.5*m1; %更新导数     
     [u,dX]=derives(t,X,u);
      m2=h*dX;            X=x10+0.5*m2;      %更新导数
    [u,dX]=derives(t,X,u);
     m3=h*dX;          t=t+0.5*h; X=x10+m3;     %更新导数
    [u,dX]=derives(t,X,u);
    m4=h*dX;        
     x10=x10+(1/6)*(m1+2*m2+2*m3+m4);   
%输出
YY(:,n)=x10;time(n)=t; UU(:,n)=u; n=n+1;

end
figure(1)
t=time;
RR=[sin(2*pi*t); 2*pi*cos(2*pi*t);-(2*pi)^2*sin(2*pi*t);];
plot(time,RR(1,:),'b',time,YY(1,:),'r',time,RR(2,:),'b',time,YY(2,:),'r');grid on
figure(2)
plot(time,UU,'r');grid on
end




function [U,dX]=derives(t,x10,u)
global Q k1 k2 K1 K2 ranta
%参考对象   
r=[sin(2*pi*t); 2*pi*cos(2*pi*t);-(2*pi)^2*sin(2*pi*t);];
E=r(1:2,1)-x10(1:2,1);  %仅关注位置和速度误差
%控制规律
%(1)模糊推理输出
xi(1)=x10(1);xi(2)=x10(2);  FS1=0;
u1(1)=1/(1+exp(5*(xi(1)+2)));   %位置输入的头尾两个隶属度值
u1(6)=1/(1+exp(-5*(xi(1)-2)));
for i=2:1:5
    u1(i)=exp(-(xi(1)+1.5-(i-2))^2); %每个输入都有六个模糊子集
end

u2(1)=1/(1+exp(5*(xi(2)+2)));  %速度输入的头尾两个隶属度值
u2(6)=1/(1+exp(-5*(xi(2)-2)));
for i=2:1:5
    u2(i)=exp(-(xi(2)+1.5-(i-2))^2);
end

for i=1:1:6
  for j=1:1:6
    FS2(6*(i-1)+j)=u1(i)*u2(j);  %模糊规则采用乘积的形式
    FS1=FS1+u1(i)*u2(j);          %用于重心法,分母项的计算
  end
end
FS=FS2/FS1;                     %推理采用重心法。
%(2) 模糊规则的中心值
W=x10(3:38,:);            
U=FS*W;                          %W为模糊输出采用单点模糊集,各个值代表中心值。
%%%%------------系统计算—(可以更换不同的控制对象)—————————————————————————————————————%
g=9.8;m=1;l=0.25;d=2.0;I=4/3*m*l^2;
tol=U;
told=sign(x10(2))*(k1*abs(x10(2))+k2); %扰动有点特色!!

fx=1/I*(-d*x10(2)-m*g*l*cos(x10(1)));gx=1/I;
%----------------------------------------------------------------------%

dX(1,:)=x10(2);
dX(2,:)=fx+gx*(tol-told);

%----------权值更新------------------------------------%

A=[0 -K2;   %注意A的形式是倒数
   1 -K1];
P=lyap(A,Q);
dX(3:38,:)=ranta*E.'*P(:,2)*FS.';
end
































评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2012-6-4 12:32 | 显示全部楼层
回复 1 # 博大广阔 的帖子

这个例子中模糊值和实际值之间有没有估计误差,就像刘金坤老师的那样,有的估计误差还很大。如果作出模糊和实际的图像,会不会比较明显。
 楼主| 发表于 2012-6-4 14:20 | 显示全部楼层
回复 2 # stone2002_79 的帖子

呵呵。。。看来阁下也是行家!!是的,该控制算法缺少对估计误差的补偿。可以外加切换律补偿(采用饱和函数等)、也可以采用鲁棒项补偿误差。
发表于 2012-6-4 17:09 | 显示全部楼层
回复 3 # 博大广阔 的帖子

惭愧,我只是用到模糊了,要看一下。刚写了一篇文章,被老板批的不行。而且还不知道怎么改........
 楼主| 发表于 2012-6-4 17:48 | 显示全部楼层
我现在也在整理一篇文章。。。你的控制对象是机械臂么?采用什么控制算法?我QQ450765397,方便话我们QQ上交流
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-28 12:05 , Processed in 0.162656 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表