Saltar al contenido

Cmake y package.xml

Fundamentos de ROS



kinetic

En esta breve entrada del blog, hablaremos sobre Cmake y package.xml

Cmake es una herramienta para la generación de codigo. Ya….,pero… Para qué se usa en ROS??

Si echamos un ojo a cualquier paquete de ROS siempre vemos un archivo llamado CmakeLists.txt y otro archivo llmado package.xml.

Pues bien si te has preguntado para qué sirven estos archivos, esta es la entrada…. Ah, la propia Cmake tiene tutoriales, los podéis ver n el siguiente enlace

Cmake

A la hora de trabajar, ROS utiliza la plataforma Cmake. Cmake es una plataforma open-souce cuyo objetivo es controlar la compilación de nuestros paquetes y crear archivos de configuración.

Es decir, son unas instrucciones que nos van a permitir cargar paquetes, librerías, etc y compilar nuestro paquete de una manera determinada, de tal manera, que si alguien utiliza nuestro paquete, el ordenador sabrá cómo tratarlo.

En ROS está información aparecerá en el archivo CmakeLsists.txt, archivo que aparece tras la creación de nuestro paquete cuando utilizamos el comando catkin_create_pkg.

Así pues cada vez que hacemos catkin_make, lo que está sucediendo es que, se comprueba que tenemos todas las dependencias, se comprueban los archivos a ejecutar, o se comprueba que tenemos todas las librerías.

Como hemos comentado toda esta información se debe introducir en el archivo Cmakelists.txt

Estructura de un archivo CmakeLists.txt

  • version 

Con qué versión de Cmake vamos a trabajar.

ejemplo:

cmake_minimum_required(VERSION 2.8.3) 

  •  nombre del proyecto

project(nombre) 

  •  Dependencias de nuestro paquete

De qué otros paquetes depende nuestro paquete? 

find_package(catkin REQUIRED COMPONENTS 

roscpp 

rospy 

tf2_ros 

… 

)

  • Catkin_package

Suministramos info  para construir archivos CMake y archivos de configuración.

catkin_package(

# INCLUDE_DIRS include

# LIBRARIES test

CATKIN_DEPENDS roscpp rospy tf2_ros …

# DEPENDS system_lib

)

  •  Librería en carpeta include

Si vamos a crear nuestra librería en carpeta include añadimos:

include_directories(include ${catkin_INCLUDE_DIRS})     #carpeta include 

  • Build Targets 

Especificamos los archivos ejecutables y librerías:

add_executable(myProgram src/main.cpp src/some_file.cpp)

add_library (mi_libreria src/mi_librería.cpp)    *

*Suponiendo que la librería la hemos creado nosotros y consta de un archivo mi_libreria.h y mi_librería.cpp

target_link_libraries ( myProgram mi_librería ${catkin_LIBRARIES} )      *

*Vinculamos la librería mi_librería a el programa ejecutable llamado myProgram, ${catkin_LIBRARIES} sirve para que el paquete reconozca ros/ros.h

Por último reseñar que es importante escribir el archivo en este orden. Además se rewcomienda ir abriendo otros proyectos de ROS e ir viendo el archivo CmakeLsists.txt de estos proyectos, de tal manera que vallamos perdiéndo  el miedo a estos archivos.

Package.xml

El otro archivo que aprenderemos en este tutorial es el archivo package.xml.

Este archivo simplemente es el manifiesto de nuestro paquete, es decir , es un archivo que contiene metadatos para que nuestro paquete tenga una descripción correcta.

Este archivo viene en formato xml, y es muy sencillo de rellenar. Aparte de poner opcionalmente una descripción para otros usuarios, de poner el nombre de los creadores, etc.. en este archivo mientras vayamos creando nuestra aplicación en ROS iremos metiendo las dependencias usando el tag «<depend>«

<?xml version="1.0"?>
<package format="2">
  <name>mi_pkg</name>
  <version>0.0.0</version>
  <description>The mi_pkg package</description>
  <maintainer email="hualde@todo.todo">hualde</maintainer>
  <license>TODO</license>
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_export_depend>roscpp</build_export_depend>
  <exec_depend>roscpp</exec_depend>
  <depend>moveit_ros_planning_interface</depend>
  <depend>nist_gear</depend>
  <depend>tf2_ros</depend>
  <depend>tf2_eigen</depend>
  <depend>tf2_geometry_msgs</depend>
  <export>
  </export>
</package>

Aquí acaba el post del tutorial de ROS en español  sobre el archivo CmakeLsist.txt y el archivo package.xml. Poco a poco vamos cogiendo los conceptos básicos de ROS, que si bien son fundamentales, posiblemente sean los más aburridos y sosos. Por eso, deseo que os haya gustado y que haya servido para aclarar estos conceptos. Sobre todo animaros a que sigáis practicando, pues ROS es difícil, pero si fuese fácil todo el mundo lo conocería y no tendría mérito el aprendizaje que estás realizando…. y créeme  que sí lo tiene. Por cierto enlace al código de esta entrada en GitHub

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

9 CmakeLists & Package.xml

  • por