Tabla de contenido:

Inteligencia artificial en el robot de conducción de laberintos LEGO EV3: 13 pasos
Inteligencia artificial en el robot de conducción de laberintos LEGO EV3: 13 pasos

Video: Inteligencia artificial en el robot de conducción de laberintos LEGO EV3: 13 pasos

Video: Inteligencia artificial en el robot de conducción de laberintos LEGO EV3: 13 pasos
Video: Webinar Robotuk: Como construir tu propio robot y competir con él (Español) 2024, Mes de julio
Anonim
Image
Image
Cómo se resuelve un laberinto
Cómo se resuelve un laberinto

Este es un robot simple y autónomo con algo de inteligencia artificial. Está diseñado para explorar un laberinto y cuando se coloca en la entrada, para conducir hasta la salida y evitar los callejones sin salida. Es mucho más complicado que mi proyecto anterior, que simplemente atravesó el laberinto. Aquí, el robot debe recordar la ruta que ha recorrido, eliminar los callejones sin salida, almacenar la nueva ruta y luego seguir la nueva ruta.

Mi robot anterior se describe aquí:

El robot está construido con LEGO Mindstorms EV3. El software EV3 se ejecuta en una computadora y genera un programa, que luego se descarga a un microcontrolador llamado Bloque EV3. El método de programación está basado en iconos y de alto nivel. Es muy fácil y versátil.

Suministros

PARTES

  1. Conjunto LEGO Mindstorms EV3
  2. Sensor ultrasónico LEGO Mindstorms EV3. No está incluido en el conjunto EV3.
  3. Cartón ondulado para el laberinto. Dos cajas deberían ser suficientes.
  4. Un pequeño trozo de cartón fino para ayudar a estabilizar algunas esquinas y paredes.
  5. Pega y pega con cinta adhesiva para unir las piezas de cartón.
  6. Un sobre rojo de tarjetas de felicitación para identificar la salida del laberinto.

INSTRUMENTOS

  1. Navaja para cortar el cartón.
  2. Regla de acero para facilitar el proceso de corte.

SOFTWARE

El programa está aquí:

Paso 1: cómo se resuelve un laberinto

MÉTODO DE CONDUCCIÓN POR LABERINTO

Hay varios métodos para navegar por un laberinto. Si estás interesado en estudiarlos, están muy bien descritos en el siguiente artículo de Wikipedia:

Elegí el método de seguimiento de la pared de la izquierda. La idea es que el robot mantenga una pared en su lado izquierdo tomando las siguientes decisiones a medida que avanza por el laberinto:

  1. Si es posible girar a la izquierda, hágalo.
  2. De lo contrario, siga recto si es posible.
  3. Si no puede ir a la izquierda o en línea recta, gire a la derecha, si es posible.
  4. Si nada de lo anterior es posible, este debe ser un callejón sin salida. Giro de vuelta.

Una advertencia es que el método podría fallar si el laberinto tiene un bucle. Dependiendo de la ubicación del bucle, el robot podría seguir dando vueltas y vueltas alrededor del bucle. Una posible solución para este problema sería que el robot cambiara a la regla de seguidor de pared de la derecha si se diera cuenta de que iba en bucle. No incluí este refinamiento en mi proyecto.

RESOLVER EL LABERINTO PARA ENCONTRAR UN CAMINO DIRECTO

Mientras conduce por el laberinto, el robot debe memorizar el camino que recorre y eliminar los callejones sin salida. Lo logra almacenando cada giro e intersección en una matriz, verificando combinaciones específicas de giros e intersecciones a medida que avanza, y reemplazando las combinaciones que incluyen un callejón sin salida. La lista final de giros e intersecciones es el camino directo a través del laberinto.

Los posibles giros son: Izquierda, Derecha, Atrás (en un callejón sin salida) y Recta (que es una intersección).

Las combinaciones se reemplazan de la siguiente manera:

  • "Izquierda, Atrás, Izquierda" se convierte en "Recta".
  • "Izquierda, Atrás, Derecha" se convierte en "Atrás".
  • "Izquierda, Atrás, Derecho" se convierte en "Derecha".
  • "Derecha, Atrás, Izquierda" se convierte en "Atrás".
  • "Derecho, atrás, izquierda" se convierte en "derecha".
  • "Derecho, Atrás, Derecho" se convierte en "Atrás".

CÓMO MANEJA MI LABERINTO EL ROBOT

  1. Cuando el robot comienza a conducir, ve un espacio a la derecha y almacena Straight en la lista de la matriz.
  2. Luego gira a la izquierda y agrega Left a la lista. La lista ahora contiene: Recta, Izquierda.
  3. Con un callejón sin salida, da la vuelta y agrega Back a la lista. La lista ahora contiene: Derecho, Izquierda, Atrás.
  4. Pasando el carril que usó desde la entrada, agrega Straight a la lista. La lista ahora contiene: Recta, Izquierda, Atrás, Recta. Reconoce una combinación y cambia de Izquierda, Atrás, Directa a Derecha. La lista ahora contiene Derecho, Derecho.
  5. Con un callejón sin salida, da la vuelta y agrega Back a la lista. La lista ahora contiene: Derecho, Derecha, Atrás.
  6. Después del giro a la izquierda, la lista contiene Recta, Derecha, Atrás, Izquierda. Reconoce una combinación y cambia a Derecha, Atrás, Izquierda a Atrás. La lista ahora contiene Straight, Back.
  7. Después del siguiente giro a la izquierda, la lista contiene Recta, Atrás, Izquierda. Cambia esa combinación a Derecha. La lista ahora contiene solo Derecha.
  8. Pasa un espacio y agrega Straight a la lista. La lista ahora contiene Derecha, Recta.
  9. Después del giro a la derecha, la lista contiene Derecha, Recta, Derecha, que es la ruta directa.

Paso 2: Consideraciones al programar el robot

CONSIDERACIONES PARA CUALQUIER MICROCONTROLADOR

Cuando el robot decide girar, debe hacer un giro amplio o avanzar una distancia corta antes de girar y, después de girar, avanzar una distancia corta nuevamente sin verificar el sensor. La razón de la primera distancia corta es que el robot no debería chocar contra la pared después del giro, y la razón de la segunda distancia corta es que después de que el robot haya girado, el sensor vería el espacio largo del que acababa de llegar., y el robot pensaría que debería girar de nuevo, lo que no es lo correcto.

Cuando el robot detecta una intersección a la derecha pero no es un giro a la derecha, he descubierto que es bueno que el robot avance unas 10 pulgadas (25 cm) sin verificar sus sensores.

CONSIDERACIONES ESPECÍFICAS DE LEGO MINDSTORMS EV3

Aunque LEGO Mindstorms EV3 es muy versátil, no permite más de uno de cada tipo de sensor conectado a un ladrillo. Se podían conectar en cadena dos o más ladrillos, pero no quería comprar otro ladrillo, por lo que utilicé los siguientes sensores (en lugar de tres sensores ultrasónicos): sensor de infrarrojos, sensor de color y sensor ultrasónico. Esto funcionó bien.

Pero el sensor de color tiene un rango muy corto, de aproximadamente 2 pulgadas (5 cm), lo que lleva a algunas consideraciones especiales, como se describe a continuación:

  1. Cuando el sensor de color detecta una pared en el frente y el robot decide girar a la derecha o girar, debe retroceder primero, a fin de tener suficiente espacio para girar sin chocar contra la pared.
  2. Ocurre un problema complicado con algunas intersecciones "rectas". Debido al corto alcance del sensor de color, el robot no puede determinar si detecta una intersección "Recta" adecuada o el paso previo a un giro a la derecha. He intentado solucionar este problema configurando el programa para que almacene un "Directo" en la lista cada vez que el robot detecte uno, y luego elimine más de un "Directo" en una fila de la lista. Esto soluciona la situación en la que un giro a la derecha sigue a un "recto" en el laberinto, pero no la situación en la que hay un giro a la derecha sin un "recto" antes. También intenté configurar el programa para eliminar una "recta" si está justo antes de una "derecha", pero esto no funciona si una vuelta a la derecha sigue a una "recta". No he podido encontrar una solución que se adapte a todos los casos, aunque supongo que sería posible que el robot mire la distancia recorrida (leyendo los sensores de rotación del motor) y decida si es una "recta" o una derecha. girar. No pensé que valiera la pena hacer esta complicación con el propósito de demostrar el concepto de IA en este proyecto.
  3. Una ventaja del sensor de color es que distingue entre el marrón de una pared y el rojo de la barrera que usé en la salida, y proporciona una manera fácil para que el robot decida cuándo ha terminado el laberinto.

Paso 3: el programa principal

El programa principal
El programa principal

LEGO Mindstorms EV3 tiene un método de programación basado en iconos muy conveniente. Los bloques se muestran en la parte inferior de la pantalla de visualización de la computadora y se pueden arrastrar y soltar en la ventana de programación para crear un programa. El Bloque EV3 se puede conectar a la computadora mediante un cable USB, Wi-Fi o Bluetooth, y luego se puede descargar el programa desde la computadora al Bloque.

El programa consta de un programa principal y varios "Mis bloques" que son subrutinas. El archivo cargado contiene el programa completo, que está aquí:

Los pasos del programa principal son los siguientes:

  1. Defina e inicialice la variable de conteo de turnos y la matriz.
  2. Espere 5 segundos y diga "Adelante".
  3. Inicie un bucle.
  4. Conduce por el laberinto. Cuando se alcanza la salida, se sale del bucle.
  5. Mostrar en la pantalla del Brick, las intersecciones encontradas en el laberinto hasta ahora.
  6. Compruebe si el camino debe acortarse.
  7. Muestre las intersecciones en la ruta acortada.
  8. Vuelva al paso 4.
  9. Después del bucle, conduzca por el camino directo.

La captura de pantalla muestra este programa principal.

Paso 4: Mis bloques (subrutinas)

Mis bloques (subrutinas)
Mis bloques (subrutinas)

Se muestra Navigate My Block, que controla cómo el robot atraviesa el laberinto. La letra es muy pequeña y puede que no sea legible. Pero es un buen ejemplo de lo versátiles y poderosas que son las declaraciones if (llamadas Switches en el sistema LEGO EV3).

  1. La flecha n. ° 1 apunta a un interruptor que verifica si el sensor de infrarrojos ve un objeto a más de una distancia específica. Si es así, se ejecuta la serie superior de bloques. Si no es así, entonces el control se pasa a la serie grande de bloques inferiores, donde se encuentra la flecha n. ° 2.
  2. La flecha n. ° 2 apunta a un interruptor que verifica qué color ve el sensor de color. Hay 3 casos: sin color en la parte superior, rojo en el medio y marrón en la parte inferior.
  3. Dos flechas n. ° 3 apuntan a interruptores que verifican si el sensor ultrasónico ve un objeto a más de una distancia específica. Si es así, se ejecuta la serie superior de bloques. De lo contrario, el control se pasa a la serie inferior de bloques.

Los My Blocks para acortar el camino y para conducir el camino directo son más complicados y serían totalmente ilegibles, por lo que no se incluyen en este documento.

Paso 5: Comenzar a construir el robot: la base

Comenzando a construir el robot: la base
Comenzando a construir el robot: la base
Comenzando a construir el robot: la base
Comenzando a construir el robot: la base

Como se mencionó anteriormente, LEGO Mindstorms EV3 no permite más de uno de cada tipo de sensor conectado a un ladrillo. Usé los siguientes sensores (en lugar de tres sensores ultrasónicos): sensor infrarrojo, sensor de color y sensor ultrasónico.

Los pares de fotos a continuación muestran cómo construir el robot. La primera foto de cada par muestra las partes necesarias y la segunda foto muestra las mismas partes conectadas entre sí.

El primer paso es construir la base del robot, utilizando las piezas que se muestran. La base del robot se muestra al revés. La pequeña parte en forma de L en la parte posterior del robot es un soporte para la espalda. Se desliza mientras el robot se mueve. Esto funciona bien. El kit EV3 no tiene una pieza de tipo bola rodante.

Paso 6: Parte superior de la base, 1

Parte superior de la base, 1
Parte superior de la base, 1
Parte superior de la base, 1
Parte superior de la base, 1

Este paso y los siguientes 2 pasos son para la parte superior de la base del robot, el sensor de color y los cables, que son cables de 10 pulgadas (26 cm).

Paso 7: parte superior de la base, 2

Parte superior de la base, 2
Parte superior de la base, 2
Parte superior de la base, 2
Parte superior de la base, 2

Paso 8: Parte superior de la base, 3

Parte superior de la base, 3
Parte superior de la base, 3
Parte superior de la base, 3
Parte superior de la base, 3

Paso 9: Sensores infrarrojos y ultrasónicos

Sensores infrarrojos y ultrasónicos
Sensores infrarrojos y ultrasónicos
Sensores infrarrojos y ultrasónicos
Sensores infrarrojos y ultrasónicos

A continuación, están el sensor de infrarrojos (en el lado izquierdo del robot) y el sensor ultrasónico (a la derecha). Además, los 4 pines para colocar el ladrillo en la parte superior.

Los sensores infrarrojos y ultrasónicos están ubicados verticalmente en lugar de la horizontal normal. Esto proporciona una mejor identificación de las esquinas o extremos de las paredes.

Paso 10: Cables

Cables
Cables

Los cables se conectan al Brick de la siguiente manera:

  • Puerto B: motor grande izquierdo.
  • Puerto C: motor grande derecho.
  • Puerto 2: sensor ultrasónico.
  • Puerto 3: sensor de color.
  • Puerto 4: sensor de infrarrojos.

Paso 11: Paso final en la construcción del robot: decoración

Paso final en la construcción del robot: decoración
Paso final en la construcción del robot: decoración
Paso final en la construcción del robot: decoración
Paso final en la construcción del robot: decoración

Las alas y las aletas son solo para decoración.

Paso 12: construye un laberinto

Construir un laberinto
Construir un laberinto
Construir un laberinto
Construir un laberinto

Dos cajas de cartón ondulado deberían ser suficientes para el laberinto. Hice las paredes del laberinto de 5 pulgadas (12,5 cm) de alto, pero 4 pulgadas (10 cm) deberían funcionar igual de bien si no tienes cartón corrugado.

Primero, corto alrededor de las paredes de las cajas, a 10 pulgadas (25 cm) de la parte inferior. Luego corté alrededor de las paredes a 5 pulgadas de la parte inferior. Esto proporciona varias paredes de 5 pulgadas. Además, corté alrededor de la parte inferior de las cajas, dejando aproximadamente 1 pulgada (2,5 cm) adheridas a las paredes para mayor estabilidad.

Las diversas piezas se pueden cortar y pegar o pegar con cinta adhesiva donde sea necesario para formar el laberinto. Debe haber un espacio de 11 o 12 pulgadas (30 cm) entre las paredes laterales en cualquier camino con un callejón sin salida. La longitud no debe ser inferior a 10 pulgadas (25 cm). Estas distancias son necesarias para que el robot se dé la vuelta.

Es posible que algunas de las esquinas del laberinto deban reforzarse. Además, es necesario evitar que algunas paredes rectas se doblen si incluyen una esquina de cartón enderezada. Se deben pegar pequeños trozos de cartón delgado en la parte inferior en esos lugares, como se muestra.

La salida tiene una barrera roja que consta de medio sobre rojo para tarjetas de felicitación y una base hecha de 2 piezas de cartón delgado, como se muestra.

Paso 13: El laberinto

El laberinto
El laberinto

Una advertencia es que el laberinto no debe ser grande. Si los giros del robot están en un ligero ángulo con respecto al correcto, las discrepancias se suman después de algunos giros y el robot podría chocar contra las paredes. Tuve que jugar varias veces con la configuración de Rotaciones de los giros para poder conducir con éxito incluso el pequeño laberinto que hice.

Una forma de solucionar ese problema es incluir una rutina de enderezado del camino que mantendría al robot a una distancia específica de la pared izquierda. No incluí esto. El programa ya es bastante complicado y es suficiente para demostrar el concepto de IA en este proyecto.

OBSERVACIÓN FINAL

Este fue un proyecto divertido y una gran experiencia de aprendizaje. Espero que también os resulte interesante.

Recomendado: