Table of Contents
< ros
File .msg e .srv
Le librerie ROS per client, permettono di creare dei generatori di messaggi senza dover scrivere tutto il codice in C++, basta fornire le informazioni dentro dei file di testo .msg e .srv
Vedere roscpp tutorial
esempio http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29
Comandi utili
- rosmsg
- rossrv
- roscp
- catkin
Sottocartelle
Quando si crea un package si devono creare alcune sottocartelle
- msg
- srv
Esempio prova.msg
I file.msg servono a descrivere il nome e il tipo di dato di ogni messaggio. Ogni file contiene righe composte da solo due parole (separate da uno spazio)
tipo_topic nome_topic
esempio
int64 numero
NOTA: Tutti i campi di un messaggio sono automaticamente inizializzati a zero (o a stringa vuota)
Altri tipi utilizzabili
int8, int16, int32, int64 (plus uint*) float32, float64 string time, duration other msg files variable-length array[] and fixed-length array[C]
Esempio prova.srv
Il file.srv serve a descrivere il contenuto della richiesta e della risposta dei Services, senza bisogno di scrivere codice. Si separa la richiesta dalla risposta con tre segni meno ---
int64 primo_operando int64 secondo_operando --- int64 risultato
Il codice è generato automaticamente
per vedere il precedente codice
rossrv show beginner_tutorials/AddTwoInts
Esempio di codice (msg)
esempio http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29
In tal caso il file ros package.xml deve contenere due righe in più
<build_depend>message_generation</build_depend> <run_depend>message_runtime</run_depend>
Anche il file CMakeLists.txt andrà modificato…
add_message_files(FILES prova.msg) add_service_files(FILES prova.srv) generate_messages(DEPENDENCIES std_msgs)
Esempio di codice (srv)
http://wiki.ros.org/ROS/Tutorials/WritingServiceClient%28c%2B%2B%29
da finire
http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv
da finire
Per editare un file all'interno di un package non è necessario scrivere il percorso del file, basta il nome del package dove si trova il file
esempio (preceduto da configurazione)
export EDITOR='nano -w' rosed package_name file_name
buone pratiche
- prevenire la proliferazione di nuovi .msg usando quelli esistenti
- costruire messaggi complessi attraverso la composizione di quelli più semplice
- Prima progettare i node e successivamente i messaggi
- Cercare di evitare messaggi non completamente filled out