El 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”.
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
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
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
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.
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…
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.
El articulo esta muy bien aunque hay que actualizar el software, ahora ya es posible usar Diamondback.
http://www.ros.org/wiki/diamondback/Installation/Ubuntu
Un abrazo
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
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