Los programas escritos en LabVIEW se llaman Instrumentos Virtuales o VIs y se guardan con la extensión Vi. Al iniciar LabVIEW nos encontramos con la ventana de introducción. Si ya disponemos del LabVIEW, el primer paso para poder trabajar con LabVIEW sobre Mindstorms NXT es descargar el toolkit gratuito de National Instruments que lo permite. Esta expansión permite crear y descargar nuevos VIs que nos harán posible controlar el sistema NXT de LEGO.
El Toolkit para el MINDSTORMS de NI nos permite:
- Programar y controlar al NXT con toda la potencia de LabVIEW.
- Obtener información actualizada en tiempo real del dispositivo durante la operación del programa NXT mediante los paneles frontales de LabVIEW.
- Crear nuevos bloques nativos para el software gráfico NXT-G o modificar los existentes. Esto puede ser muy útil si desarrollamos hardware a medida para el NXT.
Nuestro primer programa no podía ser otro que el clásico que presenta el mensaje “hola mundo” en el display del NXT, pero en nuestro caso, y dada la sencillez del programa, lo ampliaremos para permitir presentar cualquier mensaje.
Para crear nuestro primer programa es necesario abrir un VI en blanco. Cada vez que queramos crear un nuevo programa para el ladrillo NXT, tendremos que abrir una nueva VI en blanco. Si seleccionamos un NXT VI, en lugar de un nuevo VI, la ventana flotante de funciones contendrá los propios del NXT. La pantalla que nos encontramos es similar a la siguiente:
Vemos que aparecen dos pantallas.
- Panel frontal. La pantalla gris se denomina panel frontal. Aquí es donde creamos los controles e indicadores que queremos que vea el usuario. Los controles se utilizan para dar valores de entrada al programa, mientras que los indicadores sirven para mostrar los resultados de la ejecución del programa. Si hacemos clic con el botón derecho sobre el panel frontal podemos ver la paleta de controles, que nos permitirá hacer uso de los indicadores, controles y decoraciones. Conviene surfear un poco por la jerarquía de estos controles para familiarizarnos con ellos.
- Diagrama de bloques. La pantalla blanca es el diagrama de bloques. En esta pantalla es donde debemos crear el código gráfico que se ejecutará en el ladrillo NXT. Los elementos básicos de los que constarán nuestros programas serán terminales, VIs y funciones, y cables.
Empecemos nuestro primer programa. El código de programa lo vamos a representar mediante bloques gráficos, por lo que nos situamos en la ventana del diagrama de bloques. Como queremos presentar un texto en el display, necesitamos buscar el bloque que se encarga de ello. Para acceder al mismo pinchamos con el botón derecho sobre la ventana del diagrama de bloques y seguimos el menú: NXT Robotics, NXT I/O, Display. Pinchamos el icono y lo arrastramos a la ventana del diagrama de bloques.
En la imagen anterior he representado
- el bloque que representa al display del NXT (A),
- el aspecto que adquiere cuando posicionamos el cursor sobre el mismo (B), que nos está mostrando los puertos de entrada y salida del bloque, y
- en (C), las opciones que se me presentan cuando pincho sobre el texto “text” que se encuentra en la parte inferior del bloque. En este caso seleccionamos la operación de escribir un texto (WRITE TEXT). Entre las otras opciones disponibles tenemos la de escribir texto en otros formatos (entero o flotantes), dibujar puntos, líneas, círculos, etc, o borrar el display. Esto nos recuerda a las mismas opciones del icono gráfico del display de NXT-G, ¿verdad?
El siguiente paso es incorporar el bloque que nos permite introducir el texto. Existe una relación entre el panel frontal y el diagrama de bloques. Podemos hacerlo patente con un ejemplo. Volvamos al panel frontal pinchando sobre la ventana del mismo, botón derecho del ratón para abrir el desplegable, NXT Robotics, String & Path, String Control, y obtenemos:
Vemos que con lo anterior no sólo se ha creado la caja de entrada de datos de texto en el panel frontal, sino que además se ha creado un nuevo bloque en el diagrama de bloques. Lo mismo habría sucedido si lo hubiéramos creado en el diagrama de bloques, que habría aparecido su equivalente en el panel frontal.
Dado que la cadena de texto que queremos presentar en el display es la que introducimos en la caja de datos que acabamos de crear, debemos unir los dos bloques. Para ello pinchamos sobre el diagrama de bloques con el botón izquierdo y, al acercar el cursor al triángulo del bloque de entrada de strings vemos que el cursor se transforma en un pequeño carrete de hilo, lo que nos indica que podemos extender la conexión. Lo hacemos hasta llevar la conexión a la parte izquierda del bloque del display. Aparecerá un pequeño cuadrado negro parpadeante indicando el punto de conexión. La conexión creada no va a presentar problemas porque los datos que genera esta caja de entrada son compatibles con los que espera recibir el display tal como lo hemos seleccionado.
Lo que hemos realizado hasta ahora ya puede considerarse nuestro primer programa, aunque de poca utilidad todavía. Para ejecutarlo seguimos el siguiente proceso:
- Conectamos el NXT (que debe disponer de batería cargada) al PC mediante el cable USB y presionamos el botón naranja del NXT. A continuación,
- Debemos conectar el LabVIEW con el NXT. Para conseguirlo, bien desde el panel frontal o desde el diagrama de bloques, vamos al menú Tools, NXT Tools, NXT Terminal. Esto creará una nueva ventana en la que se indica el NXT al que se ha conectado, su nombre, tensión de batería, ficheros que contiene, etc. Si no es así, buscamos el desplegable en el que pone “Find NXT…” para dar con el mismo haciendo scan.
- Con el NXT conectado podemos cerrar la ventana flotante del NXT y presionamos el botón Run de la izquierda con el dibujo de la flecha.
Al ejecutar el programa anterior aparentemente no conseguimos nada, pero si nos fijamos en el display del NXT vemos que no es así: el display queda en blanco durante un instante, para volver inmediatamente a mostrar la pantalla de inicio. Lo que sucede es que el programa está presentando el contenido de la caja de entrada, y éste ¡no contiene nada!. Probemos ahora lo siguiente: vamos al panel frontal y escribimos “Hola mundo” en la caja marcada como “String”. Si ejecutamos ahora pinchando el botón de Run y nos fijamos en el display, ahora sí veremos que en el display aparece nuestro “Hola mundo”. Es un suspiro, pero suficiente para comprobar que nuestro primer programa funciona.
Para extender el suspiro podemos ejecutar lo anterior de forma repetitiva, por ejemplo introduciendo el programa anterior dentro de un bucle. Veamos cómo se hace.
Vamos al diagrama de bloques, botón derecho, Express, Exec control, While Loop. Esto nos crea una caja cuyas dimensiones podemos modificar. Todo su contenido interno se ejecutará hasta que presionemos el botón de STOP, que también ha aparecido en el panel frontal. Nos falta introducir nuestro primer programa inicial en el interior del bucle while que acabamos de crear. Esto podemos hacerlo seleccionando el programa inicial y desplazándolo al interior del bucle, o selecionando el bucle y desplazándolo hasta que encierre al programa inicial. Os recomiendo que probeis ambas alternativas. El resultado debe ser parecido al que aquí se ve.
Si ejecutais este nuevo programa podeis ver que ahora sí que se mantiene el texto en el display del NXT. ¿Cuánto tiempo? El programa no se detiene hasta que no pulsemos el botón de STOP del panel frontal, que es la condición de salida del bucle while que hemos dibujado. Podemos jugar a escribir varias cosas y ver el resultado obtenido. Nos daremos cuenta de que si pulsamos enter estamos pasando a la línea inferior del display (los resultados que escribimos en el panel frontal no se actualizarán en el display hasta que no pinchemos con el ratón fuera de la caja de entrada de datos). Podemos además desplazarnos por el display usando las flechas del teclado.
Si recapitulamos nos podemos dar cuenta de la potencia del LabVIEW. Con tan solo 2 minutos y 3 iconos hemos creado una aplicación en el PC que nos permite presentar datos remotamente y en tiempo real sobre el NXT. Este mismo programa es imposible de emular, por ejemplo, en NXT-G, dado que el entorno NXT-G no nos permite crear aplicaciones que se ejecuten fuera del NXT: el ejemplo anterior es una muestra de la interacción entre dos aplicaciones, una ejecutándose en el PC y otra en el NXT.
Comentarios y dudas, como siempre, en el foro.
Información adicional:
- Descarga del Toolkit de LabVIEW para LEGO MINDSTORMS NXT