ROS: Como instalar y utilizar un paquete de un repositorio federado

El proyecto ROS contiene cientos de paquetes software para el desarrollo de sistemar robóticos. Estos paquetes están organizados en repositorios de código. Los paquetes pertenecientes al core y  funciones básicas son administrados por Willow Garage y pueden ser instalados vía svn o vía  gestores de paquetes (http://www.ros.org/wiki/cturtle/Installation). Por otro lado, existe otro conjunto que son administrados y desarrollados de forma abierta por la comunidad ROS: organizaciones, instituciones o incluso ros-hobbilists.  Estos repositorios no son administrados por Willow Garage pero son considerados parte del proyecto ROS.

Habitualmente se hopsedan en forjas libres (google.code, sourceforge, github, etc.) o en servidores própios de la institución. En cualquier caso, todos son son abiertos y son referenciados en http://www.ros.org formando una federación de repositorios http://www.ros.org/wiki/Repositories y http://www.ros.org/browse/list.php.  Por eso nos referimos a ellos en este post como “repositorios federados”. En este post exponemos un how-to básico sobre como instalar paquetes pertenecientes a un repositorio federado y algunos aspectos interesantes que deben ser tenidos en cuenta.

Empezamos entonces. IHeartRobotics (http://www.iheartrobotics.com/) es un blog que forma parte de la comunidad ROS y sus miembros administran un repositorio federado: http://www.ros.org/wiki/iheart-ros-pkg . Este repositorio  tiene un paquete que nos interesa: rind (ROS Indicator) . Se trata de una interfaz gráfica básica para controlar los nodos, topics y parameters en ROS. Es una herramienta útil, especialmente para aquellos que estén empezando y se sientan mas incómodos manejando los comandos de consola de ROS. En la documentación de iheart-ros-pkg podemos encontrar la dirección del repositorio (git en este caso): git://github.com/IHeartRobotics/iheart-ros-pkg.git

Otra opción es ejecutar el comando roslocate para obtener la url del repositorio svn o git en internet:

geus@geus-vaio:/opt/ros/cturtle$ roslocate svn rind
git://github.com/IHeartRobotics/iheart-ros-pkg

Visitamos la forja en sí para echarle un vistazo: ver la organización de directorios, etc. (http://www.ros.org/wiki/iheart-ros-pkg). El primer aspecto que salta a la luz es que es un repositorio que utiliza la tecnología git y que tiene tres stacks (en octubre de 2010): ihr_demos, ihr_tools y rovio

¿Dónde ubicar el nuevo software?

El procedimiento habitual para descargar un paquete de un repositorio federado es /opt/ros/stacks.
NOTA: La razon de que sea este directorio es que los comandos de consola de ROS (como roscd, rosrun, etc) buscan los paquetes y proyectos en ese directorio.  De hecho, existe una variable de entorno $ROS_PACKAGE_PATH que apunta al directorio base de todos los repositorios.

geus@geus-vaio:/opt/ros/cturtle/stacks$

Recomiendo crear un directorio llamado “external” en un lugar seguro y utilizar un enlace simbólico para ubicarlo dentro de stacks. Además recomiendo la siguiente organización de subdirectorios de “external”:

  1. bags -Carpeta donde ubicar archivos .bag (con experimentos grabaso)
  2. demos – Carpeta donde ubicar paquetes de tipo demo. Habitualmente sólo con archivos .launch y sin código.
  3. full_organization_repositories – Carpeta donde ubicar repositorios federados completos, incluidos demos, stacks,  etc. Por ejemplo el repositorio de iheart-ros-pkg o bosh-ros-pkg
  4. packages – Carpeta donde ubicar paquetes individuales descargados cuando no convenga la descarga completa de un stack o un repositorio completo (una especie de sandbox)
  5. stacks – Carpeta donde ubicar las stacks individuales descargados (una especie de sandbox)

Descargamos ahora, se creará una carpeta llamada IheartRobotics, como el nombre del repositorio git:

geus@geus-vaio:~$ roscd
geus@geus-vaio:/opt/ros/cturtle/ros$ cd ../stacks/external/packages

git clone git://github.com/IHeartRobotics/iheart-ros-pkg.git
cd iheart-ros-pkg/ihr_tools

Ahora las stacks y los paquetes instalados son detectados por ROS.
NOTA: La carpeta iheart-ros-pkg no es  una stack en sí, simplemente un directorio que contiene a las tres stacks.

geus@geus-vaio:/opt/ros/cturtle/stacks/external/packages$ roscd rind
geus@geus-vaio:/opt/ros/cturtle/stacks/external/packages/iheart-ros-pkg/ihr_tools/rind$

El siguiente paso sería solucionar las dependencias y compilar el código via rosdep y rosmake.

NOTAS: Las dependencias son paquetes “third-party” que deben ser instalados para el funcionamiento del paquete. Por ejemplo un paquete de ROS con una interfaz gráfica podría necesitar tener instalado el paquete libgtk2.0-dev (en ubuntu). No es extraño pensar que las dependencias pueden ser un infierno, mas aún teniendo en cuenta que distintas versiones de linux utilizan distintos gestores de paquetes (apt, yum, etc.) y que los nombres de paquetes pueden cambiar.

ROS soluciona el problema de las dependencias mediante el comando rosdep. Primeramente, las dependencias de las stacks y los paquetes son especificadas en los archivos rosdep.yaml y stack.xml o manifest.xml.  Luego se ejecuta el comando “rosdep install”. En cualquier caso,  la mayoría de paquetes de ROS no tienen dependencias externas y en el caso contrario es habitual que estén añadidas directamente en el paquete en el directorio /lib o /dep. De este modo se pretende evitar problemas de compatibilidad con nuevas versiones, etc.

geus@geus-vaio:/opt/ros/cturtle/stacks/external/packages/iheart-ros-pkg/ihr_tools/rind$ rosdep install ihr_tools    (ya que en este stack.xml y rosdep.yaml están especificadas las dependencias)
geus@geus-vaio:/opt/ros/cturtle/stacks/external/packages/iheart-ros-pkg/ihr_tools/rind$ rosmake rind

Hemos completado el proceso, ahora podemos ejecutar ejecutable contenido en el paquete:
NOTA: habitualmente los ejecutables en un paquete representan un nodo dentro de la arquitectura distribuida de tu sistema robótico. Estos nodos necesitan que el proceso roscore esté funcionando. Sin embargo esto no tiene por que ser así. Por ejemplo rind es una herramienta que arranca ella misma el roscore.

geus@geus-vaio:/opt/ros/cturtle/stacks/external/packages/iheart-ros-pkg/ihr_tools/rind$ rosrun rind rind

One Response to ROS: Como instalar y utilizar un paquete de un repositorio federado

  1. Pingback: Desarrollo en ROS con Eclipse « GeuS' Blog: Robotics, Computer Science and More

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: