SlideShare a Scribd company logo
Il sistema ROS
ROS -> Robotic Operating System. Non è un sistema operativo
bensì un framework per lo sviluppo di applicazioni robotiche
distribuite.
ROS è un prodotto open source rilasciato sotto licenza BSD.
ROS contiene tutta una serie di librerie e funzioni che permettono
di sviluppare applicativi in Python e C++.
Struttura base del ROS
Perché il ROS
Lo sviluppo di software robusto per il controllo di un robot è
un’attività che richiede il contributo di molte competenze
diverse (visione artificiale, navigazione, comunicazione,
controllo del moto,… solo per citarne alcune), spesso non
presenti all’interno di un unico team di lavoro.
Pertanto, con il passare degli anni è stato sempre più evidente
il bisogno di un ambiente che consentisse lo sviluppo del
software in modo collaborativo e facilmente integrabile. Il ROS
mette a disposizione alcune funzionalità fondamentali per
facilitare la modularità del software sviluppato, con particolare
attenzione alle convenzioni e alle funzionalità tipiche dei
dispositivi robotici.
Installazione del ROS
In queste slides verrà installato il ROS Melodic (una delle tante
distribuzioni del ROS) su una Raspberry PI3 Model B+ con
sistema operativo Ubuntu Mate 18.04.
Per prima cosa installare Ubuntu Mate su Raspberry.
Successivamente entrare nella voce «SOFTWARE&UPDATES»,
come mostrato di seguito:
Installazione del ROS
Selezionare tutti e 4 i repository come mostrato in
figura:
Installazione del ROS
Successivamente entrare nel terminale del
sistema operativo come mostrato di seguito:
Installazione del ROS
Per prima cosa, verificare se python è installato. Basta digitare
il comando python (l’interprete) da prompt dei comandi. Se
comparirà a video il prompt di Python con il simbolo >>> allora
Python è installato.
Successivamente, verificare che si abbiano tutti i repository del
caso in locale. Per quanto riguarda i repository, in Ubuntu ci
sono 4 repository di default:
MAIN -> repository per software free ed opensource per
sviluppatori Ubuntu
UNIVERSE -> per software free ed open source per la
community Ubuntu
RESTRICTED -> per software sotto licenza e device drivers
MULTIVERSE -> tutti i software sotto licenza
Installazione del ROS
Per aggiungere i repository in locale digitare nel terminale:
sudo add-apt-repository main
sudo add-apt-repository universe
sudo add-apt-repository restricted
sudo add-apt-repository multiverse
Installazione del ROS
Sempre da terminale, eseguire:
sudo apt update
E successivamente:
sudo apt upgrade
A questo punto, se tutto è andato a buon
fine digitare:
sudo apt-get install aptitude
Installazione del ROS
Digitare il seguente comando per accettare software da
packages.ros.org:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu
$(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-
latest.list'
E successivamente:
sudo apt-key adv --keyserver
'hkp://keyserver.ubuntu.com:80' --recv-key
C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
Installazione del ROS
A questo punto sfruttare il seguente comando per installare il
ROS distribuzione Melodic:
sudo apt update
sudo aptitude install ros-melodic-desktop-full
Se tutto è andato a buon fine è possibile passare
all’installazione delle librerie ausiliarie molto importanti per il
ROS. In particolare, verificare i packages disponibili:
apt search ros-melodic
Installazione del ROS
Successivamente installare le librerie riguardanti ROS e Python:
sudo apt install python-rosdep python-rosinstall python-
rosinstall-generator python-wstool build-essential
A questo punto è possibile inizializzare il rosdep con il
seguente comando:
sudo rosdep init
rosdep update
Installazione del ROS
Digitare il comando:
source /opt/ros/melodic/setup.bash
Successivamente, installare tramite «aptitude» il seguente
pacchetto:
sudo aptitude install ros-melodic-roslaunch
Installazione del ROS
Nel caso in cui ci dovessero essere dei problemi
nell’installazione del ros-melodic legati ad eventuali
dipendenze o quant’altro è opportuno disintallare alcune
librerie Python e riprovare.
Funzionamento del ROS
Se c’è qualche errore analizzarlo e farsi aiutare da Internet. Molto
probabilmente mancano delle librerie. Può capitare anche un
errore del tipo: «compilatore c++ not able to compile simple
Program». In questo caso, provare provare a compilare un semplice
programmino cpp con g++ e vedere se ci sono errori.
Nel caso eseguire i seguenti comandi di aggiornamento:
sudo apt-get install build-essential
Sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt-get update sudo apt-get install gcc-snapshot -y
Funzionamento del ROS
E’ bene precisare che la struttura generale di un’applicazione
può essere vista come una rete di nodi, i quali, interconnessi fra
loro, scambiano messaggi all’interno di appositi bus ed accedono
a servizi messi a disposizioni da altri nodi.
Come primo step, una volta installato il ROS, è quello di provare
qualche comando e vedere qualche semplice esempio.
In particolare, usare il comando roscore,
per poter avviare il ROS master node.
Una volta avviato con successo è possibile iniziare a lavorare.
Funzionamento del ROS
Verifica versione ROS
Funzionamento del ROS
La struttura di base del ROS è piuttosto semplice. Essa è una rete
di nodi chiamati in modo generico ROSNODE. Il ROSCORE è il nodo
Master, ossia il nodo che gestisce le comunicazioni tra i ROSNODE.
Funzionamento del ROS
Il ROSNODE invece può essere un pacchetto fornito con il ROS o
Un pacchetto scritto dal progettista del software in C++ o Python.
Funzionamento del ROS
La comunicazione tra i vori nodi avviene tramite scambio di
messaggi. Quindi, per prima cosa, creare il catkin workspace
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_init_workspace
Ci sono due modi per l'organizzazione e la
compilazione del proprio codice in ROS:
• Catkin
• rosbuild
Funzionamento del ROS
Catkin di fatto è una raccolta di macro Cmake integrato nel ROS.
Cmake è un tool open source progettato per compilare, testare e
distribuire i propri pacchetti nel mondo Linux.
Mentre il tool make è stato pensato per chi sviluppa in C, Cmake
è stato pensato principalmente per chi sviluppa in C++. Il comando
catkin_init_worskpace permette di inizializzare l’ambiente
di sviluppo creando di fatto un file chiamato
Funzionamento del ROS
Per prima cosa creiamo da zero un nostro workspace come
mostrato di seguito.
Funzionamento del ROS
Digitare il comando seguente per creare ambiente di sviluppo,
debug e compilazione.
Funzionamento del ROS
Al termine dell’operazione, se tutto è andato a buon fine si
avranno le seguenti cartelle:
Nella cartella src si scriverà il nostro codice.
Funzionamento del ROS
Il file denominato CMakeLists.txt viene creato automaticamente.
L’ultima istruzione server per fare in modo di attivare sempre
il workspace creato quando si apre un nuovo terminale.
Funzionamento del ROS
CMakeList.txt -> contiene direttive utili al Cmake per capire
Cosa deve fare
Una volta eseguito il comando catkin_make è possibile visualizzare
La struttura della cartella catkin_ws costruita. Ci saranno tre
sottocartelle:
• Build
• Src
• Devel
Funzionamento del ROS
In ROS i vari nodi possono anche non risiedere sullo stesso
sistema. I componenti base di una architettura ROS sono:
• Package -> sono unità di codice e possono essere di sistema o
create dall’utente
• Repository -> è una collezione di package che condividono lo
stesso VCS
• Nodo -> eseguibile che può pubblicare messaggi
su un topic od iscriversi ad un topic.
• Topic -> contenitore di messaggi pubblicati da uno o più
nodi.
Funzionamento del ROS
• Messaggi -> tipo di dato usato dai nodi per scambiarsi info.
• Servizi -> messaggi di tipo client/server che si aspettano una
risposta dopo un dato inviato.
Funzionamento del ROS
A questo punto, si può provare a creare un package chiamato, per
Comodità, MyFirstPackage nel seguente modo:
catkin_create_pkg MyFirstPackage std_msgs rospy roscpp
Il package creato (comando da lanciare dalla cartella SRC) del
catkin workspace dipende da rospy, roscpp e std_msgs.
roscpp: pacchetto di riferimento che estende
il supporto alla programmazione C++;
rospy: analogo del precedente per Python;
std_msgs: pacchetto di comunicazione.
Ricapitolando…
Roscore -> servizio che gestisce la comunicazione tra i vari nodi.
Rosmaster -> è il ROS parameters server
Importante: Se si considera per esempio un rover (robot mobile)
e si desidera che i servomotori dialoghino con i sensori di distanza
Allora i servomotori avranno uno script che li gestisce (è un nodo
ROS) ed i sensori un altro script (un altro nodoROS).
Entrambi i nodi ROS dovranno comunicare con
Il nodo Master.
Creazione package
Come mostrato di seguito vediamo come creare un nuovo package
Creazione package
Tramite il comando catkin_create_pkg nome_pacchetto è
possibile creare un package con le dipendenze specificate:
• roscpp: pacchetto di riferimento che estende il supporto alla
programmazione C++;
• rospy: analogo del precedente per Python;
• std_msgs: pacchetto di comunicazione
Creazione package
Tramite il comando catkin_create_pkg nome_pacchetto è
possibile creare un package con le dipendenze specificate:
• roscpp: pacchetto di riferimento che estende il supporto alla
programmazione C++;
• rospy: analogo del precedente per Python;
• std_msgs: pacchetto di comunicazione
A questo punto ridigitare ancora catkin_make come
viene mostrato nella successiva slide:
Creazione package
Creazione package
I nodi, di fatto, sono dei programmi eseguiti all’interno dei
nostri package. Vediamo come creare un nodo in python.
Per prima cosa, i pacchetti sono l'unità principale per
l'organizzazione del software in ROS. Un pacchetto può
contenere processi runtime ROS ( nodi ), una libreria
dipendente da ROS, set di dati, file di configurazione o
qualsiasi altra cosa che sia organizzata in modo utile
insieme.
Creazione package
Il Computation Graph è il grafico che descrive la rete
peer-to-peer dei processi ROS che elaborano i dati
insieme. Tale rete è composta da nodi ossia processi che
eseguono calcoli. Ad esempio, un nodo controlla un
sensore di distanza, un nodo controlla i motori delle ruote,
eccetera. Un nodo ROS viene scritto con l'uso di una
libreria particolare come per esempio rospy o roscpp.
I nodi comunicano tramite scambio di messaggi. Un
messaggio è semplicemente una struttura dati.
Sono supportati i tipi primitivi standard
come, per esempio il tipo intero, booleano.
Creazione package
Solitamente un messaggio viene pubblicato su un
determinato topic. Un nodo interessato a un certo tipo di
dati si iscriverà al topic appropriato. L'idea è di separare
la produzione di informazioni dal suo consumo. il modello
di pubblicazione / sottoscrizione è un paradigma di
comunicazione molto. Quindi le tipologie di
comunicazione sono:
• Publish/subscribe: modalità di comunicazione
asincrona in broadcasting
• Service: modalità di comunicazione sincrona, secondo la
semantica request / reply.
Creazione package
• Publish / subscribe: Scrittura di un messaggio su di un topic
messo a disposizione dal roscore.
Tutti i nodi che desiderano ricevere il messaggio possono
richiederlo al roscore.
• Service: Un nodo invia una richiesta a tutti i nodi in grado di
soddisfarla. Da questi nodi riceverà una risposta.
Creazione package
• La creazione di un package avviene con il comando
seguente.
Creazione package
• Eseguire catkin_make per compilare il tutto. Una volta
compilato, se non sono sorti degli errori è possibile avviare
il package appena creato.
• Ogni directory di un pacchetto possiede i seguenti files:
Creazione package
roslaunch è uno strumento importante che gestisce
l'avvio e l'arresto dei nodi ROS. Prende uno o più file "*
.launch" come argomenti. Quindi, roslaunch utilizza i
cosiddetti “launch file” che sono file XML contenenti la lista dei
nodi da lanciare con i rispettivi parametri.
Editare nella cartella SRC il file chiamato test.py nel
seguente modo:
Creazione package
Creare una cartella chiamata «launch» come
mostrato di seguito:
• All’interno della cartella appena creata, creare un file
chiamato test.launch
Creazione package
Esecuzione package:
Se si desidera creare un topic e pubblicarlo si usa il
seguente comando:
RosSerial
RosSerial è un pacchetto che permette di utilizzare ROS su
Arduino.
La slide successiva mostra come installare ROSSerial sfruttando
la versione già installata del ROS (per esempio la distribuzione
Melodic).
RosSerial
RosSerial
Seguire le istruzioni di installazione riportate sul sito seguente:
http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup#Installing_the_Software
Successivamente, dopo aver installato l’IDE Arduino, avviarlo e
selezionare un esempio da ROS_LIB come mostrato di seguito:
RosSerial
RosSerial
Avviare, in una schermata di terminale roscore. Verificare in
un’altra schermata la lista dei topic.
RosSerial
RosSerial
RosSerial
Riassumendo…. Si avvia il nodo master con Roscore, si avvia il
programma client rosserial per la gestione/trasmissione dei
messaggi, ed infine si utilizza il comando rostopic pub per
inviare un messaggio di prova.

More Related Content

What's hot

LTSP
LTSPLTSP
Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linux
alberto fiaschi
 
MontelLUG - Conferenze 2007 - Introduzione a RSync
MontelLUG - Conferenze 2007 - Introduzione a RSyncMontelLUG - Conferenze 2007 - Introduzione a RSync
MontelLUG - Conferenze 2007 - Introduzione a RSyncManuel Dalla Lana
 
Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...
Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...
Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...
Aruba S.p.A.
 
Partizionamento_Dualboot_Andreapazo_LD09
Partizionamento_Dualboot_Andreapazo_LD09Partizionamento_Dualboot_Andreapazo_LD09
Partizionamento_Dualboot_Andreapazo_LD09andreapazzo
 
Introduzione alla "Tabella Arcobaleno"
Introduzione alla "Tabella Arcobaleno"Introduzione alla "Tabella Arcobaleno"
Introduzione alla "Tabella Arcobaleno"
Paolo Quartarone
 
TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...
TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...
TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...
gammsystem
 
Open Source Day 2017 - Caso cliente: uno stack cloud completo al servizio del...
Open Source Day 2017 - Caso cliente: uno stack cloud completo al servizio del...Open Source Day 2017 - Caso cliente: uno stack cloud completo al servizio del...
Open Source Day 2017 - Caso cliente: uno stack cloud completo al servizio del...
Par-Tec S.p.A.
 
Java lezione 15
Java lezione 15Java lezione 15
Java lezione 15
Sergio Ronchi
 
PostgreSQL: Prima configurazione
PostgreSQL: Prima configurazionePostgreSQL: Prima configurazione
PostgreSQL: Prima configurazione
Enrico Pirozzi
 
Tom EE appunti devoxx2012
Tom EE   appunti devoxx2012 Tom EE   appunti devoxx2012
Tom EE appunti devoxx2012 Nicola Pedot
 
Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018
Marco Chiesi
 
Richiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatoriRichiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatori
Fulvio Corno
 
Con Aruba, a lezione di cloud #lezione 10 - parte 2: 'Configurazione server d...
Con Aruba, a lezione di cloud #lezione 10 - parte 2: 'Configurazione server d...Con Aruba, a lezione di cloud #lezione 10 - parte 2: 'Configurazione server d...
Con Aruba, a lezione di cloud #lezione 10 - parte 2: 'Configurazione server d...
Aruba S.p.A.
 
PostgreSQL : Tuning
PostgreSQL : TuningPostgreSQL : Tuning
PostgreSQL : Tuning
Enrico Pirozzi
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
Sergio Ronchi
 
Lezione Tre
Lezione TreLezione Tre
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
Vincenzo Paolo Fraddosio
 

What's hot (20)

LTSP
LTSPLTSP
LTSP
 
Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linux
 
MontelLUG - Conferenze 2007 - Introduzione a RSync
MontelLUG - Conferenze 2007 - Introduzione a RSyncMontelLUG - Conferenze 2007 - Introduzione a RSync
MontelLUG - Conferenze 2007 - Introduzione a RSync
 
Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...
Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...
Con Aruba, a lezione di cloud #lezione 10 - parte 1: 'Configurazione server d...
 
Partizionamento_Dualboot_Andreapazo_LD09
Partizionamento_Dualboot_Andreapazo_LD09Partizionamento_Dualboot_Andreapazo_LD09
Partizionamento_Dualboot_Andreapazo_LD09
 
Introduzione alla "Tabella Arcobaleno"
Introduzione alla "Tabella Arcobaleno"Introduzione alla "Tabella Arcobaleno"
Introduzione alla "Tabella Arcobaleno"
 
TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...
TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...
TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...
 
pugBO #10 PSR e Composer
pugBO #10 PSR e ComposerpugBO #10 PSR e Composer
pugBO #10 PSR e Composer
 
Open Source Day 2017 - Caso cliente: uno stack cloud completo al servizio del...
Open Source Day 2017 - Caso cliente: uno stack cloud completo al servizio del...Open Source Day 2017 - Caso cliente: uno stack cloud completo al servizio del...
Open Source Day 2017 - Caso cliente: uno stack cloud completo al servizio del...
 
Java lezione 15
Java lezione 15Java lezione 15
Java lezione 15
 
PostgreSQL: Prima configurazione
PostgreSQL: Prima configurazionePostgreSQL: Prima configurazione
PostgreSQL: Prima configurazione
 
Tom EE appunti devoxx2012
Tom EE   appunti devoxx2012 Tom EE   appunti devoxx2012
Tom EE appunti devoxx2012
 
Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018Chi ha paura della command-line? - WordCamp Roma 2018
Chi ha paura della command-line? - WordCamp Roma 2018
 
Richiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatoriRichiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatori
 
X2 Linux Riassunti
X2 Linux RiassuntiX2 Linux Riassunti
X2 Linux Riassunti
 
Con Aruba, a lezione di cloud #lezione 10 - parte 2: 'Configurazione server d...
Con Aruba, a lezione di cloud #lezione 10 - parte 2: 'Configurazione server d...Con Aruba, a lezione di cloud #lezione 10 - parte 2: 'Configurazione server d...
Con Aruba, a lezione di cloud #lezione 10 - parte 2: 'Configurazione server d...
 
PostgreSQL : Tuning
PostgreSQL : TuningPostgreSQL : Tuning
PostgreSQL : Tuning
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Lezione Tre
Lezione TreLezione Tre
Lezione Tre
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
 

Similar to Introduzione ros

Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
Daniele Mondello
 
Standard Dev Workflow
Standard Dev WorkflowStandard Dev Workflow
Standard Dev Workflow
Stefano Corallo
 
Installazione di Joomla nel cloud di Red Hat
Installazione di Joomla nel cloud di Red HatInstallazione di Joomla nel cloud di Red Hat
Installazione di Joomla nel cloud di Red Hat
Babel
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e Postgresql
Lucio Grenzi
 
Installazione Qt/Qt Quick per target Android
Installazione Qt/Qt Quick  per target AndroidInstallazione Qt/Qt Quick  per target Android
Installazione Qt/Qt Quick per target Android
Paolo Sereno
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
Daniele Mondello
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
Gerardo Di Iorio
 
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
Wellnet srl
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
DrupalDay
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
Tiziano Serritella
 
Node js dev day napoli 2016
Node js dev day napoli 2016Node js dev day napoli 2016
Node js dev day napoli 2016
Michele Nasti
 
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Antonio Musarra
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
Claudio Mignanti
 
Linux Day Torino 2015 applicazioni per iniziare
Linux Day Torino 2015   applicazioni per iniziareLinux Day Torino 2015   applicazioni per iniziare
Linux Day Torino 2015 applicazioni per iniziare
Francesco Tucci
 
Succo di lampone: come ottimizzare JAVA e PHP su un'architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un'architettura Raspberry Pi...Succo di lampone: come ottimizzare JAVA e PHP su un'architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un'architettura Raspberry Pi...
Codemotion
 
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi ClusterCodemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Matteo Baccan
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker
dotnetcode
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e Docker
Luca Congiu
 
Visual basic: odbc su MySql
Visual basic: odbc su MySqlVisual basic: odbc su MySql
Visual basic: odbc su MySql
High Secondary School
 
Php for ASP.NET Developers
Php for ASP.NET DevelopersPhp for ASP.NET Developers
Php for ASP.NET Developers
Emanuele Bartolesi
 

Similar to Introduzione ros (20)

Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
 
Standard Dev Workflow
Standard Dev WorkflowStandard Dev Workflow
Standard Dev Workflow
 
Installazione di Joomla nel cloud di Red Hat
Installazione di Joomla nel cloud di Red HatInstallazione di Joomla nel cloud di Red Hat
Installazione di Joomla nel cloud di Red Hat
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e Postgresql
 
Installazione Qt/Qt Quick per target Android
Installazione Qt/Qt Quick  per target AndroidInstallazione Qt/Qt Quick  per target Android
Installazione Qt/Qt Quick per target Android
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
 
Node js dev day napoli 2016
Node js dev day napoli 2016Node js dev day napoli 2016
Node js dev day napoli 2016
 
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
Come installare TIBCO Jasper Reports Server 7.5 Community Edition su RedHat J...
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
Linux Day Torino 2015 applicazioni per iniziare
Linux Day Torino 2015   applicazioni per iniziareLinux Day Torino 2015   applicazioni per iniziare
Linux Day Torino 2015 applicazioni per iniziare
 
Succo di lampone: come ottimizzare JAVA e PHP su un'architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un'architettura Raspberry Pi...Succo di lampone: come ottimizzare JAVA e PHP su un'architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un'architettura Raspberry Pi...
 
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi ClusterCodemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e Docker
 
Visual basic: odbc su MySql
Visual basic: odbc su MySqlVisual basic: odbc su MySql
Visual basic: odbc su MySql
 
Php for ASP.NET Developers
Php for ASP.NET DevelopersPhp for ASP.NET Developers
Php for ASP.NET Developers
 

More from Marco Buttolo

Web sockets
Web socketsWeb sockets
Web sockets
Marco Buttolo
 
Cognitive services
Cognitive servicesCognitive services
Cognitive services
Marco Buttolo
 
Corso automazione modulo2
Corso automazione modulo2Corso automazione modulo2
Corso automazione modulo2
Marco Buttolo
 
Corso automazione modulo1
Corso automazione modulo1Corso automazione modulo1
Corso automazione modulo1
Marco Buttolo
 
Antropologia
AntropologiaAntropologia
Antropologia
Marco Buttolo
 
Introduzione psicologia
Introduzione psicologiaIntroduzione psicologia
Introduzione psicologia
Marco Buttolo
 
Bisogni educativispeciali
Bisogni educativispecialiBisogni educativispeciali
Bisogni educativispeciali
Marco Buttolo
 
Seminario robotica ia
Seminario robotica iaSeminario robotica ia
Seminario robotica ia
Marco Buttolo
 
Campi elettrici magnetici_devices
Campi elettrici magnetici_devicesCampi elettrici magnetici_devices
Campi elettrici magnetici_devices
Marco Buttolo
 
Galleggiamento corpo
Galleggiamento corpoGalleggiamento corpo
Galleggiamento corpo
Marco Buttolo
 
Elaborazione suono
Elaborazione suonoElaborazione suono
Elaborazione suono
Marco Buttolo
 
Trattamento termico
Trattamento termicoTrattamento termico
Trattamento termico
Marco Buttolo
 
Introduzione ai cmms
Introduzione ai cmmsIntroduzione ai cmms
Introduzione ai cmms
Marco Buttolo
 
Processo fosfatazione
Processo fosfatazioneProcesso fosfatazione
Processo fosfatazione
Marco Buttolo
 
Processo burattatura
Processo burattaturaProcesso burattatura
Processo burattatura
Marco Buttolo
 
Bootstrap
BootstrapBootstrap
Bootstrap
Marco Buttolo
 
Mvvm
MvvmMvvm
Introduzione mongodb
Introduzione mongodbIntroduzione mongodb
Introduzione mongodb
Marco Buttolo
 
Robotica autonoma
Robotica autonomaRobotica autonoma
Robotica autonoma
Marco Buttolo
 
Robotica collaborativa
Robotica collaborativaRobotica collaborativa
Robotica collaborativa
Marco Buttolo
 

More from Marco Buttolo (20)

Web sockets
Web socketsWeb sockets
Web sockets
 
Cognitive services
Cognitive servicesCognitive services
Cognitive services
 
Corso automazione modulo2
Corso automazione modulo2Corso automazione modulo2
Corso automazione modulo2
 
Corso automazione modulo1
Corso automazione modulo1Corso automazione modulo1
Corso automazione modulo1
 
Antropologia
AntropologiaAntropologia
Antropologia
 
Introduzione psicologia
Introduzione psicologiaIntroduzione psicologia
Introduzione psicologia
 
Bisogni educativispeciali
Bisogni educativispecialiBisogni educativispeciali
Bisogni educativispeciali
 
Seminario robotica ia
Seminario robotica iaSeminario robotica ia
Seminario robotica ia
 
Campi elettrici magnetici_devices
Campi elettrici magnetici_devicesCampi elettrici magnetici_devices
Campi elettrici magnetici_devices
 
Galleggiamento corpo
Galleggiamento corpoGalleggiamento corpo
Galleggiamento corpo
 
Elaborazione suono
Elaborazione suonoElaborazione suono
Elaborazione suono
 
Trattamento termico
Trattamento termicoTrattamento termico
Trattamento termico
 
Introduzione ai cmms
Introduzione ai cmmsIntroduzione ai cmms
Introduzione ai cmms
 
Processo fosfatazione
Processo fosfatazioneProcesso fosfatazione
Processo fosfatazione
 
Processo burattatura
Processo burattaturaProcesso burattatura
Processo burattatura
 
Bootstrap
BootstrapBootstrap
Bootstrap
 
Mvvm
MvvmMvvm
Mvvm
 
Introduzione mongodb
Introduzione mongodbIntroduzione mongodb
Introduzione mongodb
 
Robotica autonoma
Robotica autonomaRobotica autonoma
Robotica autonoma
 
Robotica collaborativa
Robotica collaborativaRobotica collaborativa
Robotica collaborativa
 

Introduzione ros

  • 1.
  • 2. Il sistema ROS ROS -> Robotic Operating System. Non è un sistema operativo bensì un framework per lo sviluppo di applicazioni robotiche distribuite. ROS è un prodotto open source rilasciato sotto licenza BSD. ROS contiene tutta una serie di librerie e funzioni che permettono di sviluppare applicativi in Python e C++.
  • 4. Perché il ROS Lo sviluppo di software robusto per il controllo di un robot è un’attività che richiede il contributo di molte competenze diverse (visione artificiale, navigazione, comunicazione, controllo del moto,… solo per citarne alcune), spesso non presenti all’interno di un unico team di lavoro. Pertanto, con il passare degli anni è stato sempre più evidente il bisogno di un ambiente che consentisse lo sviluppo del software in modo collaborativo e facilmente integrabile. Il ROS mette a disposizione alcune funzionalità fondamentali per facilitare la modularità del software sviluppato, con particolare attenzione alle convenzioni e alle funzionalità tipiche dei dispositivi robotici.
  • 5. Installazione del ROS In queste slides verrà installato il ROS Melodic (una delle tante distribuzioni del ROS) su una Raspberry PI3 Model B+ con sistema operativo Ubuntu Mate 18.04. Per prima cosa installare Ubuntu Mate su Raspberry. Successivamente entrare nella voce «SOFTWARE&UPDATES», come mostrato di seguito:
  • 6. Installazione del ROS Selezionare tutti e 4 i repository come mostrato in figura:
  • 7. Installazione del ROS Successivamente entrare nel terminale del sistema operativo come mostrato di seguito:
  • 8. Installazione del ROS Per prima cosa, verificare se python è installato. Basta digitare il comando python (l’interprete) da prompt dei comandi. Se comparirà a video il prompt di Python con il simbolo >>> allora Python è installato. Successivamente, verificare che si abbiano tutti i repository del caso in locale. Per quanto riguarda i repository, in Ubuntu ci sono 4 repository di default: MAIN -> repository per software free ed opensource per sviluppatori Ubuntu UNIVERSE -> per software free ed open source per la community Ubuntu RESTRICTED -> per software sotto licenza e device drivers MULTIVERSE -> tutti i software sotto licenza
  • 9. Installazione del ROS Per aggiungere i repository in locale digitare nel terminale: sudo add-apt-repository main sudo add-apt-repository universe sudo add-apt-repository restricted sudo add-apt-repository multiverse
  • 10. Installazione del ROS Sempre da terminale, eseguire: sudo apt update E successivamente: sudo apt upgrade A questo punto, se tutto è andato a buon fine digitare: sudo apt-get install aptitude
  • 11. Installazione del ROS Digitare il seguente comando per accettare software da packages.ros.org: sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros- latest.list' E successivamente: sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  • 12. Installazione del ROS A questo punto sfruttare il seguente comando per installare il ROS distribuzione Melodic: sudo apt update sudo aptitude install ros-melodic-desktop-full Se tutto è andato a buon fine è possibile passare all’installazione delle librerie ausiliarie molto importanti per il ROS. In particolare, verificare i packages disponibili: apt search ros-melodic
  • 13. Installazione del ROS Successivamente installare le librerie riguardanti ROS e Python: sudo apt install python-rosdep python-rosinstall python- rosinstall-generator python-wstool build-essential A questo punto è possibile inizializzare il rosdep con il seguente comando: sudo rosdep init rosdep update
  • 14. Installazione del ROS Digitare il comando: source /opt/ros/melodic/setup.bash Successivamente, installare tramite «aptitude» il seguente pacchetto: sudo aptitude install ros-melodic-roslaunch
  • 15. Installazione del ROS Nel caso in cui ci dovessero essere dei problemi nell’installazione del ros-melodic legati ad eventuali dipendenze o quant’altro è opportuno disintallare alcune librerie Python e riprovare.
  • 16. Funzionamento del ROS Se c’è qualche errore analizzarlo e farsi aiutare da Internet. Molto probabilmente mancano delle librerie. Può capitare anche un errore del tipo: «compilatore c++ not able to compile simple Program». In questo caso, provare provare a compilare un semplice programmino cpp con g++ e vedere se ci sono errori. Nel caso eseguire i seguenti comandi di aggiornamento: sudo apt-get install build-essential Sudo apt install software-properties-common -y sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y sudo apt-get update sudo apt-get install gcc-snapshot -y
  • 17. Funzionamento del ROS E’ bene precisare che la struttura generale di un’applicazione può essere vista come una rete di nodi, i quali, interconnessi fra loro, scambiano messaggi all’interno di appositi bus ed accedono a servizi messi a disposizioni da altri nodi. Come primo step, una volta installato il ROS, è quello di provare qualche comando e vedere qualche semplice esempio. In particolare, usare il comando roscore, per poter avviare il ROS master node. Una volta avviato con successo è possibile iniziare a lavorare.
  • 20. Funzionamento del ROS La struttura di base del ROS è piuttosto semplice. Essa è una rete di nodi chiamati in modo generico ROSNODE. Il ROSCORE è il nodo Master, ossia il nodo che gestisce le comunicazioni tra i ROSNODE.
  • 21. Funzionamento del ROS Il ROSNODE invece può essere un pacchetto fornito con il ROS o Un pacchetto scritto dal progettista del software in C++ o Python.
  • 22. Funzionamento del ROS La comunicazione tra i vori nodi avviene tramite scambio di messaggi. Quindi, per prima cosa, creare il catkin workspace mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin_init_workspace Ci sono due modi per l'organizzazione e la compilazione del proprio codice in ROS: • Catkin • rosbuild
  • 23. Funzionamento del ROS Catkin di fatto è una raccolta di macro Cmake integrato nel ROS. Cmake è un tool open source progettato per compilare, testare e distribuire i propri pacchetti nel mondo Linux. Mentre il tool make è stato pensato per chi sviluppa in C, Cmake è stato pensato principalmente per chi sviluppa in C++. Il comando catkin_init_worskpace permette di inizializzare l’ambiente di sviluppo creando di fatto un file chiamato
  • 24. Funzionamento del ROS Per prima cosa creiamo da zero un nostro workspace come mostrato di seguito.
  • 25. Funzionamento del ROS Digitare il comando seguente per creare ambiente di sviluppo, debug e compilazione.
  • 26. Funzionamento del ROS Al termine dell’operazione, se tutto è andato a buon fine si avranno le seguenti cartelle: Nella cartella src si scriverà il nostro codice.
  • 27. Funzionamento del ROS Il file denominato CMakeLists.txt viene creato automaticamente. L’ultima istruzione server per fare in modo di attivare sempre il workspace creato quando si apre un nuovo terminale.
  • 28. Funzionamento del ROS CMakeList.txt -> contiene direttive utili al Cmake per capire Cosa deve fare Una volta eseguito il comando catkin_make è possibile visualizzare La struttura della cartella catkin_ws costruita. Ci saranno tre sottocartelle: • Build • Src • Devel
  • 29. Funzionamento del ROS In ROS i vari nodi possono anche non risiedere sullo stesso sistema. I componenti base di una architettura ROS sono: • Package -> sono unità di codice e possono essere di sistema o create dall’utente • Repository -> è una collezione di package che condividono lo stesso VCS • Nodo -> eseguibile che può pubblicare messaggi su un topic od iscriversi ad un topic. • Topic -> contenitore di messaggi pubblicati da uno o più nodi.
  • 30. Funzionamento del ROS • Messaggi -> tipo di dato usato dai nodi per scambiarsi info. • Servizi -> messaggi di tipo client/server che si aspettano una risposta dopo un dato inviato.
  • 31. Funzionamento del ROS A questo punto, si può provare a creare un package chiamato, per Comodità, MyFirstPackage nel seguente modo: catkin_create_pkg MyFirstPackage std_msgs rospy roscpp Il package creato (comando da lanciare dalla cartella SRC) del catkin workspace dipende da rospy, roscpp e std_msgs. roscpp: pacchetto di riferimento che estende il supporto alla programmazione C++; rospy: analogo del precedente per Python; std_msgs: pacchetto di comunicazione.
  • 32. Ricapitolando… Roscore -> servizio che gestisce la comunicazione tra i vari nodi. Rosmaster -> è il ROS parameters server Importante: Se si considera per esempio un rover (robot mobile) e si desidera che i servomotori dialoghino con i sensori di distanza Allora i servomotori avranno uno script che li gestisce (è un nodo ROS) ed i sensori un altro script (un altro nodoROS). Entrambi i nodi ROS dovranno comunicare con Il nodo Master.
  • 33. Creazione package Come mostrato di seguito vediamo come creare un nuovo package
  • 34. Creazione package Tramite il comando catkin_create_pkg nome_pacchetto è possibile creare un package con le dipendenze specificate: • roscpp: pacchetto di riferimento che estende il supporto alla programmazione C++; • rospy: analogo del precedente per Python; • std_msgs: pacchetto di comunicazione
  • 35. Creazione package Tramite il comando catkin_create_pkg nome_pacchetto è possibile creare un package con le dipendenze specificate: • roscpp: pacchetto di riferimento che estende il supporto alla programmazione C++; • rospy: analogo del precedente per Python; • std_msgs: pacchetto di comunicazione A questo punto ridigitare ancora catkin_make come viene mostrato nella successiva slide:
  • 37. Creazione package I nodi, di fatto, sono dei programmi eseguiti all’interno dei nostri package. Vediamo come creare un nodo in python. Per prima cosa, i pacchetti sono l'unità principale per l'organizzazione del software in ROS. Un pacchetto può contenere processi runtime ROS ( nodi ), una libreria dipendente da ROS, set di dati, file di configurazione o qualsiasi altra cosa che sia organizzata in modo utile insieme.
  • 38. Creazione package Il Computation Graph è il grafico che descrive la rete peer-to-peer dei processi ROS che elaborano i dati insieme. Tale rete è composta da nodi ossia processi che eseguono calcoli. Ad esempio, un nodo controlla un sensore di distanza, un nodo controlla i motori delle ruote, eccetera. Un nodo ROS viene scritto con l'uso di una libreria particolare come per esempio rospy o roscpp. I nodi comunicano tramite scambio di messaggi. Un messaggio è semplicemente una struttura dati. Sono supportati i tipi primitivi standard come, per esempio il tipo intero, booleano.
  • 39. Creazione package Solitamente un messaggio viene pubblicato su un determinato topic. Un nodo interessato a un certo tipo di dati si iscriverà al topic appropriato. L'idea è di separare la produzione di informazioni dal suo consumo. il modello di pubblicazione / sottoscrizione è un paradigma di comunicazione molto. Quindi le tipologie di comunicazione sono: • Publish/subscribe: modalità di comunicazione asincrona in broadcasting • Service: modalità di comunicazione sincrona, secondo la semantica request / reply.
  • 40. Creazione package • Publish / subscribe: Scrittura di un messaggio su di un topic messo a disposizione dal roscore. Tutti i nodi che desiderano ricevere il messaggio possono richiederlo al roscore. • Service: Un nodo invia una richiesta a tutti i nodi in grado di soddisfarla. Da questi nodi riceverà una risposta.
  • 41. Creazione package • La creazione di un package avviene con il comando seguente.
  • 42. Creazione package • Eseguire catkin_make per compilare il tutto. Una volta compilato, se non sono sorti degli errori è possibile avviare il package appena creato. • Ogni directory di un pacchetto possiede i seguenti files:
  • 43. Creazione package roslaunch è uno strumento importante che gestisce l'avvio e l'arresto dei nodi ROS. Prende uno o più file "* .launch" come argomenti. Quindi, roslaunch utilizza i cosiddetti “launch file” che sono file XML contenenti la lista dei nodi da lanciare con i rispettivi parametri. Editare nella cartella SRC il file chiamato test.py nel seguente modo:
  • 44. Creazione package Creare una cartella chiamata «launch» come mostrato di seguito: • All’interno della cartella appena creata, creare un file chiamato test.launch
  • 45. Creazione package Esecuzione package: Se si desidera creare un topic e pubblicarlo si usa il seguente comando:
  • 46. RosSerial RosSerial è un pacchetto che permette di utilizzare ROS su Arduino. La slide successiva mostra come installare ROSSerial sfruttando la versione già installata del ROS (per esempio la distribuzione Melodic).
  • 48. RosSerial Seguire le istruzioni di installazione riportate sul sito seguente: http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup#Installing_the_Software Successivamente, dopo aver installato l’IDE Arduino, avviarlo e selezionare un esempio da ROS_LIB come mostrato di seguito:
  • 50. RosSerial Avviare, in una schermata di terminale roscore. Verificare in un’altra schermata la lista dei topic.
  • 53. RosSerial Riassumendo…. Si avvia il nodo master con Roscore, si avvia il programma client rosserial per la gestione/trasmissione dei messaggi, ed infine si utilizza il comando rostopic pub per inviare un messaggio di prova.