Programando un rover NXT con Java

Al hilo de un ejercicio que hemos hecho en la asignatura de programación, y los problemas para comprender por qué creamos los programas de este modo, se me ha ocurrido crear físicamente un pequeño rover basado en este robot en 5 minutos.

Resulta que al ladrillo de LEGO Mindstorms NXT que tengo se le puede reemplazar el firmware por otro llamado leJOS NXJ, que permite programar el sistema usando código escrito en Java.

Instalación del software necesario

Trabajo sobre macOS y antes de empezar he tenido que hacer algunos cambios:

  • Instalar Java 6 para macOS. Algunos de los componentes necesitan una máquina virtual Java de 32 bits, así que no queda otra que instalar la versión antigua.
  • Descargar NXJ y descomprimirlo.
  • Crear algunas entradas en el fichero ~/.profile o ~/.bash_profile:
export NXJ_HOME="<RUTA A LA CARPETA DESCOMPRIMIDA DE NXJ>"
export LEJOS_NXT_JAVA_HOME=$(/usr/libexec/java_home -v1.6)
export PATH="$NXJ_HOME/bin:$PATH"

Actualización del firmware

Advertencia: este proceso sobreescribe el firmware original de LEGO y, si algo va mal, os podéis quedar con un NXT inutilizado. Seguid las instrucciones del tutorial al pie de la letra, NO me hago responsable de lo que ocurra.

Dicho esto, el siguiente paso es instalar el firmware de LeJOS mediante el comando nxjflash.

Construyendo el rover

Siguiendo las instrucciones y con algunos extras propios, ha quedado así:

rover_nxt

Básicamente disponemos de dos motores, conectados en A y B, y un sensor de ultrasonidos, conectado en S1.

¡Hola mundo!

Primera prueba, siguiendo el tutorial:

import lejos.nxt.Button;

public class HolaMundo {
    public static void main (String[] args) {
        System.out.println("Hola mundo");
        Button.waitForAnyPress();
    }
}

Compilar y ejecutar el programa

Para compilar los programas, usamos nxjc y para enlazarlos y ejecutarlos en el ladrillo conectado por USB, nxj:

$ nxjc HolaMundo.java
$ nxj -r -o HolaMundo.nxj HolaMundo

En la documentación hay más detalles y opciones.

Moviendo el rover

En este repositorio de GitHub están el resto de los ejemplos, junto con un script para compilarlos cómodamente.

¿Y ahora?

Todo lo necesario para hacer programas más complejos está explicado en el tutorial de NXJ.