机器手臂直接型模糊自适应控制----详细的说明
%刘金琨——机器人模糊自适应控制%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
回复 1 # 博大广阔 的帖子
这个例子中模糊值和实际值之间有没有估计误差,就像刘金坤老师的那样,有的估计误差还很大。如果作出模糊和实际的图像,会不会比较明显。 回复 2 # stone2002_79 的帖子
呵呵。。。看来阁下也是行家!!是的,该控制算法缺少对估计误差的补偿。可以外加切换律补偿(采用饱和函数等)、也可以采用鲁棒项补偿误差。 回复 3 # 博大广阔 的帖子
惭愧,我只是用到模糊了,要看一下。刚写了一篇文章,被老板批的不行。而且还不知道怎么改........ 我现在也在整理一篇文章。。。你的控制对象是机械臂么?采用什么控制算法?我QQ450765397,方便话我们QQ上交流
页:
[1]