User Tools

Site Tools


neurali:ros_nodes

< ros

Node

Un node, o nodo, è un processo avviato all'interno di ROS, ad esempio usando rosrun, roslaunch o altri.

In queste pagine si analizzeranno i metodi con cui un node può comunicare con altri node, anche nella pagina: ros services. Vedere anche 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

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.

Librerie client utilizzabili da un node per comunicare

  • rospy (libreria per programmi python)
  • roscpp (libreria per programmi in cpp) (vedere 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

$ source /opt/ros/indigo/setup.bash
$ export ROS_HOSTNAME=localhost
$ export ROS_MASTER_URI=http://localhost:11311

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 by 127.0.0.1