Una de las características más destacadas de LabVIEW es su gran compatibilidad, que nos permite por ejemplo procesar imágenes a la vez que manejamos el NXT. LabVIEW es también compatible con TETRIX, la variante metálica que PITSCO ofrece para la creación de robots, compatible totalmente con los LEGO Mindstorms NXT. TETRIX cuenta básicamente con dos motores de 12 V y un servomotor, todos ellos manejados por controladores que se conectan directamente a los puertos de sensores de TETRIX mediante los puertos de sensores.
Configuración motores:
Una de las principales dificultades del TETRIX además de su montaje, es el manejo de motores. Los motores están conectados a unos controladores, que a su vez se conectan al ladrillo NXT a través de los puertos de sensores. En LabVIEW se pueden configurar los motores y servomotores, indicando que número de motor es, a que controlador está conectado, y a que puerto de sensores va a conectarse. Puesto que a un controlador se le pueden enganchar dos motores, un solo puerto de sensores podrá manejar a ambos. Para acceder al menú de configuración tenéis que ir a Tools → NXT Tools → TETRIX Motor Configurator…:
Al acceder os aparecerá un menú donde podéis configurar los motores DC y los servos que tengáis. Hay que indicar el puerto, el número de controlador, y dentro del controlador, la posición el la que está enganchado el motor (1 o 2). La configuración de los servomotores es igual. Como ejemplo, si tubiésemos dos motores DC, uno enganchado al puerto 1 del controlador 1 y otro al puerto 2 del mismo controlador, y fuésemos a manejarlos a través del puerto de sensores 1, la configuración quedaría así:
Una vez configurado todo, le dais a salvar, le ponéis un nombre y lo guardáis en la carpeta por defecto. Una vez ya configurados podemos manejarlos.
Manejo de Motores:
En LabVIEW hay diversas funciones para manejar los motores de TETRIX. Estas funciones las podéis encontrar haciendo click derecho en el Block Diagram, y buscando en NXT Robotics → TETRIX:
Vamos a centrarnos en tres funciones:
TETRIX Move:
Con esta función podemos mover los motores de TETRIX. Como todas las funciones de LabVIEW relacionadas con NXT lo primero que tiene es una entrada y salida de flujo de ejecución del programa. En segundo lugar tenéis que elegir que motor queréis mover, para ello tenéis que ir a Motor Configurations en el menú de funciones de TETRIX, y elegir la de motor DC creada por vosotros anteriormente. Os creará una constante que puede tomar como valor cualquiera de los motores configurados:
En el siguiente parámetro de entrada hay que meter si queremos manejar el robot por potencia o por velocidad. En el último parámetro de entrada elegiremos la velocidad/potencia que queramos poner al robot.
TETRIX Move a Fixed Position:
Esta función tiene más parámetros de entrada. En primer lugar está Timeout, que es el tiempo que daremos para que la acción se cumpla. Si el tiempo pasa pero la acción de movimiento sigue en curso, pasará a ejecutar la siguiente acción en el flujo del programa (esto no significa que pare de hacer lo que estaba haciendo, sino que se harán otras cosas a la vez). El segundo paramento determina si devuelve el control inmediatamente (si vale 0) o si devuelve el control cuando se haya acabado el elapsed time o haya terminado la acción.
El tercer y cuarto parámetro de entrada es el flujo del programa, y el motor (explicado en la función anterior). El quinto parámetro es el contador del encoder en grados, es a la posición que deseamos girar. El sexto parámetro es respecto a que vamos a girar esos grados, si a la posición actual, o a la posición inicial que tenía el motor cuando el programa inicio. Por último tenemos la velocidad en grados por segundo.
Esta función ademas de devolvernos el flujo del programa, nos devuelve si ha terminado o no por timeout en una variable booleana.
TETRIX Motor Status:
Esta sencilla función sirve para metiéndole como parámetro de entrada un motor DC, nos diga el valor del encoder de dicho motor, y si está o no en movimiento actualmente.
TETRIX Reset Encoders:
Esta función nos sirve para resetear a 0 el valor de los encoders del motor DC que hayamos especificado como parámetro de entrada.
Manejo Simultáneo de Motores:
Todas las funciones anteriores se pueden aplicar no solo a un motor, sino a un grupo o array de motores. Para seleccionar su funcionamiento con múltiples motores es tan sencillo como abrir el menú desplegable de cada función y seleccionar el modo (group).
Las funciones en este modo no reciben un motor DC como parámetro de entrada, sino un array de motores DC. Para crear una constante de este tipo no tenéis más que acceder al menú de funciones de TETRIX y seleccionar dentro de Motor Configuration el array de motores de la configuración que creasteis al inicio. Al crear la constante, podemos modificar su tamaño (entre uno y el número máximo de motores que tengamos), indicando que motor va en cada posición del array.
Algunas funciones que reciben como entrada este array de motores también devuelven más información, como por ejemplo Motor Status que devuelve no solo si hay o no algún motor en movimiento, sino que un array con que motores se están moviendo.
Este artículo teórico sobre manejo de TETRIX con LabVIEW abre las puertas a implementaciones de interesantes programas. Crearemos algún programa en LabVIEW que maneje a TETRIX para que veáis su funcionamiento. Si tenéis alguna duda podéis escribirnos en el foro.