Jugando con LEGO MindStorms: NXT

embeddedArco

Primeros pasos con el robotito Lego Mindstorms NXT. Información útil en la red sobre programación, comunicación, hardware, etc.

Acaba de caer en mis manos un NXT… ya, ya sé que es un juguetito para chavales de 12 o más años, así que si no cumples la edad… Eye-wink

Bueno, pues el caso es que este cacharrito está bastante chulo. Lo que sigue es mayormente información y referencias que he obtenido en la red.

Hardware

Las especificaciones del dispositivo son:

  • Micro principal: ARM7 de 32 bits (a 48 MHz), que cuenta con 256 KiB de Flash y 64 KiB de RAM (ya sé que parece poco, pero es suficiente para muchas cosas)
  • Micro de sensores: AVR de 8 bits (a 8 MHz), con 4 KiB de Flash y 512 bytes de RAM
  • Bluetooth (SPP, Serial Port Profile, class II Device, 10 metros)
  • USB 2.0 (12 Mib/s)
  • 7 conectores (RJ-12 con el tope a la derecha, de 6 hilos) para sensores/motores/etc.
  • Display LCD, con pad de 4 botones
  • Speaker interno
  • Alimentación: 6 pilas AA

Además, internamente tenemos un conector JTAG conectado directamente al micro ARM y otro para el AVR.

Bueno, no está mal, el ladrillo (¡ehh, que se llama así, brick!) tiene un micro principal, encargado de ejecutar el software que quieras (de fábrica cuenta con un firmware de LEGO) y del bluetooth, y uno secundario encargado de los sensores y los motores.

Una posible pega: las baterías, que lleva 6 pilas. La autonomía depende del uso que le demos, pero si no tiras mucho de los motores, no es del todo mala. Resolverlo es fácil: usar pilas recargables o alimentarlo directamente desde una fuente externa (con un par de pinzas de cocodrilo bastaría).

Software

Por desgracia, el software que te proporciona LEGO es para Windows. Este software sirve para programar el NXT, actualizar el firmware, controlarlo por medio de bluetooth, etc. En principio es muy sencillo de usar, sobre todo teniendo presente la audiencia a la que va destinado. El lenguaje usado es conocido como NXT-G, un lenguaje de programación gráfico muy sencillo. Pero, evidentemente, no vamos a mancillar nuestro precioso disco duro instalando un windows (¿verdad?), así que podemos buscar soluciones alternativas. En este caso, yo me voy a centrar en GNU/Linux.

Buscando en la página de Mindstorms, no se vé por ningún lado que haya una versión compatible de su software, pero sí se puede ver algo bastante interesante: ¡el sistema operativo que lleva el chisme tiene una licencia “Open Source”! Bien, es un buen indicativo. Además, Lego proporciona herramientas para desarrollar: SDK (Software Development Kit), HDK (Hardware D. K.) y BDK (Bluetooth D. K.). Todo se puede descargar desde NXTreme.

Bien, parece que se pueden hacer cosillas. En mi caso, lo primero que hice fue echar un vistazo al código fuente del firmware. En el EULA se nos explica que usaron el IAR Embedded Workbench que, en teoría, se adapta al ANSI C/C++. Si navegas un poco por las fuentes, descubrirás que el firmware es una implementación de una máquina virtual. Luego todo software que queramos correr sobre el NXT debe estar compilado para el bytecode que interpretará esa máquina virtual, en vez de ser código nativo para el ARM. Eso si no queremos hacer cambios sustanciales en el firmware (es decir, cambiarlo y poner otro, de lo que ya hablaremos).

Vale. Ahora echemos un vistazo a los SDK’s que ofrecen. El primero que aparece es el Fantom SDK, que no es otra cosa que el driver para Windows/Osx. Puede que haya algo de información en él, pero de momento, obviémoslo.

Lo siguiente que ofrecen en la web de NXTreme, es un pdf de documentación explicando el formato bytecode de la máquina virtual. Interesante, si fuera necesario escribir un compilador para la VM. De todos modos, siempre viene bien tener documentación a mano… Sticking out tongue

El siguiente enlace (el de HDK) nos provee una inmensa cantidad de información acerca de la plataforma entera, en cuestiones de hardware. Tenemos esquemas, explicaciones, comunicaciones y no sólo del NXT sino también de algunos sensores… vamos, todo lo necesario para poder disfrutar del juguetito más todavía Laughing out loud. Podemos reconstruir el cacharrito en nuestro laboratorio particular, sus sensores, etc. Muuuy interesante.

También tenemos el BDK, Bluetooth Development Kit, que nos explica la interfaz entre el ARM y el core bluetooth. También los comandos que podemos enviar por bluetooth al NXT para controlarlo remotamente. Esto incluye el tratamiento de ficheros, upload, download, etc. Además, la capa de control de estos servicios está por debajo de la de bluetooth, lo que permite que los utilicemos tanto desde el bluetooth como desde el puerto USB.

Bien, hasta ahora tenemos suficiente información como para saber cualquier detalle de todo el juguetito. Además tenemos el código fuente del firmware oficial, detalles de programación, etc. Podemos modificar el sistema operativo o incluso crear uno nuevo. De hecho, ya lo han hecho, pero de eso hablaremos más tarde. Ahora, lo siguiente que puede interesarnos es comunicarnos con el chisme desde nuestro equipo.

Googleamos un poco, y tenemos:

  • jstuber, explica algunos detalles de cómo hacer pruebas con el bluetooth desde GNU/Linux y el NXT. Útil para comprobar que el chisme se enlaza y que el dispositivo bluetooth es compatible. En general, en la página existen algunas cosillas sobre el NXT, por ejemplo, fotos de las placas, o como instalarse la toolchain para el ARM en Debian (la toolchain para desarrollar código nativo, no para la máquina virtual). También tiene documentos sobre cómo hacerse un depurador JTAG para el NXT, o los datasheet del ARM.

La verdad es que hay mucha gente que ha escrito wrappers de la API del NXT para enviar comandos desde el PC por bluetooth o por el cable USB. Esta es una pequeña lista, con los lenguajes asociados:

Como ves, muchas opciones, de hecho para todos los gustos. Todo esto para escribir programas en nuestro equipo que actúan realmente en el NXT, usando el firmware original de Lego, con su protocolo de comunicaciones.

Ahora bien, quizá quieras hacer algo más chulo, y el firmware original no te lo permita. Evidentemente, se puede modificar, ya que disponemos del código. Quizá, con pocos arreglillos, sea compilable con GCC. De todos modos, también podemos instalar un nuevo firmware. Por ejemplo:

  • LeJOS NXJ, máquina virtual de Java para NXT (Lejos NXJ).
  • LeJOS OSEK, RTOS escrito en Ansi C/C++ para el NXT.
  • pbLua, interesante firmware que permite usar el brick como un periférico más, compilando software en el mismo. El lenguaje elegido es el casi desconocido Lua.
  • NXOS otro firmware, escrito en C. Todavía en fase beta.

Podemos desarrollar nuestro programita en Java, y ejecutarlo en la máquina virtual del NXT. Ellos nos proporcionan las herramientas para cargar el software. O, si usamos LejOS osek, tenemos el sistema operativo de tiempo real, y una toolchain que usa GCC para desarrollar nuestras aplicacioncillas. Mola, ¿no? Sticking out tongue

Por si se queda algo en el tintero, aquí hay una lista completita de muchas alternativas.

  • teamhassenplug, lista y comparaciones sobre el software de desarrollo existente para NXT.

Pero, ¿qué pasa si no queremos modificar el firmware original? Pues nada. Tenemos otras alternativas, como por ejemplo:

  • bricxcc, dos lenguajes, NBC (NXT Byte Codes) y NXC (Not eXactly C), uno tipo ensamblador y otro pseudo-c, que se traduce al bytecode de la máquina virtual del NXT.
  • ntxassembler, un ensamblador para el firmware original un tanto peculiar: ensambla a partir de un xml.

Si te interesa escribir en ensamblador, puedes hacerlo directamente en el NBC. Si queremos un lenguaje de más alto nivel, tenemos NXC, que es muy parecido a C. En la web tienen las herramientas necesarias y bastante documentación sobre ambos, por lo que no es difícil utilizarlos.

Para los menos atrevidos, existe una utilidad para Windows que básicamente es un IDE integrado para el desarrollo con NXC. Es libre, y aunque en la forja sólo está disponible la versión para Windows, es posible conseguir el código. Lástima que esté en Delphi. Sad

Y, de momento, poco más. Si sabes algo interesante, no dudes en comentarlo apropiadamente. Smiling

Más cosas

  • altnxt-g, programitas, artículos, cosas varias sobre programación del NXT.
  • raymond, una utilidad de shell para enviar comandos al ladrillo. Muy útil para comenzar. Se puede obtener información del NXT, así como enviar ficheros, descargarlos, etc. Usa USB.
  • linxt, como el anterior, pero escrito en perl.
  • nxtasy.org, blog con mucho relacionado con NXT
  • Bluetooth SSP to GNU/Linux
  • NXTRC, información sobre interconexión entre GNU/Linux y NXT usando bluetooth, además del práctico software NXTRC
  • Grupo de usuarios de NXT
  • Libnxt una librería interesante, tiene utilidades curiosas como fwexec que permite cargar en RAM un firmware para probarlo sin escribirlo en la FLASH.

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

escribir en ensamblador???

escribir en ensamblador??? cambiar el firmware??? solo en una mente enfermiza típica de linuxeros se puede ocurrir tal cosa. Esto es para jugar, para divertirse para enseñarles a los niños una intro a la robótica, a la programación y visual etc.. Yo uso Microsoft Robotics Studio y programo en C# LINUX??? No gracias!
Saludos

oscarah's picture

Siguiente.

Siguiente.

CAUTION: don't feed the troll. It hurts. Instead, throw away some handy children.

"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" --GCC 4.3.1

david.villa's picture

Bueno

Creo que tu opinión es una prueba clara de la existencia de dos formas diferentes de ver la tecnología:

  1. los que la usan (para jugar y divertirse) y no hacen más preguntas que las que el “fabricante” esté dispuesto a contestar.
  2. los que además quieren entender cómo funciona y estrujar todas las posibilidades que tengan a su alcance. Estos son los de la “mente enfermiza”, ya sean linuxeros (no lo quiera Dios) o simplemente mentes inquietas (léase != borregos)

Venga, disfruta de tu iPhone.

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

LEGO

Gracias por la información, estoy trabajando en un proyecto para el LEGO ya hay un proyecto de tesis donde hicieron un compilador pero todo quedó en simulación, mi trabajo es llevarlo a ejeción en los Lego. Gracias y ojalá puedas escribir más cosas acerca de este tema apenas empiezo y no se mucho de esto.

PFC con Mindstorms NXT

Vaya, muy interesante tu reseña, y muchas gracias por la colección de links, me has ahorrado mucho trabajo ^^
Estoy empezando mi PFC, que va a tratar sobre las aplicaciones docentes de estos pequeños juguetitos, y aquí he encontrado mucha info sobre dónde empezar a mirar.
No dudaré en escribirte algún comentario si encuentro algo interesante, aunque vista la colección que has hecho, lo dudo…
¡Saludos!

oscarah's picture

Me alegro...

… de que te haya ahorrado algo de tiempo Laughing out loud Si encuentras algo que creas interesante, dímelo sin vacilar, que lo añado a la lista.

Lástima que LEGO solo distribuya el software de programación para Windows. Quizá un día de estos me anime, y me ponga a hacer algo parecido para GNU… quién sabe Sticking out tongue
_______________________________________________
La “S” de “CRySoL” es de “Software” no de “Salsa-rosa”.
La “L” de “CRySoL” es de “Libre” no de “Linux”.

"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" --GCC 4.3.1

MINDSTORMS y GNU/Linux.

Acabo de llegar a esta página desde las alertas de Google...

Y me gusta. Tengo un LEGO MINDSTORMS desde hace unos meses y, para mí, es un desastre tener que programarlo desde Windows (tengo que usar el ordenador de mi mujer, ya que yo no lo tengo en mi equipo).

No sólo se trata de una cuestión práctica (podría instalar W en mi pc y arrancarlo), sino de principios. Me fastidia no poder usarlo fácilmente desde GNU/Linux. Tengo este tema aún pendiente y me parece muy buena tu recopilación.

El problema que he visto hasta el momento es la facilidad de uso para los no muy duchos en programación. Por dos razones. Por una parte ando algo oxidado, pero creo que en poco podría retomar el C y hacer algo en poco tiempo. Pero este asunto me interesa mucho para mis alumnos (soy profesor de Tecnología) y a ellos no me parece realista plantearles un lenguaje de programación "clásico". Me gustaría un entorno tipo el que trae el cacharro "de fábrica". De hecho, ha sido para mí una grata sorpresa descubrir este entorno de programación, ya que yo hice mi PFC con LabVIEW y siempre me pareció un entorno estupendo para un entorno de ingeniería/taller.

Bueno, disculpad mi perorata. Pero me pareció tan buena recopilación que no podía dejar de comentarlo.

Hasta pronto,

oscarah's picture

Gracias

Sí, llevas razón. Ese es un punto flaco para los chavales. Entiendo que NXC o Java puede resultar un poco doloroso. Quizá puedas instalar LabVIEW en GNU, pero de todos modos, sería muy práctico tener a mano una herramienta de programación gráfica para las mentes jóvenes. Quizá alguien de por aquí se anime... Laughing out loud
________________________________________________
La "S" de "CRySoL" es de "Software" no de "Salsa-rosa".
La "L" de "CRySoL" es de "Libre" no de "Linux".

"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" --GCC 4.3.1

david.villa's picture

Esto promete

Muy buena recopilación de enlaces para empezar con el invento, gracias. Le veo muchas posibilidades, y no sólo como juguete.

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

oscarah's picture

Sip

El cacharrito es muy interesante, sobre todo por la interfaz bluetooth que ofrece. Es básicamente un PLC con ruedas y bluez Sticking out tongue
________________________________________________
La "S" de "CRySoL" es de "Software" no de "Salsa-rosa".
La "L" de "CRySoL" es de "Libre" no de "Linux".

"aviso: la dereferencia de punteros de tipo castigado romperá las reglas de alias estricto" --GCC 4.3.1

Nosotros ya empezamos a juguetear!

Hola! Pues si, es la caña se pueden hacer maravillas nosotros somos un grupo d estudiante de la Universidad de Las Palmas de Gran Canaria y estamos haciendo nustros primeros robots, nuestro blog es http://niutinbot.blogspot.com ahí ponemos cada dia los avances que hacemos además de la publicacion de nuevos proyectos. Si quieren visítenlo y denos vuestra opinión Eye-wink
Gracias! Esperamos que os guste