VIT.                

Velocista para Cosmobot 2008. Marzo.



Nombre: VIT.
Tipo: Velocista, giro con servo.
Objetivo: seguir una línea lo más rápido posible.
Hardware: coche rc escala 1/18, motor dc, servomotor.
Microcontrolador: PIC18F4520 programado en C.
Sensores: CNY70.
Otros circuitos: fuente conmutada, estapa de potencia con  mosfet IRLZ34N.
Alimentación: batería NiMh 6V.


Cosmobot fue un concurso de robótica que se celebro el pasado mes de marzo en Madrid, había dos categorías de robots, sumo y velocista. Uno de los dos robots presentados a la prueba de velocistas fue éste, para su diseño se partió de un coche rc de escala 1/18. Por un precio de unos 100 euros, tenemos batería, cargador, regulador de velocidad y la base con tracción a las cuatro ruedas, que incluye un microservo para la dirección, y un motor de corriente continua, con el logramos una velocidad más que suficiente.

A la hora de decidir las dimensiones del coche hay que tener en cuenta los radios de curvatura de la pista, para este concurso teníamos una pista de dos carriles, separados entre 10 y 15 cm, el radio de curvatura mínimo del punto medio de la distancia entre los dos carriles era de 40 cm, es decir que nos podíamos encontrar con un radio mínimo de 32.5 cm en el carril interior y 45 cm en el exterior. También contabamos con otra limitación que eran las dimensiones del robot, no podía superar las dimensiones de 30 cm de largo por 20 cm de ancho.

Dentro de estas dimensiones se eligió un coche rc de escala 1/18, aproximadamente 22 cm de largo por 10 cm de ancho, el coche era capaz de girar en esos radios de curvatura, pero a poca velocidad, esta escala resulto ser muy grande para estos radios. El robot hizó una media de 91 cm/s (algo más reales ya que corría por el carril exterior) demasiado lento para las velocidades que allí nos encontramos, el más rápido estaba sobre los 160 cm/s, y 14 robots superaron el 1 m/s, se notaba que había 5500 euros para repartir entre los tres primeros.

Contado como fue el concurso, vemos la electrónica y base del robot, siento no tener los esquemas ni pcbs (estaban en un disco que perdí) para poder detallarlo con exactitud, aprendida la lección todos los archivos de los robots que hagamos en adelanten estarán aquí.

Como base del robot usamos la versión barata del Xray, se puede encontrar en España por unos 100 euros, en China por unos $70. Si destripamos el coche nos encontramos con dos circuitos, un receptor para la emisora, que se encarga de mandar la señal de posición al servomotor y de mandar la señal de control al segundo circuito, un regulador de velocidad para el motor. Se pueden ver en la foto:



El receptor no lo usaremos para nada en nuestro velocista, el regulador de velocidad si queremos si lo podemos aprovechar, puede ser lo más conveniente ya que lo ideal es llevar un puente en H, y realizar uno para la intensidad requerida no es tarea fácil.

Este regulador de velocidad está formado por un puente en H hecho con Mosfets y su electrónica de control. Nos premite controlar en velocidad y sentido el motor y frenarlo, para ello necesitamos generar la señal de control producida por el receptor. Esta señal consiste en un PWM de 50 Hz, cuyo duty varía entre el 5% y 10% aproximadamente, siendo el valor medio de este duty el motor parado, el valor máximo la mayor velocidad hacía delante, y el valor mínimo la menor velocidad marcha atrás.

La señal producida por el receptor vista en el osciloscopio es una cosa así:

No se pulsa ningún boton del mando:


Cuando se acelera al máximo.


Cuando damos al máximo marcha atrás:


Generando esta señal con el microcontrolador podemos controlar el coche en velocidad y sentido, pero la electrónica del regulador de velocidad tiene otra opción, que es la de frenar el motor, para ello tenemos que pasar de un sentido hacía el otro con el mando directamente, es decir si tenemos el duty al 10%, pasar al 5%, esto activaría el freno del coche.

Para controlar la dirección del coche sólo tenemos que generar la señal de PWM de todo servo estándar, una señal con período entre 10 ms y 30 ms y con un duty variable que indica al servomotor a que posición debe girar. Tarea para nuestro microcontrolador.

Pues con esto nos encontramos cuando compramos un coche rc, ahora tenemos que decidir que es lo que queremos aprovechar. En este caso no se aprovecho el regulador de velocidad, lo que fue un error que explicó más tarde.

Nuestro objetivo es seguir una línea negra sobre fondo blanco a la máxima velocidad posible, en el circuito no nos encontraremos ángulos rectos ni nada parecido, tenemos un radio mínimo de curvatura dado y dos carriles por los que ir, si nos alejamos más de 10-15 cm de un carril, estamos eliminados.

En principio este puede que sea uno de los robots más simples para hacer, según queremos correr más la cosa se va complicando.

Para seguir el circuito se han puesto dos placas de sensores, una delante y otra detrás con dos objetivos, el primero medir la distancia del centro del robot a la línea, para ello necesitamos una sóla placa. Y el otro objetivo es medir la orientación del robot con respecto a la línea, para ello necesitamos las dos placas. Esto nos resulto útil para realizar cambios de carril, debido a que el radio de curvatura era muy pequeño para este robot, a la mínima que fuesemos un poco rápido se iba fuera, por lo que si ibamos siempre por el carril interior, al llegar la curva nos saliamos al exterior, la hacíamos por este carril, y una vez que el robot estuviese centrado volviamos al carril interior. Esto nos funciono para poder correr un poco más con el robot en el circuito que nos encontramos.

Otro uso que le dimos a los sensores traseros era el de controlar la velocidad del coche, en las pruebas resultó ser un coche muy estable, el centro de la placa trasera de sensores apenas se movía de la línea, por lo que en las pruebas observamos que hacíamos mejores tiempos cuando controlabamos la velocidad en función del sensor trasero activado, y el giro del servo con los delanteros. Esto nos permite que en las curvas en las que el coche va centrado de detrás no disminuya la velocidad. La pega es que en las curvas pequeñas disminuyes la velocidad más tarde, caso que solucionamos con un cambio de carril.

Placas de sensores:


Para leer la línea como se puede ver en la foto utilizamos el CNY70, sólo hay que colocarle dos resistencias y tomar la salida en el emisor o colector. Utilizamos una lectura digital sobre analógica, y no tuvimos ningún tipo de problemas de luz durante el concurso, por suerte nos encontramos con una sala en la que no había mucha iluminación ni luz solar.

Para capturar el 1 o el 0 del sensor esta vez montamos trigger smichdt en lugar de usar los internos del pic (teníamos 16 sensores), es un operacional en modo comparador que se encarga en convertir la salida en un 1 cuando la entrada supera cierto valor, y en un cero cuando no lo es, con su histéresis. Además al poner los trigger smichtt nos facilito la colocación de un diodo led en cada sensor, que nos indicaba si ese sensor estaba sobre negro o blanco, esto es muy útil a la hora de programar y ver el comportamiento del robot sobre la pista, ya que mirando el led puedes ver que sensores se activan en cada momento, si luego lo ves a cámara lenta no te pierdes detalle.

Placa de trigger:



Para leer cada sensor y actuar tenemos el microcontrolador, esta vez usamos un PIC18F4520 programado desde C, también teníamos la misma placa montada con un PIC16F877A para programar en ensamblador, estos dos PICs son compatibles pin a pin, es decir en el circuito que va uno puede ir donde va el otro. La diferencia a la hora de programación es que el 18 está pensado para ser programado desde C, además el ensamblador de los 18 anda por las 80 instrucciones, el de 16 está en treinta y algo. Mientras que el 16 no se lleva tan bien con el C, por lo que solemos hacer es si queremos usar ensamblador usar un 16F si el diseño nos lo permite, y en el resto de los casos usar un 18F. En este caso que ibamos muy mal de tiempo el C fue vital, en una semana tuvimos que hacer el hardware del segundo robot que presentamos entero y los programas de ambos robots, además de montar la pista un par de veces..

La placa del pic también incluye unos microinterruptores, casi obligatorio llevarlos en los diseños a los concursos, ya que te permiten seleccionar distintos programas u opciones del programa una vez que estás en la pista, ya que a reprogramar no suele dar tiempo y también evitas equivocarte con el programa malo. En nuestro caso llevabamos diversos valores de velocidad, para una vez que teníamos el coche sobre la pista ver lo que eramos capaces de correr. Esto debe de hacerse durante la homologación del concurso, te dan tres intentos para homologar el robot, la homologación consiste en dar dos vueltas a la pista, por lo que aquí se pueden gastar un par de intentos en intentar ajustar la velocidad máxima. Ya no tendrás otra oportunidad de hacerlo que no sea arriesgando una ronda de carrera. Almenos en este concurso esto ocurrió así.

También incluimos un led tricolor en la placa del pic, lo que nos permitía ver en que carril el robot se creía que estaba asignandole un color a cada carril, muy útil durante la programación y para detectar fallos, ya que si el robot se cree que está en el carril equivocado se va fuera.

Placa del pic con el 16F877A.



Para controlar el motor necesitamos usar un driver, ya que el pic no es capaz de suministras las intensidades necesarias que el motor requiere. En los coches de RC nos podemos encontrar con motores con picos de hasta 10 A tranquilamente. Por lo que aquí ya no nos vale usar un puente en H como el L298 de transistores bipolares. Aquí o se compra un puente hecho con Mosfets, que además de grande suele ser caro, ó se utiliza el regulador de velocidad del coche RC, que creo que es la opción más acertada, la única pega es que nos tenemos que adaptar a las señales de su electrónica, o se hace lo que hicimos nosotros, utilizar un sólo Mosfet para controlar el motor.

Como es un robot velocista, sólo vamos a tener que ir en un sentido, no tenemos que ir hacía atrás, por lo que con un simple mosfet podemos controlar la velocidad del motor. En este caso usamos un IRLZ34N, un mosfet que soporta unos 30 Amperios, más que suficiente para nuestro motor, además tenemos una Ron muy baja. Para ello lo único que tenemos que añadir al circuito es un diodo schottky de potencia en antiparalelo con el motor, para no romper nada cuando le cortamos la I a este, una resistencia de gate a tierra y un condensador gordo para los transitorios del motor.

La principal desventaja de hacerlo de esta forma es que no tenemos el frenado del puente en H, que es vital para este tipo de prueba, ya que es como ir con un coche sin frenos. Este punto lo tenemos que analizar bien (no estoy seguro), y ver lo que podemos hacer con el circuito de sólo el Mosfet. Pero puede ser que lo más indicado sea montar el puente en H, y para ello lo mejor es usar el regulador de velocidad que viene con el coche de serie.

Foto del driver.


El último circuito es la fuente conmutada que teníamos ya hecha del seguidor, aquí lo suyo hubierá sido usar un regulador disipativo, ya que bajamos de 6.x voltios a 5, pero por cuestiones de tiempo pusimos lo que teníamos a mano, al funcionamiento no afectaba y espacio teníamos de sobra.

Aquí es donde tenemos otro de los errores graves de diseño, en hacer la velocidad dependiente del estado de la batería. Para corregir esto lo podemos hacer de diversas maneras: la primera sería añadir un encoder para controlar en todo momento la velocidad del coche. Otra solución sería medir la tensión de la batería con un ADC del pic, y ajustar la velocidad a esta tensión, como estamos en una superficie plana podemos hacer esto. Y otra posibilidad es hacer un convertidor cc-cc que de una salida mayor a la tensión de entrada, de esta forma aunque disminuya el voltaje de la batería, la tensión entregada al motor seguirá siendo la misma. La opción más simple es la del ADC o fuente, la mejor es la del enconder.

Respecto al programa llevabamos un control proporcional de velocidad y de giro. Este es el punto principal en el que hay que trabajar para siguientes concursos, lo ideal es hacer un controlador PD para corregir la oscilación.

Pero bueno quedan muchas cosas que probar y mejorar de este coche para siguientes concursos, tanto del hardware como del firm, la base ha resultado ser buena y barata, ideal para un velocista si el radio se lo permite. Sólo le añadimos unas protecciones de metraquilato (para que se viesen los leds) para evitar romper los sensores en los choques contra otros velocistas, además nos sirvio de soporte para colocar la electrónica.

El Cosmobot para mi fue el primer concurso de robótica, en el que había un gran nivel y bastantes participantes. Deseando que llegue el del año que viene.

Seguro que me dejo muchas cosas, ya las iré poniendo según me vengan a la cabeza..

Video del robot, no tenemos ninguno del concurso. La organización creo que los tiene, pero no los han subido a ningún lado. Este es en una pista similar a la que allí había.



Para cualquier duda, comentario, corrección...  

Gracias por pasar por aquí. Saludos.