博大广阔 发表于 2012-6-1 11:14

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

%刘金琨——机器人模糊自适应控制
%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=;k1=0.3;k2=1.5;            %事关扰动的大小,Q为李雅普的正定矩阵
K1=10;K2=1;ranta=50; W=0.1*rand(36,1);%ranta
x10=; %初始值
%程序需要的参数
t=0;tmax=5; n=1; u=0; h=0.001;
while t<tmax
   
=derives(t,x10,u);
       m1=h*dX;            t=t+0.5*h;X=x10+0.5*m1; %更新导数   
   =derives(t,X,u);
      m2=h*dX;            X=x10+0.5*m2;      %更新导数
    =derives(t,X,u);
   m3=h*dX;          t=t+0.5*h; X=x10+m3;   %更新导数
    =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=;
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 =derives(t,x10,u)
global Q k1 k2 K1 K2 ranta
%参考对象   
r=;
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
































stone2002_79 发表于 2012-6-4 12:32

回复 1 # 博大广阔 的帖子

这个例子中模糊值和实际值之间有没有估计误差,就像刘金坤老师的那样,有的估计误差还很大。如果作出模糊和实际的图像,会不会比较明显。

博大广阔 发表于 2012-6-4 14:20

回复 2 # stone2002_79 的帖子

呵呵。。。看来阁下也是行家!!是的,该控制算法缺少对估计误差的补偿。可以外加切换律补偿(采用饱和函数等)、也可以采用鲁棒项补偿误差。

stone2002_79 发表于 2012-6-4 17:09

回复 3 # 博大广阔 的帖子

惭愧,我只是用到模糊了,要看一下。刚写了一篇文章,被老板批的不行。而且还不知道怎么改........

博大广阔 发表于 2012-6-4 17:48

我现在也在整理一篇文章。。。你的控制对象是机械臂么?采用什么控制算法?我QQ450765397,方便话我们QQ上交流
页: [1]
查看完整版本: 机器手臂直接型模糊自适应控制----详细的说明