Este proyecto documenta el desarrollo de un robot autónomo para una competencia en la cátedra Técnicas y Dispositivos Digitales II de la Universidad Nacional de Mar del Plata.
El objetivo fue crear un robot capaz de navegar y salir de un laberinto organizado en una cuadrícula de 4×4 casillas, en el menor tiempo posible.
El robot está implementado sobre una FPGA DE0-Nano con un procesador Altera Cyclone® IV.
La programación combina técnicas de diseño digital —como lógica combinacional y máquinas de estado finito— escritas en un lenguaje de descripción de hardware (HDL).
El robot cuenta con los siguientes sensores y actuadores para la navegación:
-
Sensores laterales (analógicos):
Ubicados a ambos lados del robot, detectan la presencia de paredes.
Entregan valores de 12 bits que permiten distinguir entre detección de pared (valor alto) y ausencia de pared (valor bajo).
Estos umbrales son configurables según las condiciones del entorno. -
Sensor de obstáculo (digital):
Detecta la presencia de una pared frontal.
Un valor0indica pared detectada, mientras que1indica camino libre. -
Sensor de línea (digital):
Permite determinar la posición del robot dentro de la cuadrícula al reconocer líneas negras y blancas del suelo. -
Motores:
Dos motores de tracción (MOTOR AyMOTOR B), controlados mediante un driver L298N, permiten el movimiento y la rotación del robot.
El desarrollo se organizó en cuatro subsistemas principales, implementados en módulos independientes dentro de la FPGA:
Utiliza los sensores laterales para mantener la trayectoria y ajustar la velocidad de los motores evitando colisiones.
Se implementa mediante una máquina de estados finitos (FSM) con los estados Idle, Pared_Izq, Pared_Der y Centrado.
Realiza giros precisos de 90° o 180° al detectar obstáculos frontales.
Su FSM emplea un contador interno que asegura la precisión temporal del movimiento.
Usa el sensor de línea para detectar cambios de casilla y actualizar la posición y orientación del robot (Norte, Sur, Este u Oeste).
Actúa como el cerebro del sistema, integrando la información de los demás módulos.
Implementa el algoritmo de Flood-Fill, que permite determinar el camino más corto hacia la salida del laberinto.
Las decisiones de movimiento (avanzar, girar, detenerse) se determinan en función del entorno percibido.
El algoritmo Flood-Fill actualiza dinámicamente los pesos de cada celda del laberinto en función de la distancia al objetivo.
Durante la exploración, el robot:
- Lee los sensores y detecta paredes adyacentes.
- Actualiza los pesos del mapa en memoria.
- Decide la dirección con menor peso.
- Repite el proceso hasta alcanzar la salida.
- Máximo De Lellis
- Matías Estrada
- Santiago Mosler
- Franco Rabini
- Lucas Starita
Facultad de Ingeniería
Cátedra: Técnicas y Dispositivos Digitales II
Año: 2024