domingo, 9 de agosto de 2009

Instalacion del firmware de LejOs

Ahora vamos a instalar el firmware de LejOs en nuestro brick de lego mindstorm para poder ejecutar nuestros programas.

Existen 2 maneras de instalar el firmware, vía bluetooth y vía USB, vamos a explicar ambas maneras aunque yo personalmente siempre usare la vía bluetooth para comunicarme con el robot.

El primer paso independientemente de la forma de actualizacion que escojamos es poner el brick en modo actualizacion del firmware (update firmware), para ellos debemos pulsar durante unos segundos el botoncico que hay detras en la esquina superior derecha (Nos hara falta un objeto fino). Cuando pulsemos este boton durante unos segundos escucharemos un click, que nos indicara que ya esta en modo actualizacion, hay que tener cuidado al realizar este paso, bueno, mas que cuidado saber que al pulsar este boton SE BORRARA TODO EL CONTENIDO del brick, por tanto si tenemos algun programa introducido deberemos guardarlo. Cuando encendamos nuestro lego no aparecerá absolutamente nada, solo iremos un click, click constante.

Actualización vía USB

Para poder comunicarnos con nuestro lego vía usb deberemos tener permisos para escribir en el puerto del usb, por tanto en primer lugar deberemos de saber en que puerto usb se ha conectado para ello ejecutaremos
lsusb
Ahí observaremos en que puerto USB tenemos conectado nuestro brick y pasaremos a darle permisos a ese puerto.
Para ello nos iremos a /dev/bus/usb/xxx/yyy donde xxx es el puerto que hemos visto con lsusb e yyy que deberá ser el numero mas alto que haya en esa "carpeta" el motivo de esto es que cada vez que conectamos el dispositivo se le asigna un numero creciente, por tanto deberemos de ver cual es el numero que tiene asignado en ese momento.
Para darle permisos basta con ejecutar
sudo chmod a+x /dev/bus/usb/xxx/yyy
Ahora tendremos permisos para escribir en ese puerto y podremos actualizar o comunicarnos con nuestro lego.

Actualización vía Bluetooth

Para comunicarnos por via bluetooth con el brick es necesario emparejar ambos dispositivos, la forma mas facil es usar el asistente de bluetooth de ubuntu, le damos a "Configurar un dispositivo nuevo...", nos aparecerá una ventana con los dispositivos encontrados, si no hemos cambiado nada el nombre por defecto es "NXT", lo escogemos y elegimos la opción PIN fijo marcando "1234", con esto ya deberíamos tener emparejado nuestro dispositivo.

Común

Por ultimo ya solo resta ejecutar
nxjflash
Y automagicamente se instalara el firmare en el brick, pudiendo ya subir nuestros programas.

sábado, 11 de julio de 2009

Modificación del classpath

En las nuevas versiones de java no existe por defecto la variable de entorno CLASSPATH por lo que si queremos ejecutar o compilar algún programa que use librerías externas debemos definirlo, los GUI como Eclipse, Netbeans, JBuilder... etc nos facilitan mucho el integrar librerías externas pero nos oculta como se hace "a pelo" yo personalmente en Java siempre he programado usando un GUI porque opino que para realizar aplicaciones gráficas es mucho mas cómodo, pero no soy muy amigo de estos entornos debido a que hacen demasiadas cosas que o no quiero o no se como las hacen y si luego falla algo o quieres hacer alguna cosa que no proporciona el entorno de desarrollo estas muy perdido, por lo que en esta entrada intentaremos comentar como crear nuestro classpath para poder compilar nuestros programas desde la consola.

Primero comentar que esto solo es necesario si queremos usar las librerías que nos ofrece LejOs para la comunicación con el PC, si solo deseamos crear nuestros programas para que se ejecuten autonomamente en nuestro robot esto no es necesario.

En la entrada anterior ya habíamos compilado y configurado bluecove para poder comunicarnos con nuestro robot a la hora de subir nuestros programas, ahora lo que queremos es podemos compilar programas para que se ejecuten en nuestro pc y usen las librerías de LejOs, para eso, lo primero que debemos hacer es ejecutar en una consola:
echo $CLASSPATH
Por defecto esto no debería devolver nada, esto indica que no hemos definido previamente ningún classpath, si por el contrario esto nos devuelve algo es que nuestro classpath ha sido modificado previamente (por nosotros o por alguna aplicación) y deberemos poner especial cuidado al modificar la variable de entorno pues algunos programas podrían dejar de funcionar.
Sea cual sea el caso lo primero que vamos a hacer es abrir el archivo .bashrc e irnos al final e incluir la siguiente linea:

Si nuestro classpath estaba vacío:
export CLASSPATH=/lejos_nxj/3rdparty/lib/bluecove.jar:/lejos_nxj/3rdparty/lib/bluecove-gpl.jar:./

Si nuestro classpath tenia información:
export CLASSPATH=/lejos_nxj/3rdparty/lib/bluecove.jar:/lejos_nxj/3rdparty/lib/bluecove-gpl.jar:./:$CLASSPATH

Esto incluirá en nuestro classpath las librerías de comunicación con el pc y las librerías de bluetooth, y por ultimo pondrá lo que había anteriormente en el classpath.

Ni que decir tiene que las rutas que hay que introducir han de ser las absolutas, nunca rutas relativas, por lo que cuidado al copiar las lineas del classpath.

Con esto ya no debería haber ningún problema al compilar ni al ejecutar nuestros programas.

Comunicacion Bluetooth

A mi personalmente no me funciona la conexión usb con el robot, aunque realmente no me importa demasiado ya que en mi proyecto debo comunicarme con los robots vía Bluetooth por lo que explicare como subir los programas al robot mediante esta tecnología.

Lo primero y principal es asegurarse de que nuestro pc dispone de Bluetooth y de que tenemos instaladas las librerías adecuadas de los repositorios, concretamente nos sera necesario tener instalados los paquetes "bluetooth", "libbluetooth3" y "libbluetooth-dev" instalables mediante sudo apt-get install paquete o usando el gestor de paquetes predeterminado.

Una vez instalados los paquetes debemos instalar las librerías bluecove, se pueden descargar de su pagina oficial, encontre esta web que explica muy claramente como hay que instalar esta libreria, como en el anterior caso, are un pequeño resumen de los pasos a seguir.

En primer lugar debemos de asegurarnos que tenemos instalado maven, de nuevo podemos instalarlo mediante sudo apt-get install maven2 o buscándolo en el gestor de paquetes. Una vez instalado ya podemos seguir los pasos:

1.- Descargar y extraer los ficheros
bluecove-2.1.0-sources.tar.gz
bluecove-gpl-2.1.0-sources.tar.gz
2.- Abrir un terminal, situarse en la carpeta de bluecove-2.1.0 y ejecutar maven. Si todo esta correcto debería terminar con un build succesfull.
3.- Situarse en la carpeta bluecove-gpl-2.1.0 y de nuevo ejecutar maven.
4.- Ahora en ambas carpetas debemos de tener una nueva llamada target donde estan los ficheros que han sido compilados por maven. Dentro de la carpeta bluecove-gpl-2.1.0/target tendremos:
bluecove-gpl-2.1.0.jar
libbluecove_x64.so
Y en bluecove-2.1.0 tendremos:
bluecove-2.1.0.jar
5.- Ahora debeemos poner en /usr/lib el archivo libbluecove_x64.so y crear un link en la misma carpeta (ln -s libbluecove_x64.so libbluecove.so)
6.- Por ultimo debemos poner los .jar (libbluecove-gpl-2.1.0.jar y bluecove-2.1.0.jar) dentro de la carpeta /3rdparty/lib de LejOs, tambien creamos los links correspondientes (ln -s bluecove-2.1.0.jar bluecove.jar, ln -s bluecove-gpl-2.1.0.jar bluecove-gpl.jar)

De esta manera ya deberíamos poder subir nuestro programa al robot ejecutando:
nxj -r Tune

Instalación y configuración de LejOS

Para empezar hay que descargarse el sistema LejOs de la web oficial. Aquí aprenderemos a configurarlo en un sistema Linux concretamente Ubuntu, supongo que no habrá sustanciales diferencias con otras distribuciones.
Cuando descargamos el archivo encontraremos en su interior un readme en formato html que nos indicara los pasos que debemos ir siguiendo, para los que no estén muy duchos en ingles o les parezca muy complicado, intentare poner aquí los pasos de manera simplificada:

Debemos crear una serie de variables de entorno necesarias para que el sistema sepa como localizar los ejecutables y las librerías necesarias, para eso debemos modificar el archivo .bashrc y agregaremos las siguientes lineas:

export NXJ_HOME="Ruta de acceso a la carpeta lejos_nxj"
export PATH="Ruta de acceso a la carpeta bin dentro de lejos_nxj:$PATH"

Es importante no olvidarse en la variable PATH de :$PATH.

Para comprobar que todo ha ido bien, basta con irse aun terminal y tratar de ejecutar nxjc (por ejemplo) y comprobar que lo reconoce como comando.

Ahora podremos compilar nuestro primer programa. La descarga que hicimos de LejOs viene con una serie de ejemplos para poder probar nuestro robot, por lo que debemos ir a la carpeta /project/samples/Tune y ejecutar:

nxjc Tune.java

Si todo ha ido bien debería compilarse sin ningún problema.

Inicio

En este blog voy a tratar de ir escribiendo los pasos fundamentales para la creación de un proyecto con los robots de Lego Mindstorm NXT usando el sistema LejOs, comenzare con las configuraciones básicas del sistema y posteriormente sobre los avances del proyecto en si. La idea de este blog es tener la información recopilada para que me pueda de servir a modo de resumen y consulta, pero es posible que a alguien le pueda ser útil esta información.