ros tutorial

ROS Custom Message

Fundamentos de ROS

En tutoriales anteriores a la hora de la comunicación pub/sub, siempre hemos usado mensajes predefinidos para pasar datos de un nodo a otro.

 

Estos mensajes predefinidos son como una plantilla aportada por ROS, en los que nuestros datos del programa se adecuarán a esta plantilla para transmitir la información. 

Pero que pasa si el dato que queremos mandar no se adecúa a ninguna de las plantillas que nos ofrece ROS o su comunidad? Pues que podemos crear dichos mensajes a nuestro gusto y forma. Son los ROS Custom Messages

 

En esta entrada veremos como crear mensajes propios y que nuestro programa pueda hacer uso de ellos. Más info en el siguiente enlace

 

ROS_custom_message

Ejemplo

En este ejemplo (recuerda que lo tienes en nuestro Github) vamos a crear un mensaje, este mensaje está pensado para que sirva para pasar la información del nombre de un carro (string)  que contiene unas piezas y el dato de el numero de piezas que hay en este carro, este dato será un entero. Si quisiésemos otro tipo de dato por que así lo requiere la aplicación, no tenemos más que cambiar estos datos

El mensaje tendrá la siguiente estructura:

string agv_id
int64 numero

Para ello dentro de nuestro paquete en el que vamos a crear el mensaje, crearemos una carpeta llamada msg, y dentro de esta carpeta creamos un archivo llamado mi_mensaje.msg, que contendrá el mensaje de arriba.

Ahora en el archivo package.xml de nuestro paquete añadiremos las siguientes líneas:

 <build_depend>message_generation</build_depend>
 <exec_depend>message_runtime</exec_depend>

Y en el archivo CmakesLists.txt, en find_package  añadiremos la línea message_generation :

find_package(catkin REQUIRED COMPONENTS
…
…
…
  message_generation
)

En el archivo CmakesLists.txt modificaremos :

add_message_files(
 FILES
 mi_mensaje.msg
)

Tambien pondremos las dependencias de nustro mensaje, es decir de que tipo de mensajes hace uso nuestro mensaje para crearse, en nuestro caso es un string y un entero, ambos se encuentran en std_msgs

generate_messages(
   DEPENDENCIES
   std_msgs  # Or other packages containing msgs
)

Por último después de add_executable y add_library, añadimos la línea:

 

add_dependencies(“nombre_de_mi_ejecutable” ${catkin_EXPORTED_TARGETS})

Una vez realizados estos pasos podemos compilar el paquete para que se creen los mensajes , para ello :

$catkin_make

Si todo ha ido según lo previsto se habrán creado el mensaje, para comprobarlo escribiremos en la terminal:

$rosmsg show "nombre_de_mi_paquete"/mi_mensaje

Ahora deberíamos ver nuestro mensaje en pantalla.

rosmsg

Pues bien para poder usar este mensaje dentro de nuestro paquete, en el código en el que lo querramos usar, escribiremos en la cabecera:

#include <nombre_de_mi_paquete/mi_mensaje.h>

Y con esto ya podremos utilizar este mensaje creado por nosotros en nuestro paquete, recuerda que tienes el código de este ejemplo en nuestro Github.

Ahora con crear un objeto del tipo de nuestro mensaje ya estaría todo listo para poder usarlo

//creamos objeto
    entrada_custom_msgs::mi_mensaje mensaje;

En la próxima entrada hablaremos sobre un aspecto muy importante en ROS y que más dificultades presenta en su aprendizaje, las acciones de ROS. Ánimo y hasta la próxima!!!

Subscríbete a nuestro blog

ROS_custom_message

10 ROS Custom Message

ROS Custom Message Fundamentos de ROS Accede a otros posts En tutoriales anteriores a la hora de la comunicación pub/sub, siempre hemos usado mensajes predefinidos

Read More »
kinetic

9 CmakeLists & Package.xml

Cmake y package.xml Fundamentos de ROS Accede a otros posts En esta breve entrada del blog, hablaremos sobre Cmake y package.xml Cmake es una herramienta

Read More »
indigo

7 Servicios

Servicios Otras entrads del blog Qué son los servicios en ROS?? Ejemplo práctico para aclarar conceptos. Si queréis info que complemente este artículo, lo podréis

Read More »

This website uses cookies to ensure you get the best experience on our website. By continuing to browse on this website, you accept the use of cookies for the above purposes.