marzo 31, 2009 10:49 P.M.

Dando soporte a Ubuntu para comunicarse por USB (NXT) / TorreUSB IR (RIS 2.0), Mindstorm Lego


Imagen del Dia
Retomando los proyectos sobre robótica, usando el Mindstorm de Lego (Sitio Oficial ), se necesita una manera para poder comunicarse con los bloques desde la PC, y en mi caso dede Linux.

En mi máquina (La TX1000, que está enferma aún :(), se podia conectarse por bluetooth, en esta nueva no dispongo de un bluetooth, por lo que no queda otra que hacerlo cableado, por USB para el NXT, la nueva versión del RIS y mediante la torre usb por IR ( Infrarojo ) en el RIS 2.0.

Me he basado en un procedimiento hecho por Trevor Creech, pero he hecho algunas modificaciones :), vamos a configurar nuestra torre para poder comunicarnos con el bloque.

Configurando la Torre de Comunicaciones IR en Ubuntu





Nota: Asumiremos realizar el trabajo siendo root en tu sistema.


0. Este procedimiento, lo he realizado en Ubuntu 8.10.

1. Conecta a tu maquina la torre a un USB libre.

2. mkdir /dev/usb ( Nota: En mi caso no necesite crear el directorio, ya existia :) ).
3. ln -s /dev/usb/legousbtower0 /dev/usb/lego0 (Nota: en mi caso tuve que eliminar /dev/usb/usb0, ya que existia y era un directorio.)

4. chmod 666 /dev/usb/lego0.

5. echo test > /dev/usb/lego0 ( Nota: observa la luz verde que parpadea en la Torre IR, si es así, todo esta correcto. :).

6. Descarga la última version de los fuentes de NQC, desde el sitio oficial. (Nota: En mi caso, descarge la Version NQC 3.1r6 ).

7. Lo descargas en un directorio de tu preferencia, para rapida referencia, en mi caso /home/coolsnow/Documentos/lego/nqc, y lo descomprimo dentro. (tar -xvzf nqc-*).

8. Edito el archivo Makefile:

8.1 Elimino el soporte de USB para la torre, busco la linea siguiente,

USBOBJ = rcxlib/RCX_USBTowerPipe_linux.o

8.2 Dado que la torre es USB, cambiaré el puerto por defecto, para que apunte al USB :D, buscando la variable DEFAULT_SERIAL_NAME y asignarle el usb, así:
DEFAULT_SERIAL_NAME = "/dev/usb/lego0" ( Nota: es el puerto que acabamos de configurar :) ).

9. mkdir rcxlib/LegoUSB/

10. cd rcxlib/LegoUSB/

11. wget http://legousb.cvs.sourceforge.net/*checkout*/legousb/LegoUSB/drivers/linux/include/legousbtower.h

12 cd ../../ (estamos en la carpeta de nqc :D )

13. make

14. make install

15. export RCX_PORT=usb ( Nota: lo puedes agregar en tu .bashrc, para que no tengas que exporta cada vez que lo necesites. )


16. intenta haciendo esta prueba: nqc -msg 7 (enviar un mensaje por el puerto IR :D ), revisa las luces verdes, en donde esta recibiendo los datos. :)

17. Si lo del punto anterior te funciona, entonces ya pudes usar el NQC en tu bloque :D y tu maquina. Ahora solo hay que instalar el firmware del RIS en el bloque, inserta el CD del Robotic Invention System, y ejecuta el siguiente comando: nqc -firmware /media/cdrom/firm/firm0309.lgo

18. Descarga ahora tus programas, ejemplo el slot 1, nqc -d programa.nqc.

Si todo ha salido correctamente, ya tienes lo necesario para programar en NQC, para darle vida a tu bloque.

Configurando la Comunicacion por cable USB con el NXT





Ahora vamos a configurar lo necesario para poder hablarle al NXT, el bloque dispone de coneccion Bluetooth, pero en mi máquina actual no dispongo de dicha maravilla, por lo que lo haremos mediante el cable suminstrado por el kit. Un cable USB.

EL NTX, podes ver sus caractéristicas desde su sitio principal
, lo que haremos es usar un software para poder comunicarnos con el bloque, veamos:

Buscando en el tio Google, damos con esta completa guia de como poder programar el Lego Mindstorm NXT desde GNU/Linux, Ubuntu en mi caso.

Descargamos el programa t2nm de Pascal Raymond, y lo instalamos:

#tar -xvzf t2n-0.2.tgz

#mv mv t2n-0.2/t2n /usr/bin/

#mv t2n-0.2/udev/70-lego.rules /etc/udev/rules.d/

Ahora conectamos el bloque a la computadora desde el USB, esperamos que en la pantalla lcd aparezca la palabra USB.

Al estar conectada la unidad, podemos revisar el equipo usb conectado, usando lsusb:

#lsusb
...
Bus 001 Device 005: ID 0694:0002 Lego Group


Para obtener datos del bloque podemos ejecutar:

coolsnow@nabuconosor:~/Documentos/lego$ t2n -i
#### NXT INFOS ###############
protocol version=1.124 firmware version=1.1
NXT Name: NXT1
Blutooth address: xx:xx:xx:xx:xx:xx ( por seguridad, no compartire mi mac address del bluetooth del bloque :D
Blutooth signal: 0 (esta apagado el bluetooth :D )
Free user flash: 54576


Esto nos indica que nos estamos comunicando con el bloque desde Linux :D. Si desearamos enviar algun programa al bloque, hariamos:

# t2n -put programa1.rxe

Para ejecutarlosólo debemos navegar por la pantalla de nuestro NXT para ejecutar nuestro programa, que estará en My Files -> Software files -> programa1

La ayuda de la aplicación para más detalles:

coolsnow@nabuconosor:~/Documentos/lego$ t2n -help
t2n version 0.2
usage: t2n [options] | t2n -help
recognized options:
-b : check battery level
-i : print nxt info
-ls : list files
-put : upload file
-get : download file
-v : set verbose mode
-vv : even more verbose
-vvv : gossip
-help : print help and return
-version : print version and return

Como revisión general, vemos los dispositivos USB conectados en nuestro equipo:


#lsusb
...
Bus 001 Device 005: ID 0694:0002 Lego Group
Bus 001 Device 003: ID 0694:0001 Lego Group Mindstorms Tower

Con esto dejamos nuestros bloques reconocidos y listos para la etapa de desarrollo y creación de "robots", para el aprendizaje y exploracón de los RIS (Robotic Invetion System) de Lego.

Felices Hacking!!.

Escrito por: CoolSnow | Permalink | Categories: Robotica & Electrónica

enero 19, 2007 12:16

Programando el RXC con C# en .Net


Imagen del Dia
Investigando sobre .Net, especialmente C# y Lego RCX 2.0 para poder continuar con los avances en mis robotcitos :D, me encontré una referencia a un proyecto que lo veo más que interesante muy cool :d, se llama RCX.NET,lo podes encontrar acá.

Según su pagina, indica que podes pasar tu código .Net a tu RCX, o en tu lenguaje de preferencia, eso esta muy bonito :P y muy potencial, ya que no dependes del lenguaje gráfico de bloques de tu RCX 2.0 o de NQC, este último me gusta más por la facilidad que tienes y un poco más de libertad, para controlar tu bloque.

Ahora me pregunto, se podrá hacer que corran tus aplicaciones mono :D, habrá que investigar mientras probaré la plataforma y luego me desido.

Desde la pagina del proyecto vemos las caracteristicas :D

Features

* Built on top of the Lego Mindstorms SDK 2
* Similar programming interface to Spirit.ocx
* Can be used from client (Windows forms) and server (Web forms, Web Services, etc.) applications
* Fully supports any RCX version (1.0,1.5 and 2)
* Serial and USB tower supported
* Fully documented programming interface (using Visual Studio.NET Intellisense)
* .NET Exceptions based error reporting
* Get status info from the tower and the RCX, control motor and poll sensor values


A que no se ve muy interesante.

Por otro lado, también Microsoft esta dando soporte para poder programar tus bloques con .NET Coding4Fun desde tu Visual.Net, Aunque el principal soporte esta para el NXT, la Nueva versión del bloque, aunque si soporta las versiones anteriores.

Por lo tanto, Felices Hackings !!

Yo

Escrito por: CoolSnow | Permalink | Categories: Robotica & Electrónica

abril 08, 2005 2:53

Un buen inicio en esta rama del saber e investigación


Imagen del Dia


El año pasado, para un curso, Inteligencia Artificial, me pude comprar un kit de robótica, para dos cosas:


  • Jugar con el :)
  • Aprender y presentar un proyecto de robótica en el curso, además de jugar con el :), jejej eme parece haberlo dicho :)


    El kit en cuestión es el RIS 2.0, Robotic Invention Kits de Lego. El cual es un bloque programable , un par de servo motores, dos sensores de tacto y un sensor de luz, además de 718 piezas Lego, entre las cuales tenemos:eEngranes, poleas, ejes de trasmisión, llantas, vigas, conectores, cables para construir un grupo de robos elementales.


    Este RIS, es una mezcla de arcilla para modelar robots con los bloques legos, además de la operatividad y cerebro necesario para que la vida surja de tu careción, :). Los alcances de los proyectos no tienen fin y esta limitado por la cantidad de bloques para armar, así como de cerebros, para controlarlos.


    Este es una foto de las piezas que trae el equipo:





    El cerebro de la criatura, el RCX


    Consta de un microcontrolador Hitachi H8 (H8/3292) de 16 MHz (5 V), con 16 K de ROM y 512 byte de RAM internas, 2 temporizadores de 8 bit y 1 de 16 bit, conversor A/D de 8 bit, y con 32 K de RAM externa.


    Todo ese poder es usado para controlar:

  • 3 actuadores: servo motores de 9 V.
  • 3 sensores: contacto, luz, temperatura, rotación, dependiendo del kit o adicionales
  • 1 puerto serie de comunicaciones vía infrarrojos, para el RIS 2.0, serial para los inferiores.

    El Bloque




    La ROM de 16 K contiene el driver que se ejecuta cuando se alimenta por primera vez el RCX. Este driver on-chip se amplía­a descargando otros 16 K de firmware al RCX. Tanto el driver como el firmware aceptan y ejecutan instrucciones del PC mediante el puerto de comunicaciones IR o serial, según sea el modelo, para el RCX 2.0 es por infrarrojo. Adicionalmente, se pueden descargar programas de usuario al RCX como código de bytes que se almacena en una región de 6 K de memoria. El firmware se encarga de interpretar y ejecutar las instrucciones de dicho código.


    El diseño del RCX esta inspirado en la tecnología del "ladrillo" programable del MIT (Massachusets Institute of Technology), aunque ambos dispositivos tienen diferentes CPUs y cuentan con sistemas software enteramente diferentes.


    Bloque Programable del MIT









    Especificaciones (como Motor):

  • 350 rpm @ 9 V, en vacío
  • 5 mA en vacío
  • 350 mA
  • 1 V arranca el giro en vacío

    Especificaciones (como Generador):

  • Máx. rpm ~350
  • 9 V de salida @ 350 rpm
  • ~350 mA @ 350 rpm

    Precauciones

  • Nunca exceder 9V

    Sensores

    El RCX controla simultáneamente tres puertos de entrada para conexión de sensores. Estos pueden ser de:


  • contacto
  • luz
  • temperatura
  • rotación
  • presencia

    El voltaje en la entrada es convertido a un valor RAW interno en el intervalo 0 (0V) a 1023 (5V). Dependiendo del tipo de sensor, el número RAW es convertido al número que se observa por programa o mediante boton View del bloque:


    Sensor de contacto: si el valor RAW es menor de 450 se interpreta como 1 y si es mayor que 565 resulta un 0.


    Sensor de temperatura: lee temperatura en el intervalo (-20, +70) ºC: T=(785-RAW)/8.


    Sensor de luz: el sensor de luz reflejada lee intensidad luminosa desde 0.6 lux hasta 760 lux. El RCX lo interpreta como porcentaje: luz=146-RAW/7 en el intervalo (0,100)


    Sensor de rotación: lee 16 posiciones por rotación. La resolución es 500 rpm Máx. Está calibrado para que el RCX lea en grados o 16-avos de rotación.


    Sensores de presencia: están hechos con un Opto-Switch que contiene una fuente IR y un fototransistor separados por una ranura de 0.15 pulgadas. Cuando se inserta un objeto en la ranura, la luz no alcanza al fototransistor, que se pone en corte. Cuando el objeto se retira, el fototransistor conduce de nuevo.




    Programación


    Una vez que ya tienes tu creacion, y tienes esbosada la funcionalidad que tendra y las actitudes de tu robots, osea la programación de su cerebrito :d, exiten varias maneras de darle funcionalidad, podes usar el software que trae el RIS, o usar varios lenguejes en la red para ello, yo en lo personal me identifico mucho con el NQC, un lengueje muy similar al C :), por que sera que me gusta :D, ademas del entorno que trae el RIS, el cual es grráfico, veamos.


    El lenguaje de programación del RIS de LEGO se denomina código RCX. Es un lenguaje imperativo gráfico cuya secuencia de ordenes se construye a modo de piezas de rompecabezas que se apilan consecutivamente. Un ejemplo se puede observar en la siguiente figura.


    En este programa, denominado Program4.rcx, se ordena lo siguiente:

  • activar los dos motores (conectados a los puertos A y C)
  • repetir 5 veces el siguiente bloque de ordenes:
  • cambiar el sentido de giro (marcha atrás)
  • esperar 3 s. (3 s. marcha atrás)
  • cambiar el sentido de giro del motor A (con lo cual se realiza un giro)
  • esperar 3s. (3s. girando)
  • cambiar el sentido de giro del motor A (con lo que se recupera la marcha habitual)
  • apagar los motores.

    Como se observa, es un lenguaje realmente intuitivo y rápido de aprender.

    Aunque la sintaxis de los bloques está en inglés (lo mismo que sucede en los lenguajes textuales como C, VB), la ayuda on-line está en español.

    Espero que hayan entendido un poco el mundo de la robotica, y la funcionalidad del RIS, por el momento es todo, pero pronto, mostrare más ideas, y proyectos relacionados con el "Robotcito" a como le bautizo mi hijo :d.

    Edgardo

    Una foto muy similar a Robotcito :D




    Links

  • Páinas de LEGO: http://www.lego.com/, http://www.legomindstorms.com/
  • MindStorms en la educación: http://www.viztel.com/mie/
  • ROBOLAB (LEGO MidStorms sets for schools): http://www.lego.com/dacta/robolab/home.asp
  • Hardware LEGO (recambios): http://www.lego.com/dacta/hardware/default.asp
  • Página de enlaces para robots LEGO: http://www.cs.uu.nl/people/markov/lego/index.html
  • Compilador muy similar al del lenguaje C, denominado NQC (Not Quite C).: http://www.enteract.com/~dbaum/nqc/index.html
  • Sistema operativo para el bloque: LegOS (en plataformas Windows y Linux): http://www.noga.de/legOS/, http://legos.sourceforge.net/
  • Programació bajo Unix: http://lucas.hispalinux.es/Presentaciones/200002hispalinux/conf-16/16-html/hispalinux2000.html
  • Comunidad Lego Mindstorm: http://mindstorms.lego.com/eng/community/default.asp
  • Tutoriales: http://mindstorms.lego.com/eng/community/tutorials
  • Lego para las Escuelas: http://www.lego.com/eng/education/mindstorms/default.asp

  • Escrito por: | Permalink | Categories: Robotica & Electrónica