Si te gusta este blog...
¡Visita mi blog en inglés!
Una vez terminado el armazón y preparada la parte mecánica, era el momento de empezar a construir la lógica del robot para dotarle de vida. Para empezar preparé un circuito en una placa de prototipos con el PIC16F84 y monté una pequeña placa con 2 sensores ópticos (CNY70) para hacer que el robot rastrease el perfil de una linea negra sobre el suelo.
Con estos elementos el microbot ya estaba listo para dar su primer paseo (796K, OGM) No os riáis demasiado de los movimientos del microbot porque a estas alturas ya estaba en la cumbre de su capacidad.
Era hora de probar el modo de visión completa con todos los ojos funcionando a la vez. Quedaban 8 patas de entrada/salida del PIC16F84 libres así que preparé una placa con 8 CNY70. Con 8 sensores ópticos es posible seguir el trazado de una linea con movimientos suaves y es posible la detección de las intersecciones. (Lo sabía porque había visto vídeos de microbots funcionando bien con sólo 8 sensores ópticos)
Un problema que sé ve en el vídeo de los primeros pasos es la excesiva torsión del microbot al efectuar giros. Se puede ver mejor en este vídeo (496Kb, OGM). Mi idea era que el robot rastrease las lineas rectas y las curvas que tuvieran poco ángulo mediante las dos ruedas traseras en modo de tracción y el servomotor como único sistema de dirección. De esta manera se podría hacer una trayectoria de permanente movimiento y sin las correcciones de trayectoria típicas de los microbots rastreadores basados en dos ruedas motrices. El movimiento seria fluido y suave. Cuando el microbot llegase a una curva con ángulo demasiado cerrado (como un ángulo recto), se pasaría a un modo tradicional: las ruedas traseras se usarían como ruedas de dirección para girar al microbot sobre sí mismo. Sin embargo el robot no está mecánicamente preparado para soportar esto: las ruedas de tracción y la de dirección están excesivamente próximas y además la rueda de dirección se agarra sorprendentemente bien al suelo (es una rueda de mecano). El resultado es que el microbot al final no puede usar las ruedas de tracción para apoyarse y hacer giros cerrados, o al menos no puede hacerlo sin retorcerse y desarmarse.
Este es un problema grave y la solución fue poner los sensores ópticos más próximos al eje de giro (entre las ruedas de tracción y la de dirección en vez de en la parte frontal del microbot) y hacer giros usando exclusivamente la rueda de dirección, es decir, haciendo giros mucho más abiertos. En los vídeos el robot se separa demasiado de la recta pero porque aún no estaba preparado un sistema que ajustase el ángulo de giro (A estas alturas la rueda de dirección o bien no gira, o gira 20 grados a la izquierda o 20 grados a la derecha).
Por consejo de Pedrito, decidí cambiar el sentido del microbot. A partir de este momento iríamos de culo. En todos los sentidos. Ahora usaría la rueda de dirección en la parte trasera del robot para poder hacer giros mas bruscos. Aunque esta decisión al principio no dio mas que problemas (859Kb, OGM), a medio plazo (Al hacer que el robot girase un ángulo proporcional a la separación acumulada respecto de la linea) parecía viable.
Era el momento de hacer una placa para la electrónica. Y este es el momento donde las cosas se empezaron a torcer definitivamente. Usé una placa de tiras y hice todas las soldaduras por el reverso de la placa. Enorme error. El tener 1000 cables cruzando el circuito de punta a punta no me dio mas que problemas: falsos contactos y falsas soldaduras imposibles de detectar.
Con la placa haciéndome falsos contactos irresolubles, era el momento de probar si el robot era mínimamente capaz de recorrer el circuito. Primero unas pruebas de visión (859K, OGM). Y unos paseitos sencillitos con la nueva placa (799K, OGM) y el primer intento de controlar el servomotor de dirección (847K, OGM).
Como curiosidad, el robot tiene el peso descentrado y por eso al hacer los cambios de sentido bruscos tiende a hacer caballitos (778K, OGM). Una vista más cercana (132K ,OGM). La solución era poner mas peso justo encima de la rueda de dirección. La solución improvisada fue la mejor posible: añadí un blister de pilas adicional y así, además de incrementar el peso, el robot tenia reserva de combustible.
Ahora que los problemas de tracción estaban (mas o menos) resueltos, quedaba resolver lo más duro: El algoritmo de dirección. Las primeras pruebas salieron bastante bien (409K, OGM) y los primeros paseos con todos los sistemas funcionando fueron alentadores (796K, OGM). Pero enseguida quedó patente que la acumulación de deficiencias físicas y los problemas con la electrónica del robot eran imposibles de arreglarse por software (800K, OGM). Al final el robot únicamente tenia 3 ojos (CNY70) funcionando (no centrados) y no se podía hacer mucho por software para solventar la falta de datos.
Y no tenía tiempo de preparar una PCB nueva. Mi robot me había salido tonto.
Aún sabiendo que el robot no funcionaba bien, era el momento de llevarlo a competir. Las pruebas en la pista (784K, OGM) demostraron que el robot hacia lo que quería, lo que le valió el apelativo de "robot rebelde" ya que "posee algoritmos de inteligencia artificial avanzados y de vez en cuando se le cruzan los cables y decide por si mismo abandonar su tarea principal de seguir la linea negra para explorar a su libre albedrío su entorno cercano". Cualquiera que me escuchara decir eso y entendiera mínimamente de robótica se lo tomaría a coña o pensaría que soy un perfecto gilipollas. Pero una chica se lo creyó. Suficiente.
Evidentemente el día de la competición tuve una actuación patética. El robot
se empezó a mover y a los 3 segundos ya estaba descalificado. Por
salirse del recorrido, aunque si le hubiesen dejado un par de segundos
más igual atropellaba a algún espectador. ¿Bonus?
Sin embargo esta actuación tan decepcionante no es el final de L1.
Yo creo que el armazón tiene posibilidades. Algún día le haré una nueva
placa de control y con todos los sensores funcionando será
capaz de seguir la linea mucho mejor.
Ya no se pueden añadir nuevos comentarios en esta historia.