Skip to content

cescarcena2021/SmartRobot-FollowLine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 

Repository files navigation

SmartRobot-FollowLine 🚗

Objetivo 🎯

El objetivo de esta práctica es la programación de un kit de arduino proporcionado por la universidad. Este kit consta de un coche conectado a una placa de Arduino uno y enlazado a otra placa ESP32 con conexión wifi. El objetivo es el seguimiento de una linea mediante los sensores de infrarojos del coche. Además de esto también se pide mandar mensajes a un servidor mqtt con información de lo que va ocurriendo en el coche

image

Implementación ⚙️

Para la primera implementación lo que intentamos hacer fue una pequeña máquina de estados donde el robot transitaba en función de las lecturas del sensor de infrarrojos. Una vez tuvimos eso hecho nos pusimos manos a la obra con todo lo que se refería a la comunicación. Comenzamos enviado mensajes simples y ma tarde comenzamosa a ir añadiendo los JSONs Tambien desarollamos una función que nos permitia depurar el codigo atraves de los codigos de colores que transmitia un led Una vez teniamos una buena base de la práctica comenzamos a añadir implementaciones pero no de forma muy exitosa.

  • Intentamos crear una version que estuviera dotada de freeRTOS para que el sistama fuera mas reactivo y pudieranos nosotros asignar los prioridades que quisiéramos a las diferentes tareas. Esto no salio del todo bien ya que en vez de sernos util nos perjudicó y hacia que el bucle principal no fuinonara de la manera adecuada

  • También intentamos añadir un controlador PID para mejorar la corrección de errores y manejos de la velocidad del coche. Una vez lo tuvimos implementado, nos pusimos a ajustar los valores y nos dimos cuenta de que este o era muy inseguro e inestable y perida rápidamente la linea o era mas seguro pero también mas lento que la version anterior.

  • Para calcular la distancia a la que se tenía que parar el coche, usamos el ultrasonido que tiene el coche ubicado en al parte frontal. Este lanza una onda y en funcion de cuanto tarde en regresar calcula la distancia. Esto lo tenemos que realizar lo más rápido posible ya que el coche cambia constantemente de posición y una lectura tardia podria significar una colision. Aunque la distancia a la que se deveria detener el coche es a 8 cm este realmente lo hace a una distancia mas cercana de entre uno o dos centímetros de erro ya que este ya tenia una velocidad y una inercia.

  • Para la comunicación entre el Arduino y la placa ESP hemos usado el puero serie que ambos proporcionan. En este kit en concreto es un poco engorroso ya que hay que estar constantemente cambiando un switch que tiene la placa para subir el código a la palca o comunicarse entre ellas.

Funcionamiento

El programa comienza con la placa ESP intentandose conectar a internet y seguido de esto, al servido MQTT. Al conseguir ambas conexiones, enviará un mensaje a la placa Arduino. La placa Arduino esperará a recibir este mensaje para poder comenzar. Al obtenerlo, enviará de vuelta un mensaje de START_LAP al ESP, el cuál enviará este Json al servidor. Además de enviarlo, el Arduino guardará el tiempo de inicio para usarlo tanto en los PINGS como en el END_LAP.

Para el control del robot y que no se salga de la línea, hemos implementado una máquina de estados que dependía del lado del sensor que detectase la línea. Si era el sensor de la izquierda, las ruedas de la izquierda reducían una cuarta parte su velocidad para que así recuperase la posición. Esto ocurría de manera inversa con el sensor derecho. A su vez, se guardaba la última lectura del sensor, si era izquierda o derecha, para que si se perdía la línea, durante el recovery la encontrase.

Durante todo esto, se ejecutaba también el sensor de ultrasonidos para detectar si había un obstáculo a menos de 8 cm y así acabar la prueba. También, cada 4 s se mandabá un PING a la placa ESP para que esta lo enviase al servidor.

Dependencias 🗃️

Para que el codigo funcione correctamente es necesario instalar estas dos librerias:

MQTT 📟

Esta libreria nos permite mantener una comunicacion con el servidor e intercambiar mensajes. Para lenzar el servidor usamos mosquitto_sub con el id de el grupo correspondiente que en nustro caso es el 9

mosquitto_sub -v -h 193.147.53.2 -p 21883 -t /SETR/2023/$ID_EQUIPO/

image

FastLED 💡

Con esta libreria podemos controlar los colores del led RGD situado en la placa de Arduino.

image

Conclusión ✍️

Tras muchas pruebas y errores. Nos centramos en hacer una versión quiza mas lenta pero mas segura, sin sistema freeRTOS ni sistema PID. Simplemente una velocidad constante pero muy bien calibrada para que el coche cumpliera el objetivo, seguir la linea ...

Video demostrativo 📹

WhatsApp.Video.2023-12-22.at.18.41.51.mp4

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages