LeJOS, la plataforma Java para LEGO Mindstorms

SUNJavaLEGO Mindstorms ha sido sin duda uno de los productos más revolucionarios que ha sacado LEGO en los últimos años, y a pesar de su relativamente corta vida ha sufrido una importante evolución. Sin duda el éxito de este producto radica en su enorme potencial ya que permite literalmente crear robots programables con casi cualquier funcionalidad debido a la gran flexibilidad de LEGO (se pueden crear infinitos diseños posibles). Todo esto ha permitido que la robótica esté al alcance del usuario medio, algo nada desdeñable si tenemos en cuenta que los robots comerciales y sus piezas cuestan miles de euros, o que su elevada complejidad suele limitar su uso a entornos de investigación en universidades. Hoy nos introducimos en LeJOS, la plataforma Java para LEGO Mindstorms.

pionnerUn robot pioneer y varios sensores pueden costar miles de euros.

El interfaz de programación gráfico del LEGO Mindstorms (NXT-G) nos permite programar, compilar y volcar un programa al NXT. Sin embargo, debido a las limitaciones de este entorno (ya que en un principio está orientado para que niños y gente muy joven pueda usarlo y no les resulte complicado o aburrido) es imposible explotar todo el potencial que nos permite el LEGO NXT. Con la idea de aprovechar al máximo dicho potencial y poder programar el NXT en lenguajes conocidos como Java o C++, han surgido sistemas operativos alternativos al de LEGO, como el LeJOS (Java), o BrickOS (C++), que nos permiten una programación mucho más avanzada. Estas plataformas son completamente gratuitas (Freeware), creadas por personas sin ánimo de lucro y gracias a las cuales ha evolucionado el mundo de LEGO Mindstorms.

Resolvedor del cubo de Rubik
Gracias a la programación en lenguajes más complejos como Java o C++ se pueden solucionar problemas más complejos. Gente con suficiente talento es capaz de crear robots que en un principio parecen imposibles.

Hoy quiero introduciros en el mundo del LeJOS que, aunque lleve su tiempo aprenderlo, merece la pena. Para ello primero voy a hacer una pequeña introducción a lo que es Java y de donde viene. Java es un lenguaje Orientado a Objetos.

Los lenguajes OO (Orientados a Objetos) son el resultado de la evolución de los lenguajes de programación, donde se usa una capacidad única del ser humano llamada Abstracción para ser capaz de reducir la dificultad de problemas que un principio son tremendamente complejos. La abstracción consiste en aislar un elemento de su contexto o entorno, centrarse en “¿Qué hacen las cosas?”, en vez de “¿Cómo lo hacen?”. Detrás de las lineas de código de un programa hay instrucciones de ensamblador que a su vez se traducen en complejas secuencias de unos y ceros, que finalmente se traducirán en si pasa o no electricidad por cierto circuito, o si cierta sección de un disco duro esta magnetizada o no. Pero no nos interesa saber cómo funciona todo ese complejo mecanismo, ya que llevaría mucho tiempo y además no es necesario para nuestro objetivo. Si no fueramos capaces de abstraernos y centrar nuestra atención en lo que queremos conseguir, en lugar de cómo hacerlo, no seríamos capaces de resolver gran cantidad de problemas.

eclipseZkFoodToGo
Ejemplo de programa en Java, en el entorno de programación Eclipse.

Definamos en primer lugar qué es un objeto. Un objeto es algo que tiene un comportamiento definido, una identidad, y que puede tanto recibir como enviar mensajes. La principal estructura de la programación en los Lenguajes OO son las Clases de Objetos que, como su propio nombre indica, define como serán los objetos que pertenezcan a dicha clase. Las clases se componen de:

  • Métodos :
    Los métodos son las acciones que serán capaces de desarrollar los objetos de dicha clase.
  • Atributos:
    Los atributos son las características de la clase y definen el estado actual de dicho objeto.

Todo esto suena complejo pero con un ejemplo se ilustra muy claramente:

coche_01
Los mecanismos que se activan al apretar el acelerador de un coche son complejos, pero la abstracción del ser humano le permite omitir esos mecanísmos y centrarse en que al apretarlo el coche va más rapido, sin importar el “cómo”.

Supongamos que en nuestro programa queremos tener objetos de tipo Coche. Para ello crearíamos una clase llamada Coche. Puesto que hemos dicho que los atributos son características de la clase que definirían su estado actual podríamos crear un atributo llamado Velocidad en el que tenemos la velocidad actual a la que va el coche, otro llamado Potencia en el que tenemos la potencia del coche, y por ejemplo un último llamado Vel_max donde tengamos la velocidad máxima del coche. Ya que los métodos son las “acciones” que es capaz de realizar dicho objeto, podemos tener un método llamado acelerar que aumente el valor de atributo Velocidad, pero nunca por encima del atributo Vel_max; asi mismo podriamos tener otro método llamado frenar que redujera el valor de Velocidad. Como veis se trata de crear la clase que queremos con las características que necesitemos.

Desde un punto de vista coloquial LeJOS no es más que un montón de clases de objetos ya funcionales y ordenadas en librerías para que cualquier usuario pueda utilizarlas a su antojo. Por ejemplo existe la clase Motor que nos permite manejar un motor del NXT, por lo que tiene métodos como forward(), que nos permite que el motor vaya marcha adelante, o setPower(int aPower) con el que podemos elegir la potencia que queremos darle a ese motor.

Y esto es todo por hoy, en posteriores entradas del blog -el objetivo de este artículo es iniciar una serie de artículos sobre LeJOS- explicaré su instalación tanto en Windows como en Linux, para proceder después con programas de complejidad creciente.

Comments are closed.