martes, 23 de febrero de 2021

Tecnología Industrial I.E.S. Pintor Antonio López

Tecnología Industrial I.E.S. Pintor Antonio López


Solución del "Callejón sin salida" en el modo MAZE, laberinto

Posted: 23 Feb 2021 01:33 AM PST

 Hola a tod@s.

En este tema vamos a ver una posible solución al problema del callejón sin salida cuando nuestro coche robot está intentando salir de un laberinto.

Hemos llamado callejón sin salida a una situación en la que el coche robot encuentra una pared de frente (ultrasonido detecta algo a menos de 20cm) y al mirar a los lados las dos paredes, derecha e izquierda, están también a menos de 20cm. En ese caso el planteamiento ha sido hacer retroceder al coche para salir del callejón parando cada cierta distancia para ver si ya hay salida hacia alguno de los lados.

Para poder programarlo primero he creado una función que realiza toda la acción de obtener la distancia de las paredes a la izquierda y a la derecha "comparar_distancias". Esta función empieza conectando el servo (en mi caso el componente servomotor se llama así en la programación "servo" y está conectado al pin 2 de arduino), mirando hacia los lados y guardando el valor en las respectivas variables para finalmente desconectar el servo.

Trabajar con esta funciona simplificará bastante la programación después:


Entrando ya en la programación la primera orden (mediante otra función) será que el coche avance y si encuentra un obstáculo delante (distancia <= 20) pare y ejecute la función "comparar_distancias" mediante la cual obtendremos un valor para las variables dist_der y dist_izq. Si ambas distancias son < que 20 entramos en un mientras del que no saldremos hasta que alguna de las dos sea igual o mayor que 20. En ese mientras iremos haciendo retroceder al coche (500ms) y ejecutando la función comparar_distancias para ir obteniendo nuevos valor de dist_der y dist_izq.

Una vez el coche sale del callejón y alguno de los dos valores dist_der y dist_izq es > = que 20 el programa continua con la programación clásica del modo MAZE, laberinto, en el que comprobamos que lado tiene un valor mayor para que el coche gire en esa dirección.





Como siempre en programación, existen más formas de programar la solución al callejón sin salida incluso los bloques del ejemplo son adaptables y mejorables. Os animo a probar vuestras propias ideas.

Un saludo,
Raúl.

No hay comentarios:

Publicar un comentario