CUBE REVOLUTIONS: SOFTWARE I |
Introducción
En este nivel se solucionan los problemas de controlar los servos del robot desde el PC, caracterización de las secuencias de movimiento, cómo generarlas manualmente, su almacenamiento en ficheros y su reproducción:
¿Cómo puedo controlar servos desde el PC?
¿Cómo definir una secuencia de movimiento?
¿Cómo almacenar estas secuencias?
¿Cómo generar manualmente una secuencia de movimiento para el robot?
¿Cómo reproducir secuencias previamente creadas en el robot?
Todo esto no es específico del robot Cube Revolutions, sino que es válido para cualquier otro robot articulado que tenga hasta 8 servos.
Control de servos desde el PC
Cube Revolutions es un robot NO autónomo, que se conecta al PC a través del puerto serie. En el PC se programan los algoritmo para conseguir la locomoción y estudiar sus propiedades.
Se ha creado una API en C para poder posicionar los servos desde el PC y trabajar con Cube Revolutions como si fuese un periférico. Al solicitar un servicio, como por ejemplo establecer la posición de un servo, se envía una trama por el puerto serie que llega al microcontrolador y éste se encarga de generar la señal PWM para el posicionamiento del servo. La comunicación se realiza a 9600 Baudios.
Esta manera de controlar los servos forma parte del proyecto stargate y el servidor que se ejecuta en el microcontrolador es el servos8.
Funciones de la API SERVOS8
Desde cualquier aplicación en C en plataformas Linux, podemos controlar los servos utilizando la API definida en el módulos SERVOS8. Las funciones son:
|
Inicializar el módulo Servos8. Se le pasa como argumento el descriptor del dispositivo serie, que se debe haber abierto antes
|
Posicionar un servo, especificando el ángulo en grados. Los servos se numeran desde el 1 hasta el 8. El rango de la posición de los servos es desde -90 hasta 90 grados.
|
Posicionar los 8 servos, especificando el ángulo en grados. El rango de posición de los servos es desde -90 hasta 90 grados.
|
Habilitar los servos. Se pasa como parámetro una máscara en la que los bits a '1' indican que el servo correspondiente está habilitado.
Programa de ejemplo “hola mundo”
El siguiente programa es un ejemplo de uso del módulo servos8. Se abre el puerto serie, se inicializa el módulo servos8, se habilitan los servos y se posiciona el servo 1 en un extremo y luego a su posición central.
Las fuentes de este programa se pueden bajar de aquí: test-servos8.tgz
Para compilarlo es necesario tener instalada la librería stargate (1.0.1)
Secuencias de movimiento
En un instante de tiempo, la forma del gusano está caracterizada por los ángulos de las articulaciones. Esos ángulos constituyen el vector de posición angular.
Una secuencia de movimiento queda descrita mediante una serie de vectores de posición angular, que van determinado la forma del gusano en cada instante. Así, las secuencias se pueden representar mediante matrices, cuyas filas son los vectores de posición angular. En la siguiente figura se muestra un ejemplo de una matriz de 11x8, que representa una secuencia de movimiento de 11 pasos para un robot articulado de 8 articulaciones.
Estas matrices de movimiento, se almacenan en ficheros ASCII, para luego ser reproducidas. Los ficheros que guardan las secuencias de movimiento de Cube Revolutions tienen extensión .f8. Aquí se muestra un fichero de ejemplo:
NSERVOS=8 [0 0 0 0 0 0 0 0 ],0; [0 0 0 0 0 0 90 90 ],200; [0 0 0 0 0 90 90 90 ],500; [0 0 0 -5 90 90 6 -90 ],500; [9 0 13 -11 90 24 86 -90 ],300; [9 0 13 -11 90 24 -42 -90 ],300; [9 0 13 -11 90 48 -89 -46 ],300; [-64 82 13 -11 90 48 -89 -46 ],300; |
La primera línea indica el número de servos, y por tanto el número de elementos de los vectores de posición angular (o el número de filas de la matriz de movimiento). Para el caso de Cube Revolutions este número es 8.
A continuación están los vectores de posición angular, para los diferentes instantes. El número situado al final de cada vector es el tiempo en milisegundos que los servos deben permanecer en esa posición antes de pasar a la siguiente.
Reproducción de secuencias y generación manual
Los programas cube-play y cube-reverse-play, ambos en el paquete cube-play.tgz, leen los ficheros de secuencias y los envían a Cube Revolutions , utilizando la API Servos8. Cube-play reproduce la secuencia en el sentido normal (recorre la matriz de arriba hacia abajo) y Cube-reverse-play en sentido contrario.
Para compilarlos y utilizarlos es necesario tener instalada la librería stargate (1.0.1)
Para probar los motores de Cube Revolutions y generar secuencias manuales, resulta mucho más útil utilizar el programa star-servos8, que tiene una interfaz gráfica. Este programa no es específico de Cube, sino que es válido para generar/reproducir secuencias en cualquier robot o sistema que tenga hasta 8 servos.
|
Entre otras cosas, el star-servos8 permite posicionar manualmente los servos por medio de unos deslizadores. Con ello se pueden generar secuencias de movimiento sencillas que luego se guardan en un fichero .f8.
Ventana principal para el posicionamiento de servos. Movimiento con el raton cada una de las barras deslizante, se actúa sobre cada uno de los servos. Se pueden habilitar/deshabilitar los servos marcando las casillas de la izquierda. El botón de Reset lleva a todos los servos a la posición inicial. |