Estoy intentando diseñar un robot, un trazador de líneas básicamente, pero la pega es que, en lugar de que los sensores estén colocados en la parte delantera, van a estar colocados en la parte trasera.
Así que estoy tratando de desarrollar un algoritmo, pero no he tenido ningún éxito hasta ahora. Lo mejor que se me ocurre es que cuando llega una curva y los sensores la detectan, el robot retrocede y toma la curva.
Eso es lo que se me ocurre.
He intentado buscarlo en Google, pero parece que a nadie se le ha ocurrido antes. Entonces, ¿puedo conseguir un algoritmo eficiente?
Utilizo un microcontrolador ATmega 128.
Respuestas
¿Demasiados anuncios?No has visto un algoritmo para esto antes porque es una tontería! :) ¡Por eso los perros tienen su paquete de sensores por delante!
El problema es que cuando se detecta la salida de la línea, ya es demasiado tarde para corregirla. Además, si tu robot se parece a otros robots que siguen la línea, cuando giras para volver al rumbo los sensores se mueven en la dirección equivocada, lo que provoca más confusión y problemas de detección.
Tu método de "retroceder y volver a intentarlo" va por buen camino, pero no es perfecto. Permítame sugerir un par de cosas. Ten en cuenta que lo que sigue es pura especulación. Aunque he escrito un software de navegación para vehículos autónomos, esto podría no ser 100% correcto, o incluso ser posible con tu hardware.
Lo que su robot necesita es un mapa. Básicamente, un modelo interno del campo de juego (es decir, el suelo con una línea). También necesita una precisión de retroceso lo suficientemente buena como para poder crear este mapa y navegar por él.
Inicialmente el mapa está vacío y a medida que el robot se desplaza va rellenando el mapa con los lugares donde encuentra la línea y los que no. Si el robot se sale de la línea, tendrá que dar marcha atrás para volver a ella. Esta maniobra podría ser algo más que un simple retroceso. Podría incluir algún giro o lo que sea para ayudar a reubicar la línea más fácilmente y rellenar más el mapa.
En algún momento el mapa es lo suficientemente completo como para contener toda la línea. Supongo que la línea es un bucle gigante. El robot puede cambiar de modo y tratar de navegar por el recorrido basándose principalmente en el mapa. Utiliza los sensores para determinar cuándo se desvía de lo esperado, y entonces se corrige a sí mismo. De este modo, puede compensar algún deslizamiento de las ruedas o la inexactitud de su retroceso.
Este tipo de software no es trivial, pero no imposible. Necesitarás una buena cantidad de RAM para almacenar el mapa, y tus motores/ruedas necesitarán algunos codificadores rotativos en ellos. ¡Pero puede ser un proyecto divertido y gratificante!
Ciertamente, es posible hacerlo, pero como señaló David Kessner, es muy difícil hacerlo con un robot tradicional de dos ruedas.
Imagina lo que ocurre cuando el sensor se da cuenta de que la línea está ligeramente desviada hacia un lado. ¿Hacia dónde debe girar el robot? Si gira hacia un lado, el sensor está ahora por encima de la línea, pero el robot se aleja de ella. Gira hacia el otro lado, y el robot se dirige hacia la línea, pero el sensor está más lejos de la línea. Hagas lo que hagas, pierdes.
Sin embargo, si estás construyendo este robot desde cero, hay una solución. Utiliza ruedas omnidireccionales.
Usando estas ruedas, y algunas matemáticas inteligentes, puedes hacer que tu robot conduzca como si ¡todo el robot estaba realmente detrás del sensor! Tendrás que dedicar algo de tiempo a estudiar el comportamiento de las ruedas y a resolver las matemáticas, ya que es demasiado para explicarlo aquí.
Para empezar, aquí hay un video genial de la ruedas en acción :
Otra forma de abordar este problema es hacer que el sensor se mueva.
Como he mencionado anteriormente, si el robot se dirige en la dirección correcta, entonces el sensor obviamente se moverá fuera de la línea. Entonces, ¿por qué no montar el sensor en una cola móvil y devolverlo a la línea?
En realidad, la mejor manera de hacerlo es concentrarse en la cola. Servo la cola para que el sensor se mantenga siempre por encima de la línea.
Ahora acopla la dirección y la cola. Cuando la cola se mueve, también lo hacen las ruedas de dirección. El robot se dirigirá en la dirección correcta y no perderá la línea.