Como ya sabemos, una de las principales razones para tener un NXT es su capacidad de procesamiento, y más aún, la posibilidad que tenemos de programarlo. Es este post haré un repaso por las diferentes alternativas que tenemos en el mundo del software libre, para programar nuestros robots.
En otro post comenté sobre las características y capacidades del bloque NXT, ahora las repasaremos desde el punto de vista de sus potencialidades para programarlo. NuestroLego Mindstorm viene con un ambiente de programación privativo y un lenguaje gráfico, basado en bloques, llamado NXT-G (aquí algunos ejemplos de programas NXT-G). El NXT-G es bastante amigable y una herramienta ingeniosa para introducir a los niños en los conceptos de programación, sin embargo, como dije antes, es privativo. Aquí podrán descargar una guía rápida de programación NXT-G, o esta otra.
Para poder sacar el máximo de la capacidad de nuestros robots, aquellos que somos aficionados a la programación, seguramente preferirán lenguajes de programación con más capacidad que la que puede ofrecer un diagrama gráfico. Antes que nada repasemos las características del bloque NXT:
32-bit Atmel AT91SAM7S256 main microcontroller (256 KB de memoria flash, 64 KB RAM)
Microcontrolador de 8-bit Atmel ATmega48 @ 4 MHz (4 KB de memoria flash , 512 Bytes RAM)
Patalla LCD de 100x64 pixel
Cuatro puertos de entrada de 6-pin (ports 1-4)
Tres puertos de salida de 6-pin (ports A-C)
Puerto USB
Bluetooth Class II V2.0
Loudspeaker - 8 kHz, 8-bit resolution, 2–16 kHz sample rate
Panel de 4 botones
Alimentación de corriente por 6 baterías AA o una bateria recargable DC NXT
Periféricos sensores:
Periféricos actuadores:
Fuente: http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT_2.0
Estas especificaciones plantean la posibilidad de resolver la autonomía en un gran número de tareas para nuestros robots desde el propio NXT, sin embargo, para cierto tipo de trabajos no, especialmente para aquellos en los que se requiere mayor capacidad de procesamiento, por ejemplo el procesamiento de imágenes de video o para ciertos tipos de cálculos en temas como Inteligencia Artificial. En estos casos seguirá siendo necesario recurrir a la capacidad de computadores de escritorio o servidores.
Cuando abordamos el tema de programar nuestro NXT tenemos que tomar varias cosas en cuenta antes de seleccionar el lenguaje y las herramientas de desarrollo, como las capacidades del NXT y la compatibilidad de este con el lenguaje que deseamos utilizar. Para ciertos lenguajes es necesario la actualización o el cambio del sistema operativo interno de la NXT (firmware). Por ejemplo, para usar Java es necesario sustituir el firmware original por el LejOS.
En el caso de que no queramos modificar el sistema interno, es importante destacar que las funciones del mismo son accesibles, tanto desde las aplicaciones internas como desde los puertos de entrada/salida, como el USB y el Bluetooth. Esta característica permite que, o bien los lenguajes de programación empleados, deben generar en sus compilaciones, programas compatibles con el NXT y por tanto puedan ser cargados y ejecutados en el mismo (*.rxe). O por otra parte, nuestros programas hagan uso de librerías adecuadas para comunicarse con el NXT y por tanto, puedan ejecutarse desde fuera del mismo. En el primer caso, obtendremos soluciones con mucho mayor autonomía pero limitadas a las capacidades de procesamiento de la NXT. En el segundo caso podremos aprovechar el uso computadores de mayor capacidad de procesamiento pero las limitaciones de movilidad y autonomía que estas conexiones (Bluetooth o USB) impliquen.
Gracias al espíritu científico con el que fue conceptualizado y construido el Lego Mindstorm, sus creadores dispusieron suficiente información técnica como para la proliferación de herramientas libres para el desarrollo sobre esta plataforma, así como nuevos sensores y elementos electrónicos compatibles con ella. A continuación haré un breve repaso de las herramientas y lenguajes de desarrollo para la NXT:
Enchanting es un ambiente gráfico de programación, basado en Scratch y BYOB/Snap!, contiene conectores para la programación del NXT dentro del ambiente del popular Scratch IDE.
leJOS NXJ es un lenguaje de alto nivel de fuentes abiertas y basado en Java. Requiere de un firmware modificado desarrollado por el equipo de leJOS.
BricxCC (Bricx Command Center) de John Hansen, es un IDE para programar varias versiones de bloque programables de LEGO, como el RCX y el NXT. Actualmente incluye lenguajes como el NQC (Para el bloque RXC), el NBC (Beta) y NXC (para el NXT). Lamentablemente solo está disponible para Windows. Hasta ahora he podido hacerlo funcionar en GMU/Linux con Wine pero sin comunicación directa con el NXT.
NQC Not Quite C esta dirigido a programar el bloque RCX y uno de los pocos que reemplaza el framework, utiliza como lenguaje de programación una versión propia de C. Debe emular las instrucciones, haciendo que el proceso sea más lento que por la metodología de reemplazar el firmware. Funciona tanto en modo interpretado, para que sea ejecutado desde fuera, como en modo compilado para que sea cargado en el bloque. Not Quite C esta disponible para Mac OS y Windows y Linux.
NBC (Next Byte Codes) es un languaje básico de código abierta con una sintaxis de ensamblador que puede ser utilizado para programar el bloque NXT a bajo nivel. El ambiente BricxCC también tiene la capacidad de des-compilar los archivos ejecutables estándar .rxe hacia codigo NBC.
NXC (Not eXactly C) es un lenguaje de alto nivel similar a C, construido sobre el compilador NBC, por lo que también puede ser utilizado para programar el bloque NXT. NXC is basicamente NQC para el NXT. es uno de los más ampliamente usados por otros lenguajes de programación para el NXT. Es posible, hasta crear videojuegos para el NXT.
pbLua es un port de el lenguaje de programación Lua, consiste en un lenguaje interpretado de propósito general, para que el Lego Mindstorms. lo pueda ejecutar requiere de un firmware propio.
PyNXC en un proyecto que convierte código Python en código binario NXC “Not Exactly C”, que luego puede ser cargado en nuestros Robots del Lego Mindstorm.
BrickTool por John Hansen es un utilidad basada en Bluetooth para las comunicaciones entre el PC y el bloque NXT.
ICommand por Brian Bagnall: es un API de Java API para controlar remotamente el bloque Lego NXT.
NXT# por Bram Fokke es una librería para controlar el Lego Mindstorms NXT para .NET.
NXT Perl API por Michael Collins es una capa de control del NXT escrita en Perl**.
**
*Ruby-nxt* es una librería para controlar el NXT remotamente usando Ruby.
*LibNxt*por David Anderson es una librería de comunicación entre el PC y el bloque NXT escrita en C.
*Nxt-Python*es una librería Python para el control de Robots Lego Mindstorms NXT, permite la comunicación con el NXT tanto por via USB como por Bluetooth. Soporta comandos directos y una gran variedad de sensores adicionales de terceros.
T2N (Talk to NXT) es una herramienta por línea de comandos para transferir programas ejecutables y archivos de datos entre el PC y el bloque NXT
Hay una amplia variedad de alternativas para programar los robots de Lego. Pienso que, a menos que sean amantes de Java (que no es mi caso), no hace falta sustituir el firmaware original para programar nuestros robots y sacarles el máximo provecho.
A mi juicio las grandes alternativas para la programación del Lego Minstorm NXT son Python y C/C++, ya sea para crear ejecutables nativos (*.rxe) para el bloque NXT con PyNXC o NQC, o para compilar aplicaciones que se ejecuten el PC y se comuniquen con el NXT (por USB o Bluetooth) con nxt-python o con LibNxt, en Python y C/C++ respectivamente.
En varios post anteriores muestro como controlar un carro robot con python, y desde una “canaimita” este es uno de los videos:
If you see mistakes or want to suggest changes, please create an issue on the source repository.
For attribution, please cite this work as
Sosa (2013, Aug. 25). Blog de José R Sosa: Alternativas de programación del NXT con Software Libre. Retrieved from https://josersosa.github.io/personalweb/posts/2021-06-13-alternativas-de-programacion-del-nxt-con-software-libre/
BibTeX citation
@misc{sosa2013alternativas, author = {Sosa, José R}, title = {Blog de José R Sosa: Alternativas de programación del NXT con Software Libre}, url = {https://josersosa.github.io/personalweb/posts/2021-06-13-alternativas-de-programacion-del-nxt-con-software-libre/}, year = {2013} }