Una vez visto los componentes del robot y como se distribuyen sobre la plataforma pasemos a hablar del controlador.
Desde el inicio del proyecto planteamos para el robot una arquitectura distribuida, donde múltiples cpu's se reparten la tarea de controlar el robot, cada cpu se encarga de controlar un sensor. Todas las cpu's se comunican entre sí por medio del bus I2C en modo multimaster y una de ellas con el PC a través del bus RS232 a un transceptor que transmite y recibe la información.
Esta arquitectura distribuida tiene la ventaja de que no necesitaremos un procesador muy potente, costoso o difícil de programar, además en caso de que fallará un sensor tanto en software como en hardware no bloquearía el sistema, se bloquearía la cpu encargada de ese sensor, pudiendo además implementar un sistema de reinicio de esa cpu. Los microcontrolares tienen un sistema contra bloqueos que se llama watchdog (consiste en un contador que si no se actualiza su valor reinicia la cpu), que garantiza que siempre este activa.
La mayor dificultad en diseñar un sistema distribuido está en la programación del sistema de comunicaciones entre cpu's y entre las cpu's y el PC.
Nosotros diseñamos un sistema de comunicaciones basado en mensajes, cuyo formato es:
[ longitud | cpu | comando | byte1 | byte2 | ... | byten | checksum ]
donde:
longitud = longitud del paquete
cpu = número de la cpu a la que se dirige el paquete
comando = comando que debe ejecutar la cpu
byte1, byte2, ..., byten = n byte que forman el comando, n>=0
checksum = suma de comprobación del mensaje
La primera version del sistema estaba basada en el microcontrolador PIC 16F876, con tres puertos de i/o, puertos RS232, I2C, convertidores A/D, múltiples contadores, etc., bastante adecuado y completo para nuestro robot.
En la imagen muestro una de las placas controladoras (1 cara y 2 puentes):
Se pueden observar todos los conectores, además del de programación y depuración y el de reset externo.
Como se ha indicado el sistema lo componían múltiples CPU conectadas entre sí por el bus I2C y a traves del un puerto RS232 con un transceptor al robot, el primer transceptor que usamos es el que se muestra en la foto:
permite transmitir en modo half duplex (transmitir o recibir información no simultaneamente) hasta 115200 bits/seg.
El sistema funcionaba razonablemente bien, una CPU se ocupaba de las transmisiones, otra del sistema servo/sonar, otra de la brújula y otra de los bumpers/sensores IR, aunque era muy lento en las comunicaciones con el PC para lo que pretendíamos.
En esos momentos pensamos en alguna alternativa a las comunicaciones por radio, y encontramos la posibilidad de hacerlas por bluetooth, ya que existen conversores RS232-bluetooth con lo cual solo tendríamos que sustituir el transceptor por el bluetooth, y este alcanzaba los 2Mb/sg.
No hay comentarios:
Publicar un comentario