[[neurali: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 [[neurali: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 [[neurali:ros package.xml]] deve contenere due righe in più
message_generation
message_runtime
Anche il file [[neurali:gazebo_box_animato_source#cmakeliststxt|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
*