• Viernes 1 de Noviembre de 2024, 07:20

Autor Tema:  Lógica fuzzy - en robot movil  (Leído 1085 veces)

ale_jannet4

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Lógica fuzzy - en robot movil
« en: Jueves 4 de Junio de 2009, 00:03 »
0
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