domingo, 23 de noviembre de 2014

Tutorial -- Compilación de LSD-SLAM en ROS con Catkin Workspace (ROS Indigo+Ubuntu 14.04 [64-bits])

En este tutorial se va a mostrar como compilar el proyecto de LSD-SLAM en Ubuntu 14.04 utilizando el framework de ROS (Robot Operating System) en su versión "Indigo Igloo"y concretamente usando "catkin" que es el sistema de compilación oficial de ROS en la actualidad y ha sido el sucesor del sistema de compilación original de ROS denominado "rosbuild".  

A continuación se describen los pasos para realizar la instalación y compilación del proyecto LSD-SLAM:

1- Una vez que tenemos ROS instalado y configurado y que hemos creado un Catkin Workspace abrimos un terminal en Ubuntu y nos dirigimos a la carpeta que estemos utilizando como Catkin Workspace introduciendo el siguiente comando:
cd <path_to_catkin_ws>/src

En el comando anterior, donde aparece <path_to_catkin_ws> hay que introducir la ubicación en la que se encuentra nuestro Catkin Workspace dentro del sistema de ficheros de Ubuntu.

2- Clonamos dentro de nuestro Workspace la "branch" principal del proyecto LSD-SLAM con el comando: git clone https://github.com/tum-vision/lsd_slam.git

3- A continuación cambiamos a la "branch" de Catkin del proyecto LSD-SLAM con estos comandos:
cd lsd_slam/
git checkout catkin

4- Con los comandos anteriores ya deberíamos tener disponible en nuestro Workspace el código de la "branch" de Catkin de LSD-SLAM pero aun así a continuación realizaremos una simple verificación manual para comprobar que la estructura de ficheros del proyecto que tenemos en nuestro Workspace es la correspondiente a la "branch" de Catkin del proyecto LSD-SLAM.
Introducimos el comando: ls
La respuesta que deberíamos recibir tendría que ser la siguiente:
LICENSE  lsd_slam  lsd_slam_core  lsd_slam_viewer  README.md

5- En este momento unicamente nos faltaría instalar las dependencias que necesita el proyecto para a continuación poder ser compilado.
Deberemos instalar las siguientes librerías:
ros-indigo-libg2o ros-indigo-cv-bridge liblapack-dev libblas-dev freeglut3-dev libqglviewer-dev libsuitesparse-dev libx11-dev

La instalación de estas librerías la realizaremos con único comando el cual se muestra a continuación:
sudo apt-get install ros-indigo-libg2o ros-indigo-cv-bridge liblapack-dev libblas-dev freeglut3-dev libqglviewer-dev libsuitesparse-dev libx11-dev

6- En este punto intentaremos realizar la compilación. Para ello en primer lugar nos dirigiremos al Catkin Workspace con la instrucción: cd <path_to_catkin_ws>
Seguidamente introduciremos el comando que se encarga de la compilación: catkin_make

En caso de que la compilación se realice correctamente puede pasar al punto 11 para realizar una ejecución de prueba del proyecto pudiendo así visualizar que todo funciona correctamente.

7- Si la compilación ha fallado esto es probablemente a que algunos ficheros de configuración del proyecto no están configurados adecuadamente para la compilación en ROS Indigo con Catkin Workspace.
En primer lugar abriremos el archivo "package.xml" tanto de la carpeta "lsd_slam/lsd_slam_viewer" como el de la carpeta "lsd_slam/lsd_slam_core". Una vez abiertos ambos archivos verificaremos que en su interior existan las dos instrucciones siguientes:
...
<build_depend>cmake_modules</build_depend>
...
<run_depend>cmake_modules</run_depend>
...

En caso de que no existan las introduciremos de la siguiente manera:
La instrucción <build_depend>cmake_modules</build_depend> irá ubicada justo después de todas las instrucciones del tipo <build_depend>La instrucción <run_depend>cmake_modules</run_depend> irá ubicada justo después de todas las instrucciones del tipo <run_depend>

8- Continuamos la verificación de ficheros de configuración. Ahora abriremos el archivo "CMakeFiles.txt" tanto de la carpeta "lsd_slam/lsd_slam_viewer" como de la carpeta "lsd_slam/lsd_slam_core" y verificaremos que en ambos archivos existe la siguiente instrucción:
...
find_package(cmake_modules REQUIRED)
...

En caso de que no exista la introduciremos justo antes de la primera instrucción de tipo "find_package".

9- Finalizaremos la comprobación de ficheros de configuración abriendo el archivo "CMakeLists.txt" de la carpeta "lsd_slam/lsd_slam_core" y verificando que existe la siguiente instrucción:
...
target_link_libraries(lsdslam ${FABMAP_LIB} ${G2O_LIBRARIES} ${catkin_LIBRARIES} csparse cxsparse X11)
...

En caso de que la anterior instrucción no exista, deberá existir otra parecida pero sin la librería "X11" añadida por lo tanto lo único que tendremos que hacer será añadir la librería "X11" a la instrucción "target_link_libraries" tal como se muestra en la instrucción de arriba.

10- En este punto volveremos a compilar el proyecto igual que se explico en el punto 6.
Los comandos para compilar son los siguientes:
cd <path_to_catkin_ws>
catkin_make
En este caso la compilación debería realizarse correctamente ya que todos los archivos de configuración están adaptados para la compilación en ROS Indigo con Caktin Workspace.

11- En este punto una vez que ya hemos conseguido compilar el proyecto realizaremos una pequeña prueba del sistema con la ayuda de uno de los ficheros ".bag" que aportan los creadores del proyecto para poder probar el sistema LSD-SLAM.
El archivo ".bag" que utilizaremos puede descargarse aquí: LSD_room.bag.zip
Una vez descargado el archivo "LSD_room.bag.zip" deberá descomprimirse.
A continuación empezaremos a iniciar los nodos necesarios para ejecutar la prueba.
Abrimos un nuevo terminal e insertamos el siguiente comando para iniciar el ROS CORE:
roscore
Abrimos un nuevo terminal e insertamos el siguiente comando para ejecutar el nodo de visualización de LSD-SLAM:  rosrun lsd_slam_viewer viewer
Abrimos un nuevo terminal e insertamos el siguiente comando para ejecutar el nodo principal de LSD-SLAM: rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info
En este momento solo nos falta ejecutar el archivo "LSD_room.bag" con la siguiente instrucción:
rosbag play <path>/LSD_room.bag
En el comando anterior <path> sera la ubicación en el sistema de ficheros de Ubuntu donde está el archivo "LSD_room.bag"

El resultado sería algo como esto:




















Nota final: Si al ejecutar el "viewer" se produce algún error asegúrese de que tiene los Drivers de la tarjeta gráfica actualizados y de tener instaladas todas las actualizaciones de Software de Ubuntu.
En caso de estar virtualizando Ubuntu con VirtualBox asegúrese de tener instaladas todas las actualizaciones de Software de Ubuntu y también de tener instalado "Guest Additions" y si aun así siguen saliendo "errores" que no aborten la ejecución del nodo, no le de importancia ya que son problemas menores de las virtualización que no impiden la ejecución correcta del "viewer".


Referencias:

Página oficial del proyecto LSD-SLAM: vision.in.tum.de/research/lsdslam
Página oficial del código del proyecto LSD-SLAM: github.com/tum-vision/lsd_slam
Documentación oficial de "catkin": catkin/conceptual_overview
Tutorial oficial de instalación y configuración de ROS: InstallingandConfiguringROSEnvironment
Tutorial oficial para la creación de un Catkin Workspace: catkin/Tutorials/create_a_workspace

No hay comentarios:

Publicar un comentario