neurali:ros_nodes
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
neurali:ros_nodes [2016/07/04 17:15] – profpro | neurali:ros_nodes [2020/06/08 22:20] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | < [[neurali: | ||
+ | ====== Node ====== | ||
+ | |||
+ | Un node, o nodo, è un **processo** avviato all' | ||
+ | |||
+ | In queste pagine si analizzeranno i metodi con cui un node può comunicare con altri node, anche nella pagina: [[neurali: | ||
+ | |||
+ | * **node** = è un processo connesso in rete ad altri processi. È l' | ||
+ | * 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: | ||
+ | |||
+ | I topic possono essere pubblicati o ricevuti | ||
+ | |||
+ | Nella seguente esempio si vedrà un' | ||
+ | |||
+ | =====Esempio===== | ||
+ | |||
+ | Se voglio controllare un robot con un joystick, si usa : | ||
+ | * un node (processo) che rileva l' | ||
+ | * 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:// | ||
+ | |||
+ | 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 [[neurali: | ||
+ | |||
+ | ===== roscore ===== | ||
+ | |||
+ | * master = fornisce il servizio per individuare facilmente i nomi dei node | ||
+ | * rosout = equivalente a stdout/ | ||
+ | * **roscore** = master + rosout + parametri | ||
+ | |||
+ | ros:: | ||
+ | |||
+ | ===== 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 / | ||
+ | $ export ROS_HOSTNAME=localhost | ||
+ | $ export ROS_MASTER_URI=http:// | ||
+ | </ | ||
+ | |||
+ | Poi si può avviare **roscore** | ||
+ | # chown -R mario:mario ~/ | ||
+ | $ 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' | ||
+ | |||
+ | Immaginare che topic sia il canale dove viaggia il messaggio (canale e messaggio devono essere dello stesso tipo) | ||
+ | |||
+ | rostopic type / | ||
+ | |||
+ | Il nome del topic (/ | ||
+ | |||
+ | rostopic echo / | ||
+ | rostopic list -v | ||
+ | rostopic hz / | ||
+ | rostopic type / | ||
+ | |||
+ | Si possono avere dettagli sul tipo ottenuto dall' | ||
+ | |||
+ | rosmsg show tipo_topic | ||
+ | |||
+ | Si possono combinare insieme | ||
+ | |||
+ | rostopic type / | ||
+ | |||
+ | Il seguente comando invia un messaggio nel canale (/ | ||
+ | rostopic pub -1 / | ||
+ | |||
+ | http:// |
neurali/ros_nodes.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1