User Tools

Site Tools


neurali:ros_nodes

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
neurali:ros_nodes [2016/07/04 17:15]
profpro
neurali:ros_nodes [2020/06/08 22:20] (current)
Line 1: Line 1:
 +< [[neurali:ros]]
  
 +====== Node ======
 +
 +Un node, o nodo, è un **processo** avviato all'interno di ROS, ad esempio usando rosrun, [[neurali:ros roslaunch|roslaunch]] o altri.
 +
 +In queste pagine si analizzeranno i metodi con cui un node può comunicare con altri node, anche nella pagina: [[neurali:ros services]]. Vedere anche [[neurali:gazebo libreria trasporto]]
 +
 +  * **node** = è un processo connesso in rete ad altri processi. È l'esecuzione di un programma dentro un package
 +  * topic = il contenuto della comunicazione tra node (su Gazebo dice invece che è un canale)
 +  * message = il tipo di dato usato per la comunicazione tra node 
 +    * (approfondire su [[neurali:ros message]])
 +
 +I topic possono essere pubblicati o ricevuti
 +
 +Nella seguente esempio si vedrà un'immagine (rqt_graph) dove si vedono due node che hanno sottoscritto lo stesso topic (command_velocity).
 +
 +=====Esempio=====
 +
 +Se voglio controllare un robot con un joystick, si usa :
 +  * un node (processo) che rileva l'hardware /dev/joy0 e che intercetta i comandi e a sua volta emette determinati messaggi su un canale topic.
 +  * un node (processo) che ascolta questi messaggi e li traduce in messaggi che possono essere eseguiti dal robot.
 +
 +Questa è la catena che attraversa la comunicazione dal dispostivo di controllo (joystick) al robot controllato:
 +
 +[joy] - [node1] - [node2] - [robot]
 +
 +
 +====Convenzioni sui Names====
 +
 +Per i nomi delle risorse vedere: http://wiki.ros.org/Names
 +
 +Tutti i nomi iniziano con lo slash per la convenzione sui nomi delle risorse.
 +Non posso avviare due nodi (processi) con lo stesso nome, ma posso avviare due nodi (processi) anonimi.
 +
 +{{ :neurali:rqt_graph_echo.png?nolink |}}
 +
 +Librerie client utilizzabili da un node per comunicare
 +
 +  * rospy (libreria per programmi python)
 +  * roscpp (libreria per programmi in cpp) (vedere [[neurali:roscpp tutorial]])
 +
 +===== roscore =====
 +
 +  * master = fornisce il servizio per individuare facilmente i nomi dei node
 +  * rosout = equivalente a stdout/stderr
 +  * **roscore** = master + rosout + parametri
 +
 +  ros::master::check() // il programmatore puo' comunicare da client a master
 +
 +===== Comandi utili =====
 +
 +Vedremo esempi d'uso dei seguenti comandi:
 +
 +  * rosnode = mostra i node attivi
 +  * rosrun = avvia un nuovo node
 +  * rostopic = mostra informazioni sui topic
 +  * rosmsg = mostra dettagli sul tipo
 +
 +Prima di tutto si deve **inizializzare** tutte le shell e configurare la rete
 +
 +<code>
 +$ source /opt/ros/indigo/setup.bash
 +$ export ROS_HOSTNAME=localhost
 +$ export ROS_MASTER_URI=http://localhost:11311
 +</code>
 +
 +Poi si può avviare **roscore**
 +  # chown -R mario:mario ~/.ros   # eventually
 +  $ roscore
 +
 +Poi si possono usare gli altri comandi **in un nuovo** terminale, che va ovviamente **inizializzato**. 
 +Il primo comando mostra la lista dei node attivi ma mostra il **nome del package** (non quello del node)
 +
 +  $ rosnode list
 +  $ rosrun nome_package nome_node
 +  $ rosnode list
 +  $ rosnode ping package_name
 +
 +rosrun deve specificare il nome della cartella (nome_package) dove si trova l'eseguibile (nome_node)
 +
 +Immaginare che topic sia il canale dove viaggia il messaggio (canale e messaggio devono essere dello stesso tipo)
 +
 +  rostopic type /nome/del/topic
 +
 +Il nome del topic (/nome/del/topic) si legge nel codice sorgente dell'eseguibile del package (node nel package)
 +
 +  rostopic echo /nome/del/topic
 +  rostopic list -v
 +  rostopic hz /nome/del/topic
 +  rostopic type /nome/del/topic
 +
 +Si possono avere dettagli sul tipo ottenuto dall'ultimo comando, con il seguente comando
 +
 +  rosmsg show tipo_topic
 +
 +Si possono combinare insieme
 +
 +  rostopic type /nome/del/topic | rosmsg show
 +
 +Il seguente comando invia un messaggio nel canale (/nome/del/topic) formattato secondo il tipo specificato (tipo_topic). L'argomento potrebbe indicare di inviare il comando ad un rate di 1 Hz.
 +  rostopic pub -1 /nome/del/topic tipo_topic argomento -- messaggio
 +
 +http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics
neurali/ros_nodes.txt · Last modified: 2020/06/08 22:20 (external edit)