Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
NODI ROS
Per runnare (run) un nodo all’interno di un pacchetto, si utilizza rosrun:
$ rosrun [package_name] [node_name]
$ rosrun key_teleop key_teleop.py (example)
Per runnare 2 o + nodi simultaneamente, si utilizza roslaunch:
$ roslaunch [package_name] [file_name].launch
$ roslaunch tiago_gazebo tiago_gazebo.launch (example)
Quando devo cambiare dei parametri
o vedere delle caratteristiche del
nodo vado nel formato XLM di
ROSLaunch:
Param: puoi cambiare i parametri
Rosparam: per caricare un file che
ha all’interno tutti i parametri
COMANDI ROSNODE
restituisce informazioni su come usare questo comando
➢ rosnode: stampa informazioni su quel nodo
➢ rosnode info /node_name: termina il nodo
➢ rosnode kill /nome_name:
oppure termina tutti i nodi attivi (oppure per terminare
➢ rosnode kill -a rosnode kill –all:
l’esecuzione di un nodo si può digitare ctrl+c oppure chiudere il terminale)
permette di vedere la lista di tutti i nodi attivi
➢ rosnode list:
COME INIZIARE UN NODO
1. Aprire nuovo terminale e per vedere tutti i nodi attivi digita:
$ rosnode list
2. Aprire un 2° terminale e runnare il nodo con il pacchetto
$ source devel/setup.bash
$ rosrun key_teleop key_teleop.py
Teleop-->permette di muovere il robot attraverso la
tastiera
3. Per vedere il grafo del sistema, ovvero la schermata
per vedere come sono interconessi nodi (cerchio) e
topic (rettangolo), si apre un nuovo terminale e si
digita:
$ rosrun rqt_graph rqt_graph
ROS TOPIC
COMANDI ROS TOPIC oppure restituisce informazioni su come usare questo comando
➢ rostopic -h rostopic:
visualizza la larghezza di banda usata dal topic, quindi quanto spazio
➢ rostopic bw /topic_name:
occupa quel topic (quanto pesa, in base al numero di messaggi che contiene questo topic)
visualizza il ritardo del topic (differenza di tempo tra quando i
➢ rostopic delay /topic_name:
messaggio viene creato e quando viene ricevuto)
stampa a video i messaggi pubblicati
➢ rostopic echo /topic_name: trova tutti i topic che trasmettono un certo tipo di messaggio
➢ rostopic find /topic_name:
visualizza quanti messaggi pubblica al secondo quel topic
➢ rostopic hz /topic_name: stampa informazioni sul topic attivo
➢ rostopic info /topic_name:
lista di tutti i topic attivi
➢ rostopic list: per pubblicare dei dati sul topic (messaggio)
➢ rostopic pub /topic_name/msg_type/msg_data:
stampa il tipo di topic, ovvero il tipo di messaggio scambiato
➢ rostopic type /topic_name:
ctrl+c oppure chiudere il terminale: per stoppare l’esecuzione del comando rostopic
➢
PUBBLICARE UN MESSAGGIO SU UN TOPIC (esempio velocità della base)
1. Aprire il terminale e vedere la lista dei topic attivi
$ rostopic list
2. Pubblicare una velocità lineare costante di 0,5m/s lungo l’asse X
$ rostopic pub /mobile_base_controller/cmd_vel geometry_msgs/Twist linear ‘[0.5, 0.0, 0.0]’
‘[0.0, 0.0, 0.0]’ Componenti x, y,z della velocità lineare
Componenti x, y,z della velocità angolare
3. Puoi vedere come cambia il grafo dopo la
pubblicazione, aprendo un nuovo
terminale e digitando:
$ rosrun rqt_graph rqt_graph
LEGGERE UN MESSAGGIO DA UN TOPIC
1. Aprire terminale e leggere un messaggio di un topic digitando:
$ rostopic echo /mobile_base_controller/cmd_vel
2. Puoi vedere come cambia il grafo dopo la lettura di un messaggio, aprendo un nuovo terminale e
digitando:
$ rosrun rqt_graph rqt_graph
ROS SERVICE lista dei servizi attivi
➢ rosservice list: stampa il tipo di servizio
➢ rosservice type /service_name: stampa il tipo di servizio e il file srv che
➢ rosservice type service_name | rossrv show:
definisce il servizio chiama un servizio con i parametri richiesti (args)
➢ rossservice call /service_name “args”:
restituisce tutti i servizi relativi a quella tipologia di servizio che ci
➢ rosservice find /service_type:
interessa visualizza l’URI di un servizio (identifica l’indirizzp del nodo che
➢ rosservice uri /service_name:
offre un servizio)
ESECUZIONE DI UN SERVIZIO (esempio con GRASP)
$ rosservice type /parallel_gripper_controller/grasp
GRASP: si riferisce a un servizio che permette di chiudere le dita del gripper del
robot finché non afferra qualcosa (poi blocca le dita con una fora sufficiente per
tenere l’oggetto). Quindi è un servizio che fa parte del CONTROLLO DEL GRIPPER
(parallel_gripper_controller).
ROS PARAMETERS
Parametri= variabili accessibili e modificabili da tutti i nodi durante l’esecuzione (runtime) dei nodi stessi
COMANDI PARAMETRI settare il valore del parametro (nome del parametro e accanto
➢ rosparam set /param_name valore:
il valore che si vuole settare per questo parametro)
visualizza il valore attuale del parametro.
➢ rosparam get /param_name: carica i parametri da un file (in questo caso
➢ rosparam load file_name.formato namespace:
params.yaml) nel parameter server di ROS
se dopo il file scrivo anche il tutti i parametri vengono raggruppati sotto lo stesso nome
namespace salvare i parametri in un file
➢ rosparam dump file_name.formato namespace:
cancella il parametro
➢ rosparam delete /param_name:
oppure lista dei nomi dei parametri.
➢ rosparam list rosparam get /:
Si può utilizzare anche UN’INTERFACCIA GRAFICA, che permette di selezionare i parametri e modificarli,
utilizzando il comando:
$ rosrun rqt_reconfigure rqt_reconfigure
3.ROS NAVIGATION
TRANSFORMATION TREE
TF (transform frame)= transform tree
Ogni componente del robot ha il proprio sistema di riferimento, il TF tree tiene traccia di come si collegano
questi sistemi di riferimento tra loro nel tempo, così che ROS possa convertire le coordinate di un oggetto da un
frame all’altro. questo caso si ha sistema di riferimento per il laser e uno per la base.
in
Nel momento in cui il laser individua in un certo punto un ostacolo, le coordinate
dell’ostacolo devono essere convertite dal sistema di riferimento del laser a quello della
base, in modo tale che possano essere utilizzate dal robot (per es.
per evitare l’ostacolo).
Offset di traslazione: si deve sapere come il laser è posizionato rispetto alla base ----------->
Soluzione: questa conversione da un sistema all’altro può essere fatta manualmente, ma
per velocizzare si può utilizzare il pacchetto TF PACKAGE.
• Ogni NODO del TF corrisponde a un sistema di riferimento
• Ogni collegamento rappresenta una trasformazione necessaria per passare dal nodo corrente al suo
figlio (la direzione va sempre dal genitore al figlio: dalla base alla telecamera)
• La struttura ad albero garantisce che ci sia una sola strada per collegare due sistemi di riferimento
TF TOOLS
RVIZ= ambiente 3D per la visione INTERNA del robot (stato del robot e sue percezioni). Permette di visualizzare
dati come sensori, robot, mappe, percorsi,… Strumento di visualizzazione basato su topics e coordinate di
trasformazione.
Per runnare Rviz, prima bisogna preparare manualmente tutto l’ambiente ROS (lancia ros master, avviare nodi
necessari, …) e poi si può usare il comando: $ rviz
Tf_monitor: restituisce le trasformazioni attive tra i frame in ogni momento.
$ rosrun tf tf_monitor : Può essere utilizzato anche per monitorare la
$ rosrun tf tf_monitor base_link torso_fixed_link
trasformazione tra 2 frame Target frame
Reference frame
Tf echo: è uguale al comando di prima, solo che restituisce sul terminale la matrice di roto-traslazione
$ rosrun tf tf_echo base_link torso_fixed_link
view_frames: per visualizzare e salvare la trasformazione TF in un file .pdf, vengono fatti i seguenti passaggi:
1. Installare t2_tools
$ sudo apt-get install ros-noetic-tf2-tools
2. Sullo stesso terminale, per vedere il tf-tree, possiamo usare tf2_tools:
$ rosrun tf2_tools view_frames.py
3. Sullo stesso terminale, per vedere il file .pdf:
$ evince frames.pdf
LASER READING
il laser è un sensore che permette al robot di misurare le distanze dagli oggetti circostanti.
In base alle informazioni ottenute dal laser, il robot sa quanto vicino/lontano è da questi oggetti e quindi può
muoversi di conseguenza.
COME LEGGERE I DATI DEL LASER
1. Crea un nuovo pacchetto detto custom_navigation:
sposto nella cartella src del workspace ROS (catkin_ws)
→mi
$ cd catkin_ws/src
$ catkin_create_pgk custom_navigation rospy std_msgs geometry_msgs sensor_msgs
il nuovo pacchetto (nella cartella src) custom_navigation che
→crea
actionlib move_base_msgs
dipende dagli elementi scritti dopo (ovvero tutti gli elementi che sono usati nel codice)
2. Crea una nuova cartella scripts nel pacchetto custom_navigation creato prima
$ mkdir custom_navigation/scripts
3. Crea un nuovo file detto reading_laser.py
$ cd custom_navigation/scripts
$ gedit reading_laser.py
Il file script Python è un nodo ROS scritto per leggere e processare i dati di un
reading_laser.py è uno
sensore LIDAR (LaserScan), pubblicati sul topic (che è stato selezionato su Rviz).
/scan_raw
Lista di distanze misurate dal laser LIDAR, una per ogni angolo
Stampa la distanza rilevata in 3 direzioni:
0= a sx del robot, 333= davanti, 665= dx
Divide il campo visivo del LIDAR in 5 settori
e per ciascuno calcola la distanza più vicina
rilevata rispetto all’ostacolo
È simile alla parte precedente, ma limita il
valore massimo a 10metri (se un oggetto è
troppo lontano, si considera come fosse a
10m al massimo)
Si inizializza il nodo subscriber e ogni volta
reading_laser
che riceve messaggi dal (che contiene tutti i
topic /scan_raw
si attiva la funzione
dati prelevati dal laser) clbk_laser(msg)
spiegata prima
PER COMPILARE E RENDERE ESEGUIBILE LO SCRIPT PYTHON
1. Compila lo script python
$ chmod +x <path>/reading_laser.py
2. Fai build e source del workspace
$ catkin build custom_navigation
$ source devel/setup.bash
3. Rendi eseguibile lo script python
$ rosrun custom_navigation reading_laser.py
OBSTACLE AVOIDANCE (evitare)
1. Per evitare gli ostacoli crea un nuovo file detto obstacle_avoidance.py nella cartella scripts del
pacchetto custom_navigation:
$ cd custom_navigation/scripts
$ gedit obstacle_avoidance.py
2. (script di python, in cui vengono aggiunte delle parti relative all’evitare gli ostacoli rispetto al
file python visto prima)
PER COMPILARE E RENDERE ESEGUIBILE LO SCRIPT PYTHON
1. Compila
$ chmod +x <path>/obstacle_avoidance.py
$ catkin build custom_navigation
$ source devel/setup.bash
2. Rendi eseguibile
$ rosrun custom_navigation obstacle_avoidance.py
ACTIONLIB: Actionlib è una versione modif