El robot Lego NXT ya funciona en ROS

ROS <http://www.ros.org/wiki/> es posiblemente la plataforma de desarrollo de arquitecturas software robóticas mas potente de la actualidad y con mayor proyección a medio y largo plazo. Una de sus principales filosofías es integrar el mayor número de tecnologías populares(tanto HW como SW) ya desarrolladas. Siguiendo esta filosofía los chicos de ROS han sacado un paquete para el uso del robot “Lego NXT”. <http://www.ros.org/wiki/nxt>  Está basado en el software Python-NXT e implementa los sensores/actuadores: motor, bumper, ultra-sonido, sensor de color, giróscopo y acelerómetro (todos ¿no?)

Bien ¿Que ventaja nos trae ROS para programar con el NXT que no  tuviéramos de antemano con el software de fábrica?

– Muchas, La principal ventaja es que puedes reutilizar mucho software hecho para ROS y que ya funcionan para otros robots móviles. Por ejemplo: hay un paquete (robot_pose_ekf <http://www.ros.org/wiki/robot_pose_ekf> – Filtro de Kalman Extendido) que es capaz de integrar y fusionar la información que proviene de múltiples sensores: la odometría de los motores, un sonar y un giróscopo. De este modo, la posición en el plano del robot es mucho mas fiable que la que se podría conseguir con la típica técnica de ir integrando los ticks de la odometría (ya que a medida que el robot se mueve van acumulando error en la posición, debido a micro-deslizamientos de las ruedas).

Esta técnica permite navegar por edificios e ir construyendo mapas mientras que el robot se autolocaliza (SLAM) de una forma mucho mas precisa y que antes hubiera costado semanas de trabajo e investigación. También teóricamente se pueden utilizar otros muchos paquetes mas (como los relacionados con auto-localización en un mapa y construcción de mapas). Otra ventaja es que puedes utilizar un visualizador genérico (rviz) de robots de forma que nos muestre qué está viendo el robot en cada instante en un entorno virtual 3D (creo que esto no lo tenía el software estándar del NTX). En fin… canela fina🙂

Os recomiendo que echéis un vistazo al vídeo aquellos que el NXT os sea familiar:

Como desventaja comentar que ROS tiene una curva de aprendizaje algo mas dura respecto a la que pueda tener utilizar la API de c# o Java para Lego, además se necesita algo de soltura en sistemas unix, preferiblemente ubuntu-linux, python y/o C. (Aunque presumiblemente ROS funciona también con JAVA,LISP, MATLAB, URBI, LUA, etc. no se, habrá que investigar)

6 Responses to El robot Lego NXT ya funciona en ROS

  1. cerberillo dice:

    Pablo:

    Es muy interesante esta noticia para todo aquel que quiera sacarle el máximo partido al lego NXT. Es sacarle sobre todo un nivel mayor a algo que está pensado para niños, pero que, como se puede ver también lo podemos usar los mayores para prácticas de robótica.

    Sin embargo tengo un problema con este tipo de cosas, y es que el lego NXT es lo que es y sirve para lo que sirve. Creo que no se podría entender como un sistema robótico “full” sino más bien un sistema de “iniciación”. El Lego NXT tiene muchas limitaciones físicas y mecánicas más que de software, porque ya puestos, podriamos hacer una interfaz de comandos en F# (y de hecho podríamos), jajaja, pero lo veo un poco matar moscas a cañonazos, ya que el lego, hasta que no abra su funcionalidad electrónica no creo que se pueda usar nada más que para iniciarse (aunque sirve muy muy bien para implementar código de prueba para robots).

    Felicitaciones por tu blog, sigue así😉

    • geus dice:

      Ciertamente David, el NXT no es precisamente el Big Dog de DARPA🙂. Sin embargo creo que es una plataforma excepcional para ir encontrándote problemas y aprender como solucionarlos. Creo que es interesante también estar limitados por el hardware porque esto hace crecer las técnicas matemáticas y software para solucionar poblemas “con lo poco que tenemos con este HW”. Ahí está el ejemplo del filtro de kalman. Como dices, es un sistema un poco cerrado, pero ahí ves como los de ROS con todo el procesamiento hecho en un PC y dejando al brick de Lego como un mero puente de comandos.

      Por cierto David, tu que das clases de robótica ¿Por qué no te apuntas a la lista de correo del club de robótica de .net-sevilla y nos ayudas, das tus opiniones y experiencia de vez en cuando?🙂. Besitos.

      • cerberillo dice:

        Pablo:

        El problema de estar tan limitado y tener que comerte la cabeza para solucionarlo todo via software, es que por un lado estás obligado constantemente a reinventar la rueda (ya que en sistemas mayores esas cosas están requetevistas), y por otro lado, no es tanto el que el sistema sea cerrado como que el sistema físico del lego es una M…

        Podríamos hablar de fallos en los servos, en los sensores, poca exactitud de las medidas (para un sistema serio, claro está) y sobre todo, que las construcciones que puedes hacer con lego son de todo menos sólidas.

        En sí el sistema de construcción del robot me parece una basura, ya que la construcción “lego” con 10 millones de piezas inservibles y 3 que vas a usar siempre no me gusta y me parece que te limita demasiado. Ese aspecto, sinceramente no lo veo nada cuidado🙂.

        PD: Venga, me voy a apuntar

        Un saludete

  2. Hola a tod@s, muy bueno el post.

    La semana pasada empece a probarlo. Yo con NXT trabajo con la plataforma Java LeJOS y el proyecto ROS lo conocia por otras plataformas como Pioneer, pero la verdad es que me parece una muy buena forma de saltar de NXT, como plataforma de iniciacion a otros sistemas.

    No se si habeis hecho el tutorial o simplemente os habeis hecho eco de la noticia.

    Con ROS aunque solo dan soporte para C++ o Python, se puede programar con Java y acceder a los objetos de los otros lenguajes. En mi caso me siento mas comodo con Java.

    Un abrazo

    • ¿Hay alguna forma de seguir tu blog por RSS?

    • geus dice:

      Hola Juan Antonio, me alegra que te haya gustado y gracias por el comentario.

      Sip, he hecho los tutoriales de ROS, en general y en el departamento utilizamos varios paquetes de ROS para los robots que usamos. En concreto nosotros trabajamos con el robot Erratic y algunos brazos robóticos que aún no tienen drivers para ROS (pero estamos trabajando nosotros en hacerlos)

      Respecto a los tutoriales del NXT no los he hecho, es eco de la noticia. En cualquier caso era una noticia interesante para difundir ya que es una buena forma de empezar con ROS y crear comunidad.
      🙂 ¿Java? Sip, está soportado, pero mi sensación es que es un lenguaje secundario en ROS, además se trata de un wrapper sobre roslib para C. Otro problema es que tienes que ir regenerando los ficheros .java para tener acceso a los mensajes de cada paquete. Por ejemplo nav_msgs/OcupancyGrid. Mirando los directorios de ros para este mensaje, veo los includes de c++, pero no los .java de java. A Python por otra parte no les hace falta porque es dinámico.
      Ahora ignoro como se solucionaría pero espero si hay que ir cambiando los CMakeList.txt para ir añadiendo el generador de Java me parece un gran punto en contra.

      ¡Respecto a seguir el blog! ¡claro! el blog tiene rss: https://geus.wordpress.com/feed/ aunque si lo que te interesa es el tema de robótica mejor subscribete a: https://geus.wordpress.com/category/tecnicos-y-cientificos/robotica/feed/

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: