Robotics – Simultaneous Localization And Mapping (SLAM) con ROS

Una tarea muy importante que debe realizar un robot autónomo es adivinar donde está localizado dado un mapa conocido, en  la bibliografía este problema es referido como “el problema de la localización”. Las cosas se complican cuando el mapa también es desconocido: Esta situación se conoce como “The kidnaped robot problem”. En estos casos hay que utilizar técnicas de SLAM (Localización y Mapeo Simultaneo) para ambos: localizarse y construir el mapa del entorno simultáneamente. De forma laxa podríamos decir que se trata de un tipo de exploración del robot en un entorno desconocido. Existen muchas y diversas técnicas de SLAM típicamente para 2D y 3D y utilizando sensores Lasers Rangers, Sonars o Cámaras mono o estéreo.

ROS dispone de varios paquetes para realizar SLAM usando visión  con cámaras y principalmente usando Lasers Rangers: vslam, gmapping, kartoMapping, graphmapping.

Este post trataremos como arrancar un ejemplo básico con gmapping, El objetivo es aprender vagamente como funciona y poder aplicarlo en nuestros proyectos.

El algoritmo GMapping

GMapping es una librería libre perteneciente al proyecto OpenSLAM y que implementa una extensión la técnica SLAM Grid Mapping. En cualquier caso, utilizaremos este software como si fuera una caja negra. Sabemos que su salida son la localización del robot en el mapa y el mapa en si mismo. Como entradas toma  información periódica sobre una estimación de la posición del robot (odometría – calculada por los encoders del motor) y la medida del sensor laser ranger (vector de distancia) en un entorno con superficie plana.

Demo GMapping en ROS

¿Como probar este software en ROS? Sencillo, la gente de Bosch ya ha realizado una demo, con el simulador stage para que podamos abordar el problema. Esta demo está localizado en el paquete explore_stage. Consiste en un mapa desconocido por un robot móvil tipo erratic. Observemos la wiki del paquete vemos la siguiente información de repositorio donde se ubica el código:

Descargaremos todo el directorio […]stacks/exploration/demos ya que contiene algunos paquetes adicionales con mapas y modelos que nos serán necesarios.

geus@geus-vaio:/opt/ros/cturtle/stacks/external/demos$ svn co https://bosch-ros-pkg.svn.sourceforge.net/svnroot/bosch-ros-pkg/trunk/stacks/exploration
[…]
geus@geus-vaio:/opt/ros/cturtle/stacks/external/demos/exploration$ roscd explore_stage/
geus@geus-vaio:/opt/ros/cturtle/stacks/external/demos/exploration/explore_stage$ ls
config   explore.launch       explore_slam.xml  explore.xml   move.xml
explore  explore_slam.launch  explore.vcg       manifest.xml

Como se observa el paquete es muy sencillo, solo algunos componentes .launch con la aplicaciones.  Antes que nada compilemos el stack exploration ya que contiene un paquete exploration/explore con el código para realizar la exploración en el mapa desconocido.

geus@geus-vaio:/opt/ros/cturtle/stacks/external/demos/exploration/explore$ rosmake exploration
[ rosmake ] Packages requested are: [‘exploration’]
[…]
[ rosmake ] Results:
[ rosmake ] Built 53 packages with 0 failures.

En concreto la aplicación de explorar está en el explore_slam.launch. Lanzamos la aplicación:

geus@geus-vaio:/opt/ros/cturtle/stacks/external/demos/exploration/explore_stage$ roslaunch explore_slam.launch

Algunos problemas con Stage

Pueden que los usuarios de ubuntu reciban el siguiente error, debido a los cambios en la política de archivos del servidor gráfico X11. Existe un problema que no se encuentra el archivo rgb.txt que es una base de datos con colores.

[Loading /opt/ros/cturtle/stacks/external/full_organization_repositories/bosh-ros-pkg/bosch_demos/bosch_worlds/maze-noisy.world][Include segway-noisy.inc][Include sick.inc][ INFO] [1291307466.316198795]: Subscribed to Topics: base_scan
err: unable to open color database: No such file or directory (try adding rgb.txt’s location to your STAGEPATH) (/tmp/buildd/ros-cturtle-simulator-stage-1.2.1/debian/ros-cturtle-simulator-stage/opt/ros/cturtle/stacks/simulator_stage/stage/build/Stage-3.2.2-Source/libstage/color.cc Color)

El problema se soluciona de forma sencilla añadiendo a la variable de entorno $STAGEPATH una ruta que contenga un rgb.txt correcto. En nuestro caso, el mismo paquete stage contiene ese archivo. Lo añadimos:

geus@geus-vaio:/opt/ros/cturtle/stacks$ find $ROS_PACKAGE_PATH | grep rgb.txt
/opt/ros/cturtle/stacks/simulator_stage/stage/share/stage/assets/rgb.txt
/opt/ros/cturtle/stacks/simulator_stage/stage/share/stage/rgb.txt
/opt/ros/cturtle/stacks/simulator_stage/stage/build/Stage-3.2.2-Source/assets/rgb.txt
/opt/ros/cturtle/stacks/simulator_stage/stage/build/Stage-3.2.2-Source/libstage/rgb.txt
geus@geus-vaio:/opt/ros/cturtle/stacks$ export STAGEPATH=`rospack find stage`/share/stage
geus@geus-vaio:/opt/ros/cturtle/stacks$ echo $STAGEPATH
/opt/ros/cturtle/stacks/simulator_stage/stage/share/

Ahora si. Lanzamos y ya funciona y podemos ver como arrancan varios procesos definidos en el archivo .launch.

geus@geus-vaio:/opt/ros/cturtle/stacks/external/demos/exploration/explore_stage$ roslaunch ./explore_slam.launch

Otra alternativa es añadir en el archivo explore_slam.launch el valor de la variable de entorno:



...

Interpretación de resultados

Tras lanzar el explore_slam.launch se ejecutan diversos procesos ROS. Entre ellos se abre el simulador stage, mostrado en la imagen. A los pocos segundos, tras algo de proceso el robot empieza a navegar y a explorar su entorno. Para poder ver bien que está ocurriendo podemos abrir la herramienta rviz. Primera imagen de este artículo.

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

Añadimos los visualizadores (plugins) de rviz “map”, “tf” y “laser scan”.

  • “map” – sirve para que podamos ver el mapa que se está construyendo.  Mas concretamente monitorizar los mensajes de tipo nav_msgs/OccupancyGrid publicados en el topic “/map”.
  • “tf” – sirve para monitorizar la posición estimada por el sistema SLAM.
  • “laser scan”- sirve para monitorizar el escaneo laser que está realizando el robot. Mas concretamente mensajes del tipo sensor_msgs/LaserScan

Podemos observar que se han creado tres procesos principales: “/explore” “/move_base” “/stage” “/gmaping”.

  • “/stage”- es el nodo simulador. Se limita a enviar al exterior mensajes de las lecturas del laser y la posición del robot a través del tópic /tf. También acepta comandos de movimiento a través del topic /cmd_vel
  • “/gmaping”- es el nodo que crea que realiza el SLAM. Crea el mapa a partir de la posición estimada y las lecturas del sensor Laser (topic /base_scan de tipo “sensor_msgs/LaserScan”).
  • “/explore” – es el nodo que realiza el algoritmo de exploración. Utiliza el mapa resultante y la posición del robot para estimar zonas donde es mas interesante seguir explorando. Una vez decidido un plan de exploración se lo indica al nodo “/move_base”
  • “/move_base” – es el nodo que se encarga de ejecutar un plan de ejecución. Se trata de un paquete esencial y genérico que ROS provee. Simplente sigue las ordenes del nodo “/explore” y ordena al “/stage” como debe mover los motores haciendo uso del topic “/cmd_vel” de tipo de mensaje “geometry_msgs/Twist
    “, siempre intentando crear una trayectoria sin colisionar.

Esto es todo. Si lográis sustituir el nodo stage por un robot real con odometría y sensor laser, tenéis un sistema de SLAM listo para ser ejecutado.

Saludos y Happy Robotics!😉

4 Responses to Robotics – Simultaneous Localization And Mapping (SLAM) con ROS

  1. Javier dice:

    Muy chulo Pablo,

    Mira te dejo otro ejemplo de como conseguirlo, usando el kinect, espero que te mole.

    Saludos

  2. geus dice:

    Guay, Guay! Eso tenemos que probarlo.

    Respecto a la detección de gestos mmm. Es curioso parece que trabajan directamente con la nube de puntos directamente sin montar el esqueleto. En cualquier caso habrá que hacer un seguimiento de esta gente.

    Por otra parte, para otros interesados decir que utilizan dos tecnologías robóticas también muy interesantes YARP (europea) para el middleware de comunicaciones y MRPT para algoritmos de SLAM, etc. MRPT es tecnología andaluza! ¡Creada por Jose Luis Blanco, Doctor del departamento ISA de la Universidad de Málaga!🙂. En fin, tenemos que seguir fomentando estas cosas por aquí y creando comunidad.

  3. David dice:

    ¡Genial entrada! Gracias.
    Un saludo

  4. nadie qeu te conoce dice:

    http://es.engadget.com/2010/05/11/video-el-passat-autonomo-de-stanford-aparca-derrapando/
    mira este video, quizas te interese

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: