Antes de instalar el firmware en el arduino, para evitar forzar algún servo, vamos a desconectar la cuerdecita de la grúa y los tornillos que unen las plaquitas del servo de las pinzas a las propias pinzas. Queremos que se muevan libremente (por ahora).
El servo de la muñeca y el motor paso a paso no necesitan calibrarse así que no tenemos que preocuparnos de estos componentes.
$ picocom /dev/ttyUSB0
robik$ _
robik$ hpa - pinzaAbierta
pc - pinzaCerrada
pc - pinzaSemiabierta
...
robik$ _
Una vez instalado el firmware, es el momento de conectarse a él a través del puerto USB. Puedes utilizar cualquier programa monitor serie. En este ejemplo usamos picocom, ejecutándolo desde una ventana de terminal poniendo como parámetro el puerto serie que nos proporciona Arduino (en linux, normalmente /dev/ttyUSB0)
El firmware nos proporciona una serie de comandos que podemos teclear para ejecutar movimientos en el robot. El comando h (help) lista las instrucciones disponibles.
Los comandos pa
, pc
y ps
dejan las pinzas en una posición abierta, cerrada y semicerrada respectivamente.
Coloca el aspa del servo de manera que en la posición abierta quede aproximadamente vertical ligeramente a la izquierda (como un reloj a las 11:25), y en la posición cerrada quede horizontal un poco hacia abajo (como un reloj a las 8:10).
Ahora, cerrando las pinzas con el comando pc
, colocamos el cubo de Rubik en la base y atornillamos las plaquitas a los brazos de manera que el cubo quede perfectamente agarrado en esa posición.
Una vez hecho esto, los comandos pa
, pc
y ps
deberán funcionar correctamente. Si las posiciones son aproximadamente correctas pero consideras que se puede afinar algo más, siempre puedes editar los parámetros del firmware, como se indica más adelante.
La grúa se calibra de un modo similar aunque es mucho más sencillo. Con los comandos ga
, gb
y gs
la grúa se sitúa en una posición arriba, abajo y semiarriba (o semiabajo) respectivamente.
Bajamos la grúa con el comando gb
. El servo debe quedar en una posición más o menos horizontal (igual que en el caso anterior, si no es así, separa el aspa y colócala en posición horizontal)
Ahora intenta ajustar la grúa para que las muñecas queden a la altura del centro del cubo (quizá te sea más fácil de alinear si previamente lanzas el comando ps
para acercar el las pinzas al cubo pero sin agarrarlo. En esa posición termina de apretar la cuerdecita a la polea e los hombros.
El servo que está anclado en el brazo lo llamamos muñeca: es el que gira el cubo en (el eje de las X) cuando las pinzas lo tienen agarrado y la grúa está subida. Como los servos sólo giran 180º, usamos sólo tres posiciones: m0
, m1
y m2
. Prueba estos comandos y debería moverse 0, 90 y 180º; respectivamente.
ba numero_de_giros
. Los giros se corresponden con un cuarto de vuelta completa. Así, por ejemplo, ba 2
gira la base en el sentido de las agujas del reloj. Y puedes poner números negativos para girar en el sentido contrario. Por ejemplo ba -1
hace un cuarto de vuelta en el otro sentido.
/*--------------------
* Grados de apertura ...
*--------------------
define PINZA_ABIERTA 90
define PINZA_SEMI 35
define PINZA_CERRADA 0
Si no estas conforme con los ajustes mecáanicos, siempre puedes configurar los parámetros del firmware a tu gusto. A veces puede ser complicado ajustar correctamente las piezas ya que cuando se aprientan los tornillos en el último momento se nos desplaza algo.
Todas las posiciones predefinidas para las pinzas, la grúa, la muñeca, y el número de pasos del motor están especificados en el fichero Robot.h. Experimenta con los parámetros y busca la combinación que más te convenza
Haz un cambio, sube el firmware, prueba y vuelve a editar hasta que estés contento con el resultado.
Ya podemos empezar a experimentar moviendo el cubo con comandos, viendo cómo se comporta y afinando los últimos ajustes. Los comandos son autoexplicativos, pero como guía, aquí mostramos una prueba con la que empezar.
pa
abrir pinza, por si estaba cerradam0
para poner el servo de la muñeca en una posición que nos permita moverlo posteriormente 180ºgb
para bajar la grúapc
para agarrar el cuboga
para levantar el cubom2
giramos la muñeca 180ºgb
volvemos a apoyar el cubops
abrimos un poquito la pinzags
subimos un poquito la grúapc
para agarrar el cubo (esta vez no por el centro, si no un poco más arriba)gb 1
giramos la base (y como el cubo está agarrado se moverá la cara)Si detectas algún movimiento que no es del todo exacto, repite los ajustes en Robot.h hasta consigas que funcione perfectamente
robik$ seq F2B2UD'R2L2UD'
Un comando muy útil es seq secuencia
, que te permite ejecutar secuencias en el formato singmaster (la versión en inglés). Por ejemplo, este comando hace el movimiento conocido como sexy move, que consiste en mover la cara de arriba (Up) la cara de la derecha (Right) y luego de nuevo la cara de arriba en sentido contrario (U') y derecha en sentido contrario (R').
seq URU'R'
Este comando también te permite depurar de forma más sencilla los movimientos del cubo para optimizar los movimientos, ya sea modificando los parámetros en Robot.h, afinando los tiempos de espera en robot.c o modificando cualquier parte del firmware que se te ocurra.
Por ejemplo, el comando seq FUBR
realiza cuatro giros seguidos del cubo en el eje de las X, y así puedes ver cómo se comporta en movimientos complejos y seguir afinando los parámetros.
...y hasta aquí hemos llegado! No dudes en experimentar con todas las partes de tu robot y comentarnos cualquier problema o mejora que se te ocurra.
En la carpeta software de github hemos puesto algunos ejemplos de programas para manejar Robik.
Y recuerda: esto es un proyecto de hardware/software libre que cuenta contigo para poder mejorar. Cualquier aportación será bienvenida.
Que el espíritu maker os acompañe!