< [[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 *