📄 haoqiang.m
字号:
% fuzzy control
a=newfis('fuzzy','mamdani')
a=addvar(a,'input','x',[0 100]);
a=addvar(a,'input','phi',[0 180]);
a=addvar(a,'output','sita',[-30 30]);
a=addmf(a,'input',1,'nb','trampf',[0 0 25.26 30.75]);
a=addmf(a,'input',1,'ps','trampf',[50.72 59.8 63.76 69.8]);
a=addmf(a,'input',1,'pb','trampf',[65 73.94 100 100]);
a=addmf(a,'input',1,'ns','trampf',[30.3 35.1 43.3 49.6]);
a=addmf(a,'input',1,'zo','trampf',[44.6 50.4 52 56.22]);
a=addmf(a,'input',2,'nb','trampf',[0 0 31.19 38.8]);
a=addmf(a,'input',2,'nm','trampf',[34.5 45.5 58.3 66.43]);
a=addmf(a,'input',2,'ns','trampf',[61.7 64.05 79.3 87.9]);
a=addmf(a,'input',2,'zo','trampf',[81.7 88 91.7 99.3]);
a=addmf(a,'input',2,'ps','trampf',[94 97 115 121]);
a=addmf(a,'input',2,'pm','trampf',[118 127 142 149]);
a=addmf(a,'input',2,'pb','trampf',[148 160 180 180]);
a=addmf(a,'output',1,'nb','trampf',[-30 -30 -23.3 -21.7]);
a=addmf(a,'output',1,'nm','trampf',[-22.62 -20.7 -13.9 -10.7]);
a=addmf(a,'output',1,'ns','trampf',[-12.47 -10.54 -5.317 -3.091]);
a=addmf(a,'output',1,'zo','trampf',[-4.37 0.0794 0.354 3.65]);
a=addmf(a,'output',1,'ps','trampf',[2.64 5.75 10.08 11.73]);
a=addmf(a,'output',1,'pm','trampf',[10.6 12.9 22.47 24.37]);
a=addmf(a,'output',1,'pb','trampf',[22.3 24.5 30 30]);
rulelist=[1 1 1 1 1;
1 2 1 1 1;
1 3 1 1 1;
1 4 2 1 1;
1 5 2 1 1;
1 6 7 1 1;
1 7 7 1 1;
2 1 2 1 1;
2 2 2 1 1;
2 3 4 1 1;
2 4 5 1 1;
2 5 6 1 1;
2 6 7 1 1;
2 7 7 1 1;
3 1 1 1 1;
3 2 1 1 1;
3 3 6 1 1;
3 4 7 1 1;
3 5 7 1 1;
3 6 7 1 1;
3 7 7 1 1;
4 1 2 1 1;
4 2 3 1 1;
4 3 2 1 1;
4 4 3 1 1;
4 5 4 1 1;
4 6 6 1 1;
4 7 6 1 1;
5 1 1 1 1;
5 2 1 1 1;
5 3 2 1 1;
5 4 4 1 1;
5 5 5 1 1;
5 6 6 1 1;
5 7 7 1 1;]
a=addrule(a,rulelist);
a=setfis(a,'Defuzzmethod','centroid');
%main
clear;
l=1;
v=5;
ts=0.5;
fuzzyfis=readfis('fuzzy.fis');
x(1)=20;
y(1)=300;
phi(1)=160;
N=2000;
for i=1:1:N-1
inputcanshu=[x(i),phi(i)];
outputcanshu=evalfis(inputcanshu,fuzzyfis);
sita(i)=outputcanshu;
x(i+1)=x(i)-v*ts*cos(phi(i)*pi/180);
y(i+1)=y(i)-v*ts*sin(phi(i)*pi/180);
phi(i+1)=phi(i)-(v*ts/l)*tan(sita(i)*pi/180);
if(y(i+1)<0)
break;
end
end
for i=1:1:length(x)
plot(x(i),y(i),'*');
grid;
axis ([-100 200 0 300]);
xlabel('x');ylabel('y');
title('卡车倒车入库演示');
F(i) = getframe;
end
%plot(x,y,'*');
%axis equal;
%grid;
%xlabel('x');ylabel('y');
%title('卡车倒车入库演示');
movie2avi(F,'fuzzy.avi');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -