ROS Robot Operating System NXT

ROS Robot Operating System NXTEl proyecto ROS (Robot Operating System) nace con la intención que dotar a los desarrolladores de software de librerías y herramientas específicas para crear aplicaciones de robótica. Una de sus principales ventajas es que nos permite abstraernos del hardware específico, dándonos además acceso a drivers para los diferentes dispositivos, librerías, visualizadores, gestión de mensajes y paquetes de datos y mucho más.

ROS Robot Operating System NXT

Esta potente herramienta de desarrollo de código libre (o abierto) ha llegado a nuestro NXT. La integración de ROS con el NXT se ha llevado a cabo en colaboración con el proyecto NXT-Python, y los resultados son impresionantes, como se puede apreciar en el siguiente vídeo.

Para todos aquellos que queráis dar un paso más con vuestro NXT, a continuación podréis encontrar una guía paso a paso sobre cómo instalarlo y hacerlo funcionar.

Aviso a navegantes, toda la instalación, configuración y pruebas de esta guía se han realizado en Ubuntu, en concreto en su versión 10.4 (Lucid Lynx).

1. Configuración del ordenador.

Añadimos el grupo

sudo groupadd lego

Añadimos el usuario al grupo creado

sudo usermod -a -G lego {username}

Creamos una reglas para poder usar el USB sin problemas


echo "BUS=="usb", ATTRS{idVendor}=="0694", GROUP="lego", MODE="0660"" > /tmp/70-lego.rules && sudo mv /tmp/70-lego.rules /etc/udev/rules.d/70-lego.rules

Reiniciamos udev


sudo restart udev

Finalmente cerramos la sesión de usuario y la volvemos a abrir.

Nota: Los que hayáis seguido previamente nuestro tutorial de instalación LeJOS en Linux, en principio, podéis omitir este paso porque ya está hecho.

2. Instalación de ROS.

2.1 Añadir repositorios

Tendremos que asegurarnos primero de que nuestro Ubuntu acepta repositorios “restricted”, “Universe” y “Multiverse”.

ROS Robot Operating System NXT: SoftwareSources


ROS Robot Operating System NXT: SoftwareSources (1)
Una vez hecho esto, desde la terminal, añadimos los repositorios de ROS, dependiendo de vuestra versión de Ubuntu:

Ubuntu 9.04 (Jaunty)

sudo sh -c 'echo "deb http://code.ros.org/packages/ros/ubuntu jaunty main" > /etc/apt/sources.list.d/ros-latest.list'

Ubuntu 9.10 (Karmic)

sudo sh -c 'echo "deb http://code.ros.org/packages/ros/ubuntu karmic main" > /etc/apt/sources.list.d/ros-latest.list'

Ubuntu 10.04 (Lucid)

sudo sh -c 'echo "deb http://code.ros.org/packages/ros/ubuntu lucid main" > /etc/apt/sources.list.d/ros-latest.list'

Ubuntu 10.10 (Maverick)

sudo sh -c 'echo "deb http://code.ros.org/packages/ros/ubuntu maverick main" > /etc/apt/sources.list.d/ros-latest.list'

2.2 Configuración de las claves (Keys)


wget http://code.ros.org/packages/ros.key -O - | sudo apt-key add -

2.3 Instalación

Actualizamos el gestor de paquetes


sudo apt-get update

Instalamos el paquete ROS Base, que nos dará el conjunto completo de herramientas para robótica, que incluye software de navegación, visualización, …

NOTA: Tendremos que ser pacientes, pues el paquete que descargaremos es bastante grande (unos 2Gb)


sudo apt-get install ros-cturtle-base

2.4 Configuración de variables de entorno


echo "source /opt/ros/cturtle/setup.bash" >> ~/.bashrc
. ~/.bashrc

3. Instalación de NXT-ROS

Para instalar NXT-ROS necesitaremos descargar primero las siguientes herramientas:


sudo apt-get install python-setuptools
sudo easy_install -U rosinstall
sudo apt-get install mercurial

Ahora vamos a descargar y generar los enlaces de NXT-ROS


rosinstall ~/nxtros /opt/ros/cturtle "http://www.ros.org/wiki/nxt/Installation?action=AttachFile&do=get&target=nxt-0.1.0.rosinstall"
. ~/nxtros/setup.sh
rosmake nxt nxt_apps nxt_robots --rosdep-install

Cada vez que abramos una nueva terminal y tengamos que hacer uso del NXT-ROS, tendremos que introducir en la consola lo siguiente:


. ~/nxtros/setup.sh

4. Probando la instalación.

IMPORTANTE: Para que NXT-ROS funcione con nuestro Mindstorms, necesitaremos tener el firmware 1.28 o superior. Si no sabéis cómo actualizar, podéis seguir el siguiente tutorial: Actualizando el Firmware del NXT

Vamos a comprobar antes que nada si nuestro NXT se conecta correctamente, para eso, vamos a realizar una prueba muy sencilla:

Conectamos un sensor de contacto al puerto 1 de nuestro NXT

En una terminal, tecleamos


. ~/nxtros/setup.sh
rosmake nxt_python
roscore

En otra terminal distinta


. ~/nxtros/setup.sh
rosrun nxt_python touch_sensor_test.py

Deberíamos estar viendo el estado actual de nuestro sensor, como se puede apreciar en la siguiente captura

ROS Robot Operating System NXT: Pantallazo-OK

Si obtenéis el siguiente mensaje al ejecutar el test


Traceback (most recent call last):
File "/u/mwise/external_repos/foote-ros-pkg/nxt/trunk/nxt_python/sensor_tests/touch_sensor_test.py", line 21, in {module}
sock = nxt.locator.find_one_brick()
File "/u/mwise/external_repos/foote-ros-pkg/nxt/trunk/nxt_python/src/nxt/locator.py", line 57, in find_one_brick
raise BrickNotFoundError
nxt.locator.BrickNotFoundError

ROS Robot Operating System NXT: Pantallazo-error

Significa que hay algún problema de conexión o configuración, por lo que deberéis comprobar que habéis seguido todos los pasos correctamente.

5. ¡Robot controlado desde el PC!.

Todo ha ido bien, ya tenemos ROS instalado en nuestro ordenador, vamos a realizar un pequeño experimento.

Para hacer una primera prueba, vamos a modificar uno de los archivos que nos hemos descargado, en concreto se trata del archivo “robot.yaml” que se encuentra en:

/home/NOMBRE_USUARIO/nxtros/nxt/nxt_robots/nxt_robot_sensor_car

Este archivo es el que nos indica qué tiene conectado el robot y a qué puerto/s. Para asegurarnos de no cargarnos nada, hacemos una copia de seguridad del archivo, y luego lo abrimos (por ejemplo con gedit).

Borramos su contenido y lo sustituimos por:


nxt_robot:
- type: motor
name: r_wheel_joint
port: PORT_A
desired_frequency: 16.0

– type: motor
name: l_wheel_joint
port: PORT_B
desired_frequency: 16.0

– type: ultrasonic
frame_id: ultrasonic_link
name: ultrasonic_sensor
port: PORT_4
spread_angle: 0.2
min_range: 0.01
max_range: 2.5
desired_frequency: 5.0

Y guardamos el archivo. Lo que hemos hecho es simplificarlo para que tenga sólo 2 motores, en los puertos A y B, y 1 sensor ultrasónico en el puerto 4.

Ahora tenemos que volver a generar el ejecutable desde la terminal, para que tenga el cuenta las modificaciones.


rosmake nxt_robot_sensor_car

Una vez hecho esto, podemos ejecutarlo con el siguiente comando

roslaunch nxt_robot_sensor_car robot.launch

Dejamos esta terminal funcionando y abrimos una nueva terminal, es aquí donde haremos funcionar el programa controlador.

Para utilizar el teclado utilizaremos:

roslaunch nxt_teleop teleop_keyboard.launch

Si por el contrario tenemos un joystick en el ordenador (aunque no es muy común hoy en día) y queremos usarlo para controlar el NXT, usaremos


roslaunch nxt_teleop teleop_joy.launch

Y tendremos esto en las terminales

ROS Robot Operating System NXT: Pantallazo-control

Os dejamos con un vídeo para que veáis cómo se comporta el NXT.

Segunda parte ya publicada. Exploramos la posibilidad de representación gráfica del NXT en la pantalla de nuestro ordenador, como se puede ver en el vídeo que abre el artículo.

ROS (Robot Operating System) & NXT (2/2)

Esperamos que os haya gustado, si tenéis alguna duda, podéis postearla en el foro.

7 thoughts on “ROS Robot Operating System NXT

  1. Parece interesante, habrá que probarlo.

    Gran artículo, a ver la segunda parte porque promete 😉

    • ¡Me alegro de que haya gustado!

      La interfaz gráfica para ver en la pantalla de nuestro ordenador cómo se comporta el NXT es una pasada, así que no te pierdas el siguiente artículo…

  2. Estoy de acuerdo con jsevisas que habrá que probarlo. Cada vez veo más cerca mi objetivo final: ¡no volver a poner una lavadora!!! (Y la dominación del mundo. Pero primero la lavadora.)

    Ya puestos, ¿se puede hacer lo mismo por bluetooth? Sería la monda…

    • De momento no se puede hacer por bluetooth, al menos si queremos ver el NXT en pantalla (como explicamos en el segundo artículo), ya que la transmisión de datos es muy lenta.

  3. good night
    excellent work very interesting I’m trying to make this application but this step I get an error cooperation could I explain in a clearer manner as do

    Now we are going to download and build links for NXT-Ros

    rosinstall ~/nxtros /opt/ros/cturtle “http://www.ros.org/wiki/nxt/Installation?action=AttachFile&do=get&target=nxt-0.1.0.rosinstall”
    . ~/nxtros/setup.sh
    rosmake nxt nxt_apps nxt_robots –rosdep-install

  4. buenas noches
    excelente trabajo muy interesante yo estoy intentando realizar esta aplicacion pero este paso me sale un error me prodrian explicar de una manera mas clara como realizarlo gracias

    descargar y generar los enlaces de NXT-ROS
    rosinstall ~/nxtros /opt/ros/cturtle “http://www.ros.org/wiki/nxt/Installation?action=AttachFile&do=get&target=nxt-0.1.0.rosinstall”
    . ~/nxtros/setup.sh
    rosmake nxt nxt_apps nxt_robots –rosdep-install