Hola
Tengo que simular un robot en matlab, que utilice lógica fuzzy (de mi materia de inteligencia artificial), el robot debe de llegar a un objetivo esquivando un obstáculo, de manera que el robot eliga la mejor opción de llegar al objetivo.
Hasta ahora ya conseguí dibujar los objetos (el robot, el obstáculo y el objetivo), y pude hacer que se muevan las coordenadas para aparentar movimiento, con ciclos while e if, sin embargo no se aplica lógica fuzzy, es decir debo de agregarle una función triangular que ya tengo, pero no se como implementarla a mi codigo.
Este es mi código:
clear all, close all, clc
angulo=90;
g=.5;
l=.5;
origx=0;
origy=0;
angulo_=90;
g_=.5;
l_=.5;
origx_=5;
origy_=8;
angulo_est=90;
g_est=.5;
l_est=.5;
origx_est=5;
origy_est=6;
[x_square1,y_square1] =barra(angulo,g,l,origx,origy);
[x_square2,y_square2] =barra(angulo_,g_,l_,origx_,origy_);
[x_square3,y_square3] =barra(angulo_est,g_est,l_est,origx_est,origy_est);
plot(x_square1,y_square1,'-b',...
x_square2,y_square2,'-b',...
x_square3,y_square3); axis([-20 20 -20 20]);
grid
pause (.3);
while origx ~= origx_ || origy ~= origy_
if origx ~= origx_ && origy ~= origy_
if origx < origx_ && origy < origy_
if origx + 1 == origx_est && origy + 1 == origy_est
origx = origx + 1
else
origx = origx + 1
origy = origy + 1
end
elseif origx > origx_ && origy > origy_
if origx - 1 == origx_est && origy - 1 == origy_est
origx = origx - 1
else
origx = origx - 1
origy = origy - 1
end
elseif origx < origx_ && origy > origy_
if origx + 1 == origx_est && origy -1 == origy_est
origx = origx + 1
else
origx = origx +1
origy = origy - 1
end
else origx > origx_ && origy < origy_
if origx -1 == origx_est && origy + 1 == origy_est
origy = origy + 1
else
origx = origx - 1
origy = origy +1
end
end
elseif origx ~= origx_
if origx < origx_
if origx + 1 == origx_est && origy == origy_est
origy = origy - 1
else
origx = origx + 1
end
else origx > origx_
if origx - 1 == origx_est && origy == origy_est
origy = origy + 1
else
origx = origx -1
end
end
else origy ~= origy_
if origy < origy_
if origy + 1 == origy_est && origx == origx_est
origx = origx + 1
else
origy = origy + 1
end
else origy > origy_
if origy - 1 == origy_est && origx == origx_est
origx = origx - 1
origy = origy - 1
else
origy = origy -1
end
end
end
[x_square1,y_square1] =barra(angulo,g,l,origx,origy);
[x_square2,y_square2] =barra(angulo_,g_,l_,origx_,origy_);
[x_square3,y_square3] =barra(angulo_est,g_est,l_est,origx_est,origy_est);
plot(x_square1,y_square1,'-b',...
x_square2,y_square2,'-b',...
x_square3,y_square3); axis([-20 20 -20 20]);
grid
pause (.3);
end
clc
¿cómo podría agregarle lógica fuzzy en lugar del ciclo while e if?
Utilizando dos entradas (angulo de inclinacion y distancia al obstaculo) y una salida (angulo de giro)
Cualquier respuesta se agradece