miércoles, 11 de septiembre de 2013

LEGO OPEN SOURCE

Algo que llama la atención  es que Lego Mindstorms  es una plataforma open source.

En la pagina de lego es posible descargar toda la información relación con el hardware y software del NXT.  Por ejemplo descargando el archivo que se encuentra en la seccion "Hardware developed Kit" tendrá accesos a todos los planos y diagramas electrónicos del NXT y sus sensores. 

Los links de acceso  a estas paginas son:

http://mindstorms.lego.com/en-gb/support/files/Firmware.aspx
http://mindstorms.lego.com/en-gb/support/files/Firmware.aspx#Advanced

Adicionalmente, y previendo que seguramente  con la salida del EV3, el soporte técnico y  las paginas que proveen estas informaciones será descontinuada  en un futuro cercano (no se exactamente cuanto tiempo continuara LEGO soportando la plataforma NXT), descargue todos los archivos suministrados por LEGO y los deje en mi gdrive en la siguiente dirección:

https://drive.google.com/folderview?id=0B7gfmEc7iOZHS1ktOS1IV1NEZkk&usp=sharing

domingo, 8 de septiembre de 2013

LENGUAJES DE PROGRAMACION

El lenguaje de programación con el que viene el Lego Mindstorms es el  NXT-G, y la versión actual es la 2.0. Este programa esta basado en LabViews de Nationals Instruments. Para mayor información ver:

Cuando por primera vez se empieza a programar el NXT, encontramos este lenguaje muy cómodo y fácil de aprender, debido al ambiente gráfico en el que esta desarrollado.  No obstante, a medida que el usuario avanza y va cogiendo experiencia en este campo,  empezará a encontrar ciertas limitantes. Mas aun, si la persona ha tenido experiencia  previas en el campo de la programación de computadores, estas limitantes se tornan mas evidentes.

Una de las limitantes mas relevantes que encontramos al usar el NXT-G v 2.0  es el hecho de que en programas de mediana o alta complejidad,  con un numero importante de conexiones cableadas entre los bloques de programación, el programa se desconfigura en su ambiente gráfico  y se hace difícil realizar ajustes y correcciones. Incluso, cuando esto ocurre en ocasiones se daña la integridad del programa, con la consecuente  perdida de tiempo y trabajo para el usuario.

Otra limitante importante  es la ausencia de un  debbugger"  o  herramientas de depuración que ayuden a poner los programas a punto.

Todo lo anterior, me llevo a buscar otras opciones de programación para el NXT.  En esta búsqueda encontré que existen muchos desarrollos de terceros que soportan la programación del NXT.  Esto gracias al hecho que el  Mindstorms NXT es una plataforma completamente abierta.

A continuación se presentan algunas de las plataformas de programación desarrolladas por terceros mas comunes o importantes encontradas en la web:


ROBOT C

Es una plataforma de programación de diferentes aplicaciones para la enseñanza de Robotica basada en en lenguaje de programación C.  RobotC soporta no solo  programación para Lego Mindstorms NXT, sino también para otras aplicaciones de robotica como Arduino,  VEX,  y Tetrix, entre otras.

Funciona en ambiente Windows,  y  ofrece un editor de texto y/o interface visual para el usuario bastante cómoda   con un conjunto de herramientas para depuración de programas  en tiempo real. Adicionalmente, ofrece una amplia documentación y completos tutoriales en linea para aprender a configurar programas. Adicionalmente trae un listado bastante completo de ejemplos de programas los cuales cubren prácticamente todos los tópicos básicos de programación  e incluso tópicos mas avanzados como comunicación bluetooth, datalogging, y uso de joysticks.

Esta opción no es gratuita. Tiene un costo que va de 50 a 100 USD por licencia, dependiendo del tipo de licencia que se tome (Un año, perpetua, o  perpetua en  CD Rom)

También ofrece una versión de prueba  completamente funcional de 30 días.

Un punto importante a tener en cuenta es que este software trae su propio firmware, por lo tanto lo primero que hay que hacer para poder usarla es actualizar el firmware del NXT, reemplazando el firmware original de Lego.  Esto es algo bastante simple,  y no hay que preocuparse por esto. En la pagina de RobotC esta las instrucciones clara para realizar esta operación.

Un punto en contra  es que el uso de tareas simultáneas o "multitasking" requiere especial atención  y precisión en la manera de hacerlo, de lo contrario puede tener resultados inesperados.

En el siguiente link se encuentra la pagina oficial de RobotC:  http://www.robotc.net



NXC

El nombre de este lenguaje proviene de  "Not eXactly C".  Es un lenguaje también de alto nivel, parecido al C.  Es una variante de otro lenguaje denominado  NQC (Not Quit C) pero adaptado para programar el Lego Mindstorms NXT.  Los programas escritos en  NXC usan el compilador de NBC  (Net Byte Codes), el cual es otro lenguaje simple con sintaxis de assembleer o lenguaje ensamblador que también puede ser usado para programar el NXT.

Guía de referencia del NXC
Guía del compilador  NBC Guide
Ayuda adicional para esta plataforma se encuentra en  HTML help  y  API help

El NXC funciona con el firmware original de Lego Mindstroms. Sin embargo para aplicaciones mas avanzadas  se puede descargar un firmware mejorado acá: NBC/NXC firmware

Este lenguaje esta disponible para usuarios  Windows y para Linux.

Hay mas información para  NXC en este link.


El NXC también ofrece un "debugger" o depurador  en tiempo de ejecución el cual facilita el control de errores de forma sencilla.
También es posible encontrar muy buenos ejemplos disponibles en la red,  pues es un lenguaje de muy buena aceptación, especialmente en usuarios mas avanzados y que vienen de experiencias de programación en C. 

Algunas limitantes encontradas para este software son: 
- No permite la comunicación bluetooth con otros dispositivos que no sean NXT o PC.
- Solo permite operaciones con enteros


LEJOS :

Implementación en java para NXJ. Basado en el estándar java con una librería de clases mas pequeña. Los programas se compilan en el pc y se cargan en el robot. Dispone de múltiples librerías para el desarrollo de comportamientos, así como funciones de localización y navegación.

Es una plataforma de programación orientada a objetos.  Permite la ejecución de operaciones en coma flotante.   Esta bien documentada y existen múltiples ejemplos.

Para usar esta plataforma es necesario cambiar el firmware original. 


ROBOLAB : 

Entorno diseñado por la Tufts university para RCX ( la primera generación de ‘bricks’ de lego) y preparado para soportar NXT. No es tan intuitivo como NXT-G. Escrito usando LABview de NI. Permite mayor complejidad desarrollando aplicaciones

Hay muchas otras plataformas de programación adicionales en las cuales no se mencionan aquí en detalle,  algunas son:

En  este link se encuentra una completa tabla comparativa de las diferentes opciones disponibles para programación del NXT


CONCLUSION 

La elección del lenguaje a utilizar  depende de varios aspectos entre los que se encuentran  básicamente la experiencia previa en programación, la disponibilidad de recursos y  hasta temas económicos, pues algunas plataformas son licenciadas y otras son abiertas.

En este ultimo punto  es incluso importante hacer notar  que en la misma plataforma original de Lego encontramos el NXT-G  versión retail, que hoy se puede descargar de la pagina de Lego y  la NXT-G versión educativa, que trae bloques de programación adicionales  y un potente modulo para datalogging, pero tiene un costo de 80 USD.

El software original NXT-G es muy adecuado para adquirir los conocimientos iniciales en programación, manejo de sensores, motores, programación de comportamientos específicos del robot tales como moverse adelante, girar, devolverse, detectar estados de los sensores, etc.  No obstante a medida que se avanza, la búsqueda de una opción adicional de programación se hace evidente.

RobotC puede tener mejor desempeño de procesamiento y ser mas completo en herramientas para depuración que NXC, no obstante a diferencia de NXC, que es libre,  RobotC es una aplicación licenciada.

En mi caso particular,  que no soy un usuario muy experimentado,  yo opte por ensayar el trial de 30 días de RobotC, y encontré muy buenas razones  para pagar los 80 USD de la licencia perpetua:
- Ambiente de desarrollo muy cómodo
- Potente depurador de errores.
- Larga lista de ejemplos de muestra.
- Tutorial muy completo, en ingles, pero muy fácil de entender y didactico.
- Buen respaldo.