Nuova sezione libri disponibile!

Come creare messaggi custom in ROS

Ludovico Russo

lettura in 3 minuti

Ciao a tutti! Oggi metterò insieme una serie di informazioni che ho raccolto mentre cercavo di creare un nuovo tipo di messaggio con ROS durante il mio progetto di tesi. Questa potrebbe essere la vostra situazione nel caso aveste bisogno di un tipo di messaggio base con l'intento di semplificare la vostra applicazione: infatti alcuni messaggi standard di ROS sono fin troppo complessi per l'uso semplice che si vuol ottenere. Spero che questo post possa riassumere e accelerare la creazione di messaggi custom. Iniziamo!

Creare il file .msg

Assumo che abbiate già il vostro workspace catkin (creato seguendo questo tutorial) e che abbiate creato il vostro pacchetto ROS come spiegato qui.

RMK: è buona abitudine creare un pacchetto specifico per la definizione di messaggi, e.g., create un package chiamato custom_msgs.

Prima di tutto, dalla command line, entrate nella cartella del package, sfruttando il comando ROS roscd:

roscd custom_msgs

Una volta nella cartella, create una nuova cartella chiamata msg, tale che i messaggi custom contenuti in essa vengano riconosciuti auotmaticamente durante la compilazione del pacchetto:

mkdir msg
cd msg

Create il file di definizione del nuovo messaggio specificando direttamente il suo contenuto e salvandolo in un file con estensione .msg; nel mio caso, avevo bisogno di un semplice array di interi che ho chiamato Servo_Array.

echo "uint16[] data" > msg/Servo_Array.msg

Per controllare se la definizione del messaggio è stata salvata correttamente, potete semplicemente fare un check del contenuto:

cat Servo_Array.msg

"Attivare" la generazione del messaggio

Per sollecitare la generazione dei nuovi tipo di messaggio durante la compilazione con catkin, dobbiamo modificare i file contenuti nel package package.xml e CmakeLists.txt:

  • Aprite¬†package.xml, e assicuratevi che queste due linee siano presenti e de-commentatele:
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
  • Aprite¬†CmakeLists.txt, aggiungete message_generation alla lista dei COMPONENTS, cos√¨:
find_package(catkin REQUIRED COMPONENTS
   roscpp
   rospy
   std_msgs
   message_generation
)
  • Esportare la dipendenza message runtime:
catkin_package(
  ...
  CATKIN_DEPENDS message_runtime ...
  ...)
  • Quindi de-commentate le seguenti righe (rimuovete #) e rimpiazzate Message*.msg con il vostro file .msg (nel mio caso Servo_Array.msg):
add_message_files(
  FILES
  Servo_Array.msg
)
  • Infine de-commentate queste righe:
generate_messages(
  DEPENDENCIES
  std_msgs
)

NB: se avete pi√Ļ di un messaggio custom da aggiungere, create i relativi file .msg e aggiungeteli ogni volta fche un file .msg deve essere aggiunto nel file CmakeLists.txt (come specificato sopra).

Re-building del package

Adesso che abbiamo creato dei nuovi messaggi, dobbiamo fare di nuovo il make del pacchetto:

Nel vostro workspace catkin

roscd custom_msgs
cd ../..
catkin_make

NB: supponiamo che vogliate scrivere degli script Python all'interno di un package chiamato, per esempio, my_package: per importare il messaggio custom nel vostro script, avrete bisogno la seguente riga from custom_msgs.msg import Motors_Array. Notate che gli scripts Python sono solitamente contenuti in una cartella my_package/scripts.

La maggior parte delle informazioni in questo post sono state prese da qui.

Messaggi custom e Rosserial Arduino

Nel caso abbiate bisogno di usare il vostro messaggio cusotm nel nodo seriale su Arduino, dovete solo copiare il vostro package custom_msgs nella cartella ros_lib (cartella_di_sketch_Arduino/libraries/ros_lib/). Dopo aver ri-lanciato l'editor Arduino, potete riferirvi al nuovo messaggio nel vostro sketch con #include <custom_msgs/Motors_Array.h>.

Ciao! :hibiscus:

Ti è piaciuto questo post?

Registrati alla newsletter per rimanere sempre aggiornato!

Ci tengo alla tua privacy. Leggi di pi√Ļ sulla mia Privacy Policy.

Ti potrebbe anche interessare

Non avete un robot? C'è il robot in cloud accessibile da remoto tramite il vostro PC o da cellulare
Non avete un robot? C'è il robot in cloud accessibile da remoto tramite il vostro PC o cellulare
Avete problemi hardware? C'è il robot in cloud accessibile da remoto tramite il vostro PC o cellulare
Avete problemi hardware? C'è il robot in cloud accessibile da remoto tramite il vostro PC o cellulare
Installiamo ROS su Raspberry Pi
Un breve tutorial su come utilizzare ROS sul Raspberry Pi
Video Corso ROS Rokers - Completati i video di Introduzione
Sono disponibili online i video tutorial del corso di ROS partito dalla community Rokers
NTBD: guida step by step
Cos'è e come utilizzare NTBD step by step, primo articolo della serie
Inviare Goals alla Navigation Stack - versione nodo ROS Python
Inviare un goal all ROS navigation stack utilizzando un nodo Python
Inviare una sequenza di Goals alla ROS NavStack usando Python
Inviare una sequenza di pose desiderate alla ROS Navigation Stack usando un nodo Python
Benvenuto a ROS 2.0
Primo contatto con ROS 2.0
Usare il braccio robotico Dobot con ROS
Come usare il braccio robotico con Robot Operating System
Un Video Corso di ROS
Il mio video corso su come utilizzare ROS è disponibile
Sviluppiamo un Robot con tecnologie Open Source
Inizio una serie di videoguide, in cui voglio introdurvi al mondo della robotica di servizio in modo pratico, facendo vedere come è possibilile, sfruttando tecnologie completamente Open Source, quali Arduino, Raspberry Pi, ROS e Docker, costruire un piccolo robot di Servizio.
Robot Open Source - Introduzione a Docker
√ą disponibile il video "Introduzione a Docker".
Buildare e usare container Docker per Raspberry Pi
In questa guida vediamo come buildare ed utilizzare Docker su Raspberry Pi (ed in generale sistemi Linux Embedded) per velocizzare la produzione di applicazioni Linux Embedded
Robot Open Source - Docker e Raspberry
√ą disponibile il video "Docker e Raspberry".