[Documentation] [TitleIndex] [WordIndex

Capire i ROS Nodes

Descrizione: Questo tutorial introduce i concetti del ROS graph e discute l'uso dei seguenti strumenti da command line: roscore, rosnode, e rosrun.

Livello Tutorial: PRINCIPIANTE

Prossimo Tutorial: Capire i ROS topics

Prerequisiti

Per questo tutorial useremo un leggero simulatore, si prega di installarlo usando:

$ sudo apt-get install ros-<distro>-ros-tutorials

Rimpiazza '<distro>' con il nome della tua distribuzione ROS (e.g. electric, fuerte, groovy etc.)

Anteprima veloce dei concetti sul Graph

Nodi

Un nodo in realtà non è altro che un file eseguibile all'interno di un ROS package. I nodi del ROS usano una libreria del ROS client per comunicare con altri nodi. I nodi possono pubblicare o iscriversi a un Topic. I nodi possono anche fornire o usare un Servizio.

Librerie del Client

Le librerie del ROS client permettono ai nodi scritti con diversi linguaggi di programmazione di comunicare:

roscore

roscore è la prima cosa che dovresti eseguire quando usi ROS.

Esegui:

$ roscore

Vedrai qualcosa simile a:

Se roscore non inizializza nulla, probabilmente hai un problema di comunicazione sulla rete. Vedi Network Setup - Single Machine Configuration

Se roscore non inizializza nulla e invia un messaggio riguardo la mancanza di permessi, probabilmente il folder ~/.ros è proprietà del root, cambia ricorsivamente la proprietà di quel folder con:

$ sudo chown -R <your_username> ~/.ros

Usare rosnode

Apri un nuovo terminale, e usiamo rosnode per vedere cosa roscore stava eseguendo...

Nota: Quando si apre un nuovo terminale, il tuo ambiente è resettato e il file ~/.bashrc è (sourced-->?). Se hai problemi nell'eseguire comandi come rosnode allora puoi aver bisogno di aggiungere alcuni setup files dell'ambiente al tuo ~/.bashrc o manualmente (re-source them-->).

rosnode mostra informazioni sui ROS nodes che sono in esecuzione. Il comando rosnode list elenca questi nodi attivi:

$ rosnode list

Questo ci ha mostrato che c'é solo un nodo in esecuzione: rosout. Questo è sempre in esecuzione in quanto raccoglie e registra il debugging output dei nodi.

Il comando rosnode info restituisce informazioni su uno specifico nodo.

$ rosnode info /rosout

Questo ci ha dato qualche informazione in più su rosout, come il fatto che esso pubblica /rosout_agg.

Ora, vediamo qualcosa di più sui nodi. Per questo, useremo rosrun per "far apparire" (<= to bring up) un altro nodo.

Usare rosrun

rosrun permette di usare il nome del package per eseguire direttamente un nodo all'interno del package (senza dover conoscere il percorso del package).

Uso:

$ rosrun [package_name] [node_name]

Cosi ora possiamo eseguire il turtlesim_node nel turtlesim package.

Poi, in un nuovo terminale:

$ rosrun turtlesim turtlesim_node

Vedrai la finestra del turtlesim:

NOTA: La tartaruga potrebbe essere diversa nella tua finestra del turtlesim. Non preoccuparti per questo - ci sono molti tipi di tartaruga e la tua è una sorpresa!

In un nuovo terminale:

$ rosnode list

Vedrai qualcosa simile a:

Una potente caratteristica del ROS è che puoi riassegnare i Nomi da command-line.

Chiudi la finestra del turtlesim per fermare il nodo (o torna al terminale del rosrun turtlesim e usa ctrl-C). Ora ri-eseguiamolo, ma questa volta usa un Remapping Argument per cambiare il nome del nodo:

$ rosrun turtlesim turtlesim_node __name:=my_turtle

Ora, se andiamo indietro e usiamo rosnode list:

$ rosnode list

Nota: Se vedi ancora /turtlesim nell'elenco, potrebbe significare che hai fermato il nodo nel terminale con ctrl-C invece di chiudere la finestra, oppure che non hai definito la variabile dell'ambiente $ROS_HOSTNAME come descritto in Network Setup - Single Machine Configuration. Puoi provare a pulire l'elenco del rosnode con: $ rosnode cleanup

Vediamo il nostro nuovo nodo /my_turtle. Usiamo un altro comando del rosnode, ping, per testare che è up:

$ rosnode ping my_turtle

Review

Cosa è stato visto:

Ora che hai capito come lavorano i nodi in ROS, diamo un'occhiata a come lavorano i ROS topics. Inoltre, sentiti libero di premere Ctrl-C per fermare turtlesim_node.


2019-10-19 12:46