Logica fuzzy
Este projeto consiste em desenvolver um controlador nebuloso, simulado em MATLAB para resolver o problema de guiar um robô através de um mundo virtual com alguns obstáculos.
O projeto foi implementado com dois controladores nebulosos: um para redirecionar o robô para a “parede-alvo” e outro para girar o robô, ao detectar obstáculos. Neste projeto, a quantidade de obstáculos pode variar de 2 a 17.
O robô pode girar tanto para a direita quanto para a esquerda para desviar-se de obstáculos. Após dez tentativas de giro diante de um obstáculo, o sistema pára.
O radar tem alcance limitado; obstáculos somente são detectados estando à frente do robô e no raio de alcance do radar.
Para avaliar cada obstáculo à frente são utilizadas quatro condições:
1. Se o obstáculo está no alcance do radar
2. Se está à frente do robô
3. Se está na rota do robô
4. Se dentre os obstáculos este é o mais próximo
Após determinar o obstáculo, o sistema avalia controle que será usado para determinar o giro do robô.
Se existe obstáculo, o robô tenta desviar do mais próximo, por até 10 vezes, finalizando o programa se não conseguir. Senão existe obstáculo, o robô segue em direção ao objetivo (fundo).
O robô possui um radar localizado no seu centro e que aponta na direção do seu movimento, e é capaz de detectar obstáculos na rota de deslocamento.
Sendo
(rbX, rbY) posição do robô
(obXi, obYi) posição do obstáculo
obDist distância entre o centro do robô e o centro do obstáculo
rbAng direção do robô
atan(dY/dX) ângulo da direção que levaria o robô na direção do centro do obstáculo
angObst ângulo que indica a diferença entre a direção do robô e a reta que une o Centro do robô ao centro do obstáculo
dist1 distância da trajetória do robô ao centro do obstáculo
dist2