Manejo Remoto del NXT en LeJOS

c0018_bluetooth_usb_01Hasta ahora hemos visto cómo comunicar varios NXT entre sí y enviar información de uno a otro, pero también es posible comunicarnos con un NXT mediante el PC, dándole instrucciones ya sea mediante mediante comandos, o creando un UI (Interfaz de Usuario) con botones y consola propia. Es cierto que estas comunicaciones son más complejas que las que se realizan habitualmente entre los propios NXT, pero también son muchas las posibilidades que nos proporcionan. Veamos el Manejo Remoto del NXT en LeJOS.

¿Cómo comunicarnos con el PC?:

Para comunicar cualquier dispositivo Bluetooth con el ordenador necesitamos un adaptador bluetooth para el ordenador, que puede estar integrado en la placa base, o se puede adquirir por separado (normalmente del tipo mochila USB). Si ya tenéis uno seguramente lo habréis usado alguna vez para descargar programas al NXT en vez de usar el USB.

Una vez tengamos un adaptador USB es importante agregar el dispositivo Bluetooth a la lista de “Mis sitios Bluetooth”. Para ello encender el NXT, hacer doble click en el simbolo de Bluetooth de la barra de herramientas de Windows y en el menú que se despliega darle a “Agregar dispositivo Bluetooth”. Una vez lo haya encontrado lo seleccionamos, metemos la clave del NXT (por defecto 1234) y nos conectamos. Llegado a este paso ya estaremos listos para la comunicación entre el PC y el NXT.

ConBluetooth

Comunicación entre PC y NXT en LeJOS:
Los protocolos de comunicación en LeJOS entre PC y NXT se encuentran en una libreria llamada pccomm.jar, que será la que en este caso tendremos que añadir a nuestro proyecto en lugar de classes.jar (Mirar artículo de instalación de LeJOS para saber cómo). Luego tendremos que importar las siguiente librería dentro de nuestro programa:

import lejos.nxt.remote.NXTCommand;
import lejos.pc.comm.*;

Ahora podremos iniciar la comunicación. Para ello lo primero es crear un objeto de la clase NXTConnector:

NXTConnector nombre_conexión = new NXTConnector();

De esta forma ya nos podemos conectar con el NXT: para ello utilizaremos el protocolo de comunicaciones de LEGO LCP (LEGO MINDSTORMS NXT Communications Protocol). El método sería el siguiente:

boolean connectTo(“nombre_NXT”, NXTComm.LCP): Conecta el PC con el NXT usando el protocolo de comunicaciones de LEGO MINDSTORMS NXT. Devuelve false en caso de que la conexión falle.

Una vez conectado necesitaremos ser capaces de usar métodos como si de un programa normal se tratase, y que el ordenador los envíe y el NXT los entienda. Para ello usaremos siguiente método:

NXTCommand.getSingleton().setNXTComm(nombre_conexión.getNXTComm());

Este método es muy importante, porque traduce todos los comandos que se encuentran a continuación en el programa al LCP, para que puedan ser ejecutados en el dispositivo remoto, en este caso un NXT. Es decir, estas líneas de código que se están ejecutando en el PC están enviando los comandos que se encuentran en las siguientes líneas de programa, a continuación de ésta, al NXT para su ejecución en él. Una vez hecho esto ya podremos usar métodos como si de un programa de NXT se tratara como, por ejemplo, Motor.A.forward(). El último paso necesario es el de cerrar la conexión existente entre el PC y el NXT. Para ello haremos uso del método close().

Compilar programas para PC de LeJOS:

Los programas en LeJOS que se van a ejecutar en el PC se compilan de forma especial (no con javac como la mayoría de programas en java). Si os acordáis de el artículo de instalación de LeJOS explique cómo crear configuraciones propias de compilación y ejecución. De hecho en ese tutorial se enseña cómo crear las dos que después hemos usado para todos los programas.

Para compilar y ejecutar programas para PC en LeJOS necesitaremos crear otras dos nuevas configuraciones. Estás configuraciones son tal y como se muestran en las siguientes imágenes:

Eclipse2

Eclipse3

Por tanto las usaremos para compilar y ejecutar nuestro programa de PC en LeJOS.

Programa de ejemplo:

En el programa de ejemplo vamos ha hacer que el ordenador muestre por pantalla el valor del tacómetro (recordad el manejo del tacómetro en el artículo sobre el sensor de ultrasonido), ordene al NXT que gire el motor A y B, y una vez finalizado muestre los nuevos valores de los tacómetros. Este programa es bastante sencillo y se ve el funcionamiento básico del protocolo de comunicaciones, así como escribir información por la consola del PC (de eclipse en este caso). El código del programa es el siguiente:

import lejos.nxt.*;
import lejos.nxt.remote.NXTCommand;
import lejos.pc.comm.*;

public class ContadorGrados {

public static void main(String [] args) throws Exception {
NXTConnector conn = new NXTConnector();

if (!conn.connectTo(“NXT”, NXTComm.LCP)) {
System.err.println(“Conexión Fallida”);
System.exit(1);
}
NXTCommand.getSingleton().setNXTComm(conn.getNXTComm());

Motor.A.resetTachoCount();
Motor.B.resetTachoCount();
System.out.println(“Tacómetro A: ” + Motor.A.getTachoCount());
System.out.println(“Tacómetro B: ” + Motor.B.getTachoCount());
Motor.A.rotate(3600, true);
Motor.B.rotate(-3600);
Thread.sleep(1000);
System.out.println(“Tacómetro A: ” + Motor.A.getTachoCount());
System.out.println(“Tacómetro B: ” + Motor.B.getTachoCount());
conn.close();
}
}

Ahora explicaré brevemente algunas líneas:

10 – Si la conexión resulta fallida (! es el símbolo de negación en Java):

11 – Muestra el mensaje de error Conexión Fallida por consola, y

12 – Detiene la ejecución del programa (el hecho de salir con “1” significa que ha habido error en el prográma, es un estándar universal en programación.

14 – Se trata de la línea más importante, que hemos explicado anteriormente, y es la que envía el código posterior a esta línea para su ejecución remota en el NXT al que nos hemos conectado previamente.

18, 19, 23 y 24 – Esta es la manera universal de mostrar información por consola (pantalla) en Java. Entre comillas para las cadenas de texto, y usando el símbolo + para concatenar elementos.

Como veis no es un programa muy complejo, el resultado por consola debería quedar algo así:

Eclipse1

Por último insistir en que si tenéis alguna duda posteadla en el foro. Un saludo y hasta otro artículo.

Comments are closed.