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.
Antes de empezar a construir el robot, necesitaba un programador para el cerebro PIC16F84. En principio queria construir un programador que se conectara al ordenador mediante el puerto paralelo, ya que el software que habia visto para programar PICs bajo linux normalmente usa paralelo. Sin embargo, buscando por internet, encontré la página del proyecto PTK4L (Un entorno de desarrollo para PIC bajo linux) donde recomiendan un circuito para conexión por puerto serie. Como este era sencillito y el autor prometia que funcionaba, este fue el diseño elegido. De todas formas, al final no usé linux para programar el PIC (Sacrilegio?). Para el desarrollo y la programación usé MPLAB/ICPROG bajo windows, por tanto si ahora necesitara construir un nuevo programador, me dejaria de compatibilidades y probablemente me iria directamente a este, que es el que recomienda todo el mundo.
Lo primero que hice respecto a la electrónica fueron los puentes H. Un puente H viene a ser la etapa de potencia del circuito y sirve para controlar el sentido de giro de los motores y aislar su alimentación. Regla número 1: para evitar problemas, la alimentación de los motores (7v-12v con picos de tensión y corriente) debe ser independiente de la alimentación de la electrónica (5v constantes). En esta página (amuva) esta muy bien descrito (con lenguaje muy sencillo) el comportamiento de estos circuitos. Al final en el robot no usé puentes H caseros, me decanté or usar puentes H integrados (L293) para facilitarme la vida.
Ahora voy a comentar la construcción del armazón. Si os preguntais si tenia dibujado el robot en papel o si tenia un diseño CAD o un modelado tridimensional... Para nada. Tenia en la cabeza mas o menos como deberia quedar montado, pero al final el resultado no se parece ni de coña a lo que tenia ideado. La verdad es que la cosa quedó bastante bien y además, es un armazón muy versátil, ya que permite cambiar de sitio las cosas sin problemas.
Podéis verlo en las siguientes fotos. Usé unas láminas de plexiglas de 3mm, un material muy cómodo de trabajar porque se corta con bastante facilidad (con dremel) y no es demasiado frágil (Es dificil que rompa al hacerle agujeros y se puede dejar un acabado chulo sin rayones). Como anclaje para las piezas usé las escuadras del mecano, ya que las escuadras comerciales mas pequeñas están pensadas para montaje de muebles y no pueden ser usadas para estas cosas por tener ángulos abiertos, de más de 90º. La tornilleria es una mezcla de 3mm y 2.5mm dependiendo de la masa a soportar.
Para la construcción de las ruedas usé 2 CDs de 12cm pegados. Para mejorar el agarre hice el procedimiento típico de añadir "la goma esta con la que te cortan la circulación cuando te ponen inyecciones". Para la alimentación, por un lado la electrónica se alimenta con una pila de 9v (Conectada a un regulador de tensión para limitarla a 5v constantes) y por otro lado los motores van con un blister de 4 pilas recargables AA de 1.2v (~5v al final). Si veis 2 packs de 4 pilas es porque no sabia si los motores girarian demasiado despacio a 5v y si seria necesario mas tensión, o bien si los piñones se estropearían a 10v. Al final el robot corre demasiado a 5v, así que el segundo pack se quedó como "la reserva" de combustible.
Estos son los motores usados. Son servomotores trucados a motores de continua, muy típicos en microbótica porque tienen buena disponibilidad (En cualquier tienda de modelismo) y ser muy prácticos por venir con reductora y con caja preparada para atornillar (La pega es que son bastante caros). El motor de dirección no fue trucado, es un servo normal que controla el giro mediante PWM por software.
Esta es la rueda delantera o de dirección. La rueda en sí es de mecano y las piezas que unen el motor de dirección con la rueda son también elementos del mecano.
En las siguientes fotos podéis ver cómo queda construido el armazón completo.
En las pasadas vacaciones de semana santa trabajé en la construcción de mi primer microbot, un rastreador para competir en la robolid de este año. Muchos de los que leéis este blog sabéis de mis peripecias con el robot, y para los que no, aquí contaré mis aventuras con el cacharro.
Antes de nada, adelantar que mis conocimientos de robótica (por desgracia) son nulos y como resultado el robot tiene errores de diseño graves (mecánicos) acumulados desde el primer día. Siendo consciente de ello, a tiro pasado puedo decir que montarlo y dotarle de vida me ha gustado mucho, sobre todo porque me parece una experiencia mucho mas formativa que las clases magistrales de la facultad.
Primero se impone una explicación del funcionamiento de la prueba y de como tenia pensado que el robot se comportase. En la prueba de rastreadores el objetivo es que el microbot circule por una linea negra pintada sobre un suelo blanco sobre un trazado que puede incluir lineas rectas, curvas de ángulo < 90º y bifurcaciones con un máximo de 2 caminos posibles. Un ejemplo de pista seria la siguiente:
El robot debe ser capaz de seguir el trazado de la linea sin salirse (Osea tener siempre una parte del cuerpo del robot sobre la linea) En esta prueba no hay limitaciones de peso ni tamaño, y la dificultad es puramente de programación software pues hay que encontrar un algoritmo adecuado que interprete la información capturada por los sensores ópticos y que haga que el robot responda de una manera coherente [1] con el objetivo de corregir los errores de su trayectoria.
[1] Coherente significa que se mueva de forma que siempre este encima de la linea negra al tiempo que completa el circuito en el menor tiempo posible