Ya podemos lanzarnos con uno de los grandes retos clásicos de programación si hablamos de robots móviles autónomos: escapar del laberinto.
Os hablé de los robots diseñados para resolver laberintos pero ahora lo vais a poder realizar vosotros mismos utilizando el kit básico de mBot de Makeblock, sin ningún sensor o servo adicional. Vuelve a leer aquel artículo para ponerte en situación y recordar los diferentes algoritmos que se suelen utilizar.
Existen diferentes tipos de laberintos pero si esta es vuestra primera vez programando un robot resuelve laberintos lo mejor será empezar por algo “sencillo”. Nuestro laberinto tendrá su entrada y salida en el perímetro y no contendrá islas ni lazos cerrados. Puede haber divergencia de caminos y callejones sin salida. Estos tres ejemplos de laberintos podrían servir. Nuestro robot debe ser capaz de resolver cualquiera de ellos.
Para resolver este tipo de laberintos será suficiente con implementar un algoritmo para robot seguidor de paredes. Este algoritmo consiste en mantener el seguimiento de una pared priorizando un lado, derecha o izquierda, y mantener el seguimiento hasta encontrar la salida del laberinto. Una calle sin salida hay que tomarla como una pared que no acaba.
La mayoría de laberintos recreativos que hay en grandes jardines y parques son laberintos de este tipo precisamente por seguridad, para que puedan ser resueltos sencillamente siguiendo una pared.
Para poder entender mejor cómo funciona un seguidor de pared aquí podéis ver cómo debería resolver mBot uno de los laberintos que os mostraba arriba dando prioridad a la derecha o a la izquierda. El algoritmo no es lo complicado, viendo el diagrama se puede entender el funcionamiento, lo interesante es averiguar la manera de implementarlo en nuestro robot, en este caso con mBot de Makeblock.
¿A que ahora se entiende mejor? Te sorprenderías de la cantidad de laberintos que se pueden resolver así.
Cuando vayáis haciendo pruebas no hace falta que utilicéis un laberinto de pruebas tan grande como los que os he mostrado. Si conseguís que el robot resuelva un laberinto pequeño, podrá resolver uno grande. Realmente no importa el tamaño del laberinto mientras sea de este tipo.
Una vez conocida la solución que le vamos a dar al problema, llega el momento de diseñar la implementación, tanto a nivel de mecatrónica y utilización de sensores como de programación.
En la mecatrónica y sensores ya hemos realizado el reto 8 para poder seguir una pared con el sensor de ultrasonidos y el reto 10 para detectar una pared frontal con el sensor sigue líneas. Ha habido que echar mano del pensamiento lateral puesto que para los retos con mBot nos estamos limitando al set básico, sin sensores adicionales. Precisamente el objeto de limitar el uso de sensores al kit básico es que podáis potenciar vuestro pensamiento lateral con el uso de los recursos disponibles.
Y en la parte de programación también tenéis mucho trabajo hecho con los retos anteriores, sólo falta juntar todo y darle forma. Debéis pensar que el robot se puede encontrar con cruces, giros a derecha o izquierda y callejones sin salida.
Dejaremos unas semanas para resolver este súper reto.
Si tenéis alguna duda sólo tenéis que comentar. ¡Ánimo!
Solución reto mBot resuelve laberintos.
En el vídeo podéis ver la solución para crear un robot resuelve laberintos con mBot utilizando mBlock.
Hay otras posibles soluciones sobretodo si utilizásemos algún servo o varios sensores de ultrasonidos, pero recordad que queremos resolverlo con los elementos del kit básico de mBot, sin ningún sensor adicional.
He seguido la dirección que habíamos ido viendo en retos anteriores, utilizando un algoritmo seguidor de pared dotando al robot de capacidad para avanzar paralelo a la pared de su derecha, tal y como vimos en el reto 8 utilizando el sensor de ultrasonidos montado de lado, y que pueda detectar giros a izquierda debido a paredes detectadas delante tal y como explicamos en el reto 10 detectando obstáculos con sensor sigue líneas montado frontal.
Como en la mayoría de ocasiones no os comparto el programa para descargar porque es más practico que lo hagáis vosotros aunque sea copiando del video, os ayudará a entender su funcionamiento. Los valores de velocidades y distancias deben de ser adaptados a las características de vuestro robot, sobre todo dependiendo de la alimentación que utilicéis. Probad y depurad el programa a vuestro gusto hasta que el robot sea infalible, y plantead otras soluciones si se os ocurren.
Actualización programa mBot resuelve laberintos con dos sensores de ultrasonidos.
Otra opción es montar un sensor de ultrasonidos en la parte frontal del robot en vez de utilizar el sensor sigue líneas que se utilizó para no utilizar sensores adicionales a los que vienen con el kit básico.
En este caso, además del sensor de ultrasonidos instalado en el lateral, instalaremos un segundo sensor de ultrasonidos en la posición habitual de mBot, en la parte delantera.
Las variaciones que hay que hacer en el programa son mínimas, pero vamos a detallarlo a través de un vídeo:
Recordad que este tipo de algoritmo no resuelve absolutamente todos los laberintos. ¿Os atrevéis a avanzar un poco más y probar otros algoritmos de resolución? ¿Sabríais memorizar el recorrido que va haciendo mBot?
Hemos conseguido que mBot resuelva el laberinto, pero todavía no es “inteligente”. En un futuro volveremos sobre los laberintos para seguir avanzando en la programación de robots autónomos inteligentes.
ACTUALIZACIÓN: Podéis consultar este tutorial para cargar el programa en mBot ya que en el vídeo del reto resuelve laberintos no llegaba a verse.
Si queréis ser vosotros los que lancéis el reto con Lego Mindstorms EV3, mBot o Arduino no tenéis más que poneros en contacto o dejar un comentario.
Cada semana un nuevo reto, estad atent@s!
Destacada página para aprender. Eccelente didáctica
Muchas gracias!
Que arduino se utliza?
Se utiliza mBot que está basado en una Arduino UNO.
buenas noches pero es que quiero preguntar si tienen algun video para armarlo o imagenes de su parte delantera
Tienes vídeo y alguna foto de detalle en el reto 10 https://juegosrobotica.es/retos/reto-10/
Recuerda que para abordar el reto del robot resuelve laberintos con mBot es recomendable realizar primero el reto 8 y 10.
Se utiliza una escuadra para posicionar el sensor sigue líneas de manera que esté orientado hacia delante.
Si después de ver el reto 10 sigues necesitando más imágenes me lo dices y lo monto de nuevo.
Saludos!
Dani S.
Hola pregunta me podrias proporcionar uan foto de tu robot, por favor
Hola Iván,
El robot es un mBot de Makeblock como puedes ver en los vídeos. Tienes una imagen en esta misma página https://juegosrobotica.es/wp-content/uploads/laberinto.jpg
Si por alguna razón necesitas una foto con más detalle o en distinto ángulo ponte en contacto y lo vemos.
Saludos!
Dani
Hola, que dimensiones mínimas aconsejas que tengan las paredes del laberinto entre ellas??
Entre 20 y 25 cm. Lo mejor es que lo programes y pruebes a que de la vuelta en un “callejón” sin salida que es el más complicado en este sentido y compruebes que no llegue a tocar las paredes al girar. Una vez comprobada esa medida ya puedes construir un laberinto completo.
Saludos,
Dani S.
Una calle sin salida hay que tomarla como una pared que no acaba… ¡Excelente! ese el secreto…
Ningún secreto… sólo el algoritmo! Gracias por comentar Danilo!
Hola Dani podrías ayudarme con una programación para lego minstrom Ev 3 , necesito resolver un desafío de seguimiento de líneas y al final tiene un laberinto corto, pero no puedo hacer que al terminar las líneas me acepte la programación de entrada al laberinto, te agradecería un monto es para un proyecto escolar..
Te contacto por correo por si fuera sencillo de solucionar y lo vemos.
Saludos,
Dani
estubo muy bueno el video me parece una muy buena logica para resolver laberintos. podria compartir un video acerca la construccion del robot y de los componentes que utiliza. se le agredece.
La construcción del robot se basa en el montaje original de mBot con las dos modificaciones con el sensor de ultrasonidos colocado de lado y el sigue líneas mirando al frente. Puedes verlo con más detalle en los retos 8 y 10.
Hola buenas, me gustaría ver una solución al laberinto en EV3 porfavor, gracias
Hola Ignacio,
Lo anoto para un futuro, aunque básicamente es lo mismo: vigilar siempre el mismo lado.
Saludos
Hola, quisiera saber que debo de cambiar en esta programación para que funcione con el Arduino Uno R3?
Hola Juan Ricardo,
mBot internamente es una Arduino UNO por lo que el concepto es el mismo. Simplemente habría que adaptar las sentencias dependiendo del puente en H o del módulo de potencia que hayas utilizado para comandar los motores.
Saludos
Muy buenas tardes me interesaria que me instruyeran para conectar tres sensores de ecolocalizacion en mi Mbot para el reto de laberinto y tres siguelineas en el reto de siguelineas
porque no me sale la programación
Hola David,
¿Se trata de algún reto en alguna competición o del reto propuesto en Juegos Robótica?
Podemos darte soporte específico en lo que necesites si eres alumno de nuestra plataforma. Puedes darte de alta con soporte si lo necesitas.
Si tienes dudas muy concretas podemos ayudarte por aquí.
Saludos