Download Alternativas de programación del NXT con Software Libre

Document related concepts
no text concepts found
Transcript
Alternativas de programación del NXT con Software Libre
Escrito por José R Sosa
Domingo, 25 de Agosto de 2013 14:47 - Actualizado Lunes, 20 de Enero de 2014 01:26
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.
Características de NXT
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. Nuestro
Lego 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
1/7
Alternativas de programación del NXT con Software Libre
Escrito por José R Sosa
Domingo, 25 de Agosto de 2013 14:47 - Actualizado Lunes, 20 de Enero de 2014 01:26
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
- Anaranjado: On/Ente
- Flechas gris claro: moving left and right in the NXT menu
- Boton gris oscuro: Clear/Go back
- Alimentación de corriente por 6 baterías AA o una bateria recargable DC NXT
- Periféricos sensores:
- Sensor de Color (9694), para detectar 6 diferentes colores: azul, verde, rojo, amarillo,
blanco, negro. Viene incluido con la nueva versión.
- Sensor de Luz (9844), para detectar niveles de luz. (incluido en la primera versión, pero
reemplazada por el sensor de color en la 2.0.
- Sensor de Tacto (9843), consiste en un simple botón que detecta si algo lo toca.
- Sensor de Ultrasonido (9846), para medir distancias usando hondas inaudibles de sonido.
- Sensor de Sonido (9845), para basicamente "escuchar": capaz de medir volumen pero
no graba los sonidos.
- Sensor de Compas (MS1034), para la deteccion de la dirección. ha sido contruido con un
2/7
Alternativas de programación del NXT con Software Libre
Escrito por José R Sosa
Domingo, 25 de Agosto de 2013 14:47 - Actualizado Lunes, 20 de Enero de 2014 01:26
calibrador que reduce la interferencia producida por otros objetos magnéticos (No viene
incluido en el kit básico).
- Sensor Acelerómetro (MS1040), para detectar en que direcció se mueve. también puede
medir la fuerza G, es decir, la de gravedad (No viene incluido en el Kit básico).
- Sensor RF-ID, para comunicaciones entre multiples robots (No viene incluido en el kit
básico).
- Sensor de Rotación (incluido dentro de los servo-motores), para medir la velocidad y
angulo de giro. El cálculo se realiza en base a los dientes de los engranages internos.
- Periféricos actuadores:
- Servo Motor (9842).
- El Sensor de Color puede emitir una luz que utiliza como lampara para sensar su reflejo.
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 procesameinto, 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.
Programación del NXT
3/7
Alternativas de programación del NXT con Software Libre
Escrito por José R Sosa
Domingo, 25 de Agosto de 2013 14:47 - Actualizado Lunes, 20 de Enero de 2014 01:26
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.
Opciones libres para la programación del NXT
Gracias al espíritu científico con el que fue conceptualzado 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
4/7
Alternativas de programación del NXT con Software Libre
Escrito por José R Sosa
Domingo, 25 de Agosto de 2013 14:47 - Actualizado Lunes, 20 de Enero de 2014 01:26
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. Tasta ahora es podido hacrlo 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 codigo 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 lenguales de
programacion 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 codigo Python en codigo 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 libreria 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 libreria 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 comunicacion con el NXT tanto por via USB como por Bluetooth. Soporta comandos
directos y una gran varieadad 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
5/7
Alternativas de programación del NXT con Software Libre
Escrito por José R Sosa
Domingo, 25 de Agosto de 2013 14:47 - Actualizado Lunes, 20 de Enero de 2014 01:26
Otros lenguajes privativos para el NXT
-
Robotics Studio by Microsoft.
- Robolab. - RoboMind . - RobotC . - MATLAB y Simulink .
Conclusiones:
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 ports anteriores muestro como controlar un carro robot con python , y desde una
"canaimita"
este es uno de los videos:
6/7
Alternativas de programación del NXT con Software Libre
Escrito por José R Sosa
Domingo, 25 de Agosto de 2013 14:47 - Actualizado Lunes, 20 de Enero de 2014 01:26
{youtube}NJB58nQxAxk{/youtube}
Algunos enlaces y fuentes relacionadas:
http://blog.electricbricks.com/es/2009/09/lenguajes-programacion-nxt/
http://www.teamhassenplug.org/NXT/NXTSoftware.html
http://mindstorms.lego.com/en-us/default.aspx
http://ro-botica.com/mindstorms_sys.asp
http://www.philohome.com/nxt.htm
http://es.wikipedia.org/wiki/Lego_Mindstorms
http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT
http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT_2.0
7/7