%-----------Robot Navigation--------Dhaval N Gajjar----Roll no:4-----------
%-----------------dngajjar.007@gmail.com-----------------------------------
%------------www.facebook.com/dhavalngajjarphotography---------------------
clc;clear all;close all;
a=newfis('robot navigation');
%-----------Input-1----Heading Angle-----------
a.input(1).name='heading-angle';
a.input(1).range=[-90 90];
a.input(1).mf(1).name='negative';
a.input(1).mf(1).type='trimf';
a.input(1).mf(1).params=[-5000 -45 -5];
a.input(1).mf(2).name='zero';
a.input(1).mf(2).type='trimf';
a.input(1).mf(2).params=[-25 0 25];
a.input(1).mf(3).name='positive';
a.input(1).mf(3).type='trimf';
a.input(1).mf(3).params=[5 45 5000];
%-----------Input-2----left_Obstacle-----------
a.input(2).name='left-Obstacle';
a.input(2).range=[0 60];
a.input(2).mf(1).name='far';
a.input(2).mf(1).type='trimf';
a.input(2).mf(1).params=[-1000 5 20];
a.input(2).mf(2).name='medium';
a.input(2).mf(2).type='trimf';
a.input(2).mf(2).params=[15 30 45];
a.input(2).mf(3).name='near';
a.input(2).mf(3).type='trimf';
a.input(2).mf(3).params=[40 55 1000];
%-----------Input-3----front_Obstacle-----------
a.input(3).name='front-Obstacle';
a.input(3).range=[0 60];
a.input(3).mf(1).name='far';
a.input(3).mf(1).type='trimf';
a.input(3).mf(1).params=[-1000 5 20];
a.input(3).mf(2).name='medium';
a.input(3).mf(2).type='trimf';
a.input(3).mf(2).params=[15 30 45];
a.input(3).mf(3).name='near';
a.input(3).mf(3).type='trimf';
a.input(3).mf(3).params=[40 55 1000];
%-----------Input-4----right_Obstacle-----------
a.input(4).name='right-Obstacle';
a.input(4).range=[0 60];
a.input(4).mf(1).name='far';
a.input(4).mf(1).type='trimf';
a.input(4).mf(1).params=[-1000 5 20];
a.input(4).mf(2).name='medium';
a.input(4).mf(2).type='trimf';
a.input(4).mf(2).params=[15 30 45];
a.input(4).mf(3).name='near';
a.input(4).mf(3).type='trimf';
a.input(4).mf(3).params=[40 55 1000];
%-----------Output-1----left_velocity-----------
a.output(1).name='left-velocity';
a.output(1).range=[0 30];
a.output(1).mf(1).name='low'
a.output(1).mf(1).type='trimf';
a.output(1).mf(1).params=[-500 2.5 10];
a.output(1).mf(2).name='average';
a.output(1).mf(2).type='trimf';
a.output(1).mf(2).params=[7.5 15 22.5];
a.output(1).mf(3).name='fast';
a.output(1).mf(3).type='trimf';
a.output(1).mf(3).params=[20 27.5 500];
%-----------Output-2----right_velocity-----------
a.output(2).name='right-velocity';
a.output(2).range=[0 30];
a.output(2).mf(1).name='low'
a.output(2).mf(1).type='trimf';
a.output(2).mf(1).params=[-500 2.5 10];
a.output(2).mf(2).name='average';
a.output(2).mf(2).type='trimf';
a.output(2).mf(2).params=[7.5 15 22.5];
a.output(2).mf(3).name='fast';
a.output(2).mf(3).type='trimf';
a.output(2).mf(3).params=[20 27.5 500];
%----------plot of mf of all i/p-o/p---------------------------------------
subplot(3,2,1);
plotmf(a,'input',1);
title('Input-1 : Heading Angle');
subplot(3,2,2);
plotmf(a,'input',2);
title('Input-2 : Left Obstacle');
subplot(3,2,3);
plotmf(a,'input',3);
title('Input-3 : front Obstacle');
subplot(3,2,4);
plotmf(a,'input',4);
title('Input-4 : Right Obstacle');
subplot(3,2,5);
plotmf(a,'output',1);
title('Output-1 : Left Velocity');
subplot(3,2,6);
plotmf(a,'output',2);
title('Output-2 : Right Velocity');
%-----------Rulelist for 4-input(3 mf each) & 2-output(3 mf each),---------
% therefore,total rule= 3x3x3x3 = 27
rulelist=[
1 1 1 1 3 1 1 1
1 1 1 2 2 1 1 1
1 1 1 3 3 1 1 1
1 1 2 1 1 1 1 1
1 1 2 2 2 2 1 1
1 1 2 3 2 2 1 1
1 1 3 1 2 2 1 1
1 1 3 2 3 3 1 1
1 1 3 3 3 3 1 1
1 2 1 1 1 3 1 1
1 2 1 2 1 3 1 1
1 2 1 3 1 3 1 1
1 2 2 1 1 2 1 1
1 2 2 2 2 3 1 1
1 2 2 3 2 3 1 1
1 2 3 1 2 3 1 1
1 2 3 2 2 3 1 1
1 2 3 3 2 3 1 1
1 3 1 1 1 3 1 1
1 3 1 2 1 3 1 1
1 3 1 3 1 3 1 1
1 3 2 1 2 3 1 1
1 3 2 2 2 3 1 1
1 3 2 3 2 3 1 1
1 3 3 1 2 3 1 1
1 3 3 2 2 3 1 1
1 3 3 3 2 3 1 1
2 1 1 1 3 1 1 1
2 1 1 2 2 1 1 1
2 1 1 3 3 1 1 1
2 1 2 1 1 1 1 1
2 1 2 2 2 1 1 1
2 1 2 3 3 2 1 1
2 1 3 1 2 2 1 1
2 1 3 2 2 2 1 1
2 1 3 3 3 3 1 1
2 2 1 1 1 2 1 1
2 2 1 2 3 1 1 1
2 2 1 3 3 1 1 1
2 2 2 1 2 3 1 1
2 2 2 2 3 2 1 1
2 2 2 3 3 2 1 1
2 2 3 1 2 2 1 1
2 2 3 2 3 3 1 1
2 2 3 3 3 3 1 1
2 3 1 1 1 3 1 1
2 3 1 2 1 3 1 1
2 3 1 3 1 3 1 1
2 3 2 1 2 3 1 1
2 3 2 2 2 3 1 1
2 3 2 3 2 2 1 1
2 3 3 1 2 2 1 1
2 3 3 2 3 3 1 1
2 3 3 3 3 3 1 1
3 1 1 1 3 1 1 1
3 1 1 2 2 1 1 1
3 1 1 3 3 1 1 1
3 1 2 1 1 1 1 1
3 1 2 2 3 2 1 1
3 1 2 3 3 2 1 1
3 1 3 1 3 3 1 1
3 1 3 2 3 2 1 1
3 1 3 3 3 2 1 1
3 2 1 1 1 3 1 1
3 2 1 2 2 1 1 1
3 2 1 3 3 1 1 1
3 2 2 1 1 2 1 1
3 2 2 2 3 2 1 1
3 2 2 3 3 2 1 1
3 2 3 1 3 3 1 1
3 2 3 2 3 2 1 1
3 2 3 3 3 2 1 1
3 3 1 1 1 3 1 1
3 3 1 2 2 1 1 1
3 3 1 3 3 1 1 1
3 3 2 1 3 3 1 1
3 3 2 2 3 2 1 1
3 3 2 3 3 2 1 1
3 3 3 1 3 3 1 1
3 3 3 2 3 1 1 1
3 3 3 3 3 2 1 1
];
%----------------------Adding a rule to fis--------------------------------
a=addrule(a,rulelist);
%-------------------Now Simulating every rule------------------------------
evalfis([2 2 2 2], a)
f=1;
while(f~=0)
f=input('\nEnter 0 if you dont want to do further simulation:');
if f~=0
T=input(sprintf('\nEnter input data,\n[ HA(-45 0 45) LO(5 30 55) FO(5 30 55) RO(5 30 55) ] :'));
v=evalfis(T,a);
fprintf('\nLeft Velocity : %f & Right Velocity : %f\n\n\n',v(1),v(2));
else
clc;
fprintf('\n\n!!! Hope you enjoyed !!!\n\n\n');
end
end