• Non ci sono risultati.

Robot Operating System

N/A
N/A
Protected

Academic year: 2021

Condividi "Robot Operating System"

Copied!
54
0
0

Testo completo

(1)

“Robot Operating System”

R.O.S.

Robot Operating System

A cura di:

Jonathan Cacace

(2)

“Robot Operating System”

Contatti

Jonathan Cacace @ Prisma lab, DIETI.

jonathan.cacace@gmail.com wpage.unina.it/jonathan.cacace

Link alle slide: wpage.unina.it/jonathan.cacace/resources

(3)

“Robot Operating System”

Outline

- Parte 1:

- Introduzione - Architettura

- Infrastruttura di cumunicazione

- Parte 2:

- Comandi base ROS - Tutorial

- Tipi di file ROS - Riferimenti

(4)

“Robot Operating System”

Introduzione

ROS: meta sistema operativo per la programmazione dei robot .

“ROS: è un framework di programmazione che mette a disposizione strumenti e librerie per aiutare gli sviluppatori software nello sviluppo di

applicazioni robotiche.”

[ www.ros.org ]

Il framework offre strumenti e librerie per ottenere, compilare ed eseguire

codice su diversi «computer»

(5)

“Robot Operating System”

Introduzione

Sviluppato inizialmente per soddisfare le necessità di programmazione della piattaforma PR2 da «Willow

Garage» (già strumenti come openCv)

(6)

“Robot Operating System”

Introduzione

(7)

“Robot Operating System”

Introduzione

Non è necessario conoscere l’hardware per cui si sta sviluppando il codice, trattando questo come una black box.

(8)

“Robot Operating System”

Introduzione

Semplifica la fase di progettazione/scrittura del codice, fornendo gli strumenti per impostare facilmente un codice modulare.

(9)

“Robot Operating System”

Introduzione

ROS è ormai uno standard nello sviluppo di applicazioni robotiche nell’ambito della ricerca. Questo ha permesso la nascita di una

community molto seguita:

Repository, Wiki, blogs...

(10)

“Robot Operating System”

Feature

ROS Feature:

- Linguaggi di programmazione: C++, Python.

- Insieme di pacchetti software già testati e funzionanti.

- Insieme di strumenti per la gestione e la compilazione del codice.

- Protocolli di comunicazione sincroni/asincroni per lo scambio di informazioni tra blocchi di codice separati.

- Software open source, rilasciato sotto licenza BSD.

(11)

“Robot Operating System”

Architettura

Main Librerie Applicazioni

Livello trasparente all’utente – funzionalità principali del framwork (strumenti di compilazione, ROS API, infrastruttura di

comunicazione,…).

Librerie per l’utilizzo di sistemi hardware esterni (kinect) o software standalone (pcl,

openCV, software di simulazione…).

Moduli software sviluppati dagli utenti.

ROS è disponibile per diverse distribuzioni Linux (consigliato Ubuntu), disponibile anche per OsX e Windows (Sperimentali).

(12)

“Robot Operating System”

Architettura

ROS File system:

- Pacchetti: sono l’unità principale per orgranizzazione del software in ros. Un «pacchetto» è rappresentato dal programma scritto dall’utente ed ha un suo scopo. E’ diviso in nodi.

- Manifest.

- Message type.

- Service type.

- File di launch.

(13)

“Robot Operating System”

Architettura

rosnode roscore

Gestisce l’esecuzione parallela di tutti i nodi mandati in esecuzione e ne permette la

comunicazione

Codice sviluppato dall’utente o dalla community.

ROS File system: rosnode

roscore

rosnode

rosnode

(14)

“Robot Operating System”

Filosofia

rosnode

Input message

Output message

(15)

“Robot Operating System”

Filosofia

rosnode

Un nodo identifica un particolare modulo del sistema, la possibilità di gestire l’interoperabilità tra i vari nodi attraverso dei semplici messaggi

permette la creazione di un codice con basso accoppiamento.

Modularità:

(16)

“Robot Operating System”

Filosofia

Permettono l’astrazione di dispositivi hardware a basso livello:

• Joystick;

• Kinect – (rgbd camera)

• GPS;

• Controller;

• Laser e sonar;

Popular package:

• Simulazione: Simulatori di ambienti 2D/3D (Stage / Gazebo).

• Navigazione: Odometria, flusso sensoriale, pose estimation…

• SLAM: Simultanea localizzazione e mapping.

• Percezione: point cloud processing (PCL), openCV…

(17)

“Robot Operating System”

Filosofia

We don’t reinvent the wheel... [ Ros eng ]

- OpenCV - computer vision

- Eigen - matrix algebra

- ODE+Gazebo - simulazione

- KDL - cinematica e dinamica

- TREX - pianificazione di alto livello - OpenNi - gestione dispositivi rgb-d -

- -

(18)

“Robot Operating System”

Filosofia

Codice Utente

Modulo ROS

Data_request()

Data_sensor

Trasparenza

Data sensor

ROS mette a disposizione un vasto numero di pacchetti software già funzionanti.

(Es. Utilizzo del pacchetto ros openni per la gestione di dispositivi rgb-d)

(19)

“Robot Operating System”

Comunicazione

ROS permette la comunicazione tra diversi pacchetti/nodi attraverso 3 protocolli di comunicazione:

- Publish / Subscribe: protocollo asincrono

- Service: protocollo sincrono

- Client / Server: protocollo sincrono

(20)

“Robot Operating System”

Comunicazione

ROS permette la comunicazione tra diversi pacchetti/nodi attraverso 3 protocolli di comunicazione:

- Publish / Subscribe: protocollo asincrono

Comunicazione 1…n tramite la “pubblicazione” di messaggi su entità chiamate TOPIC.

(21)

“Robot Operating System”

Comunicazione

- Publish / Subscribe: protocollo asincrono

1 nodo publisher pubblica frequentemente un messaggio

N nodi subscriber leggono alla stessa frequenza del publisher il messaggio pubblicato

(22)

“Robot Operating System”

Comunicazione

Service: Un nodo invia una richiesta a tutti i nodi in grado di soddisfarla. Da questi nodi

ROS permette la comunicazione tra diversi pacchetti/nodi attraverso 3 protocolli di comunicazione:

- Service: protocollo sincrono

rosnode rosnode

Server Client

Richiesta(msg req)

Risposta(msg res)

(23)

“Robot Operating System”

Comunicazione

ROS permette la comunicazione tra diversi pacchetti/nodi attraverso 3 protocolli di comunicazione:

- Client / Server: protocollo sincrono

(24)

“Robot Operating System”

Perchè ROS

(25)

“Robot Operating System”

Perchè NON ROS

(26)

“Robot Operating System”

Perchè NON ROS

In molti problemi nel campo della robotica è necessario tenere conto dei tempi di esecuzione del codice di controllo del robot:

Es. Loop di controllo a determinate velocità;

Invio di traiettorie generate a determinati tempi di campionamento.

In alcuni casi è necessario utilizzare sistemi real-time per il controllo del robot, che assicurano la chiusura di loop di controllo in tempi noti e rispettati. ROS non lascia all’utente nessuna decisione/sicurezza sull’esecuzione dei nodi attivi.

In questi casi è quindi prefebile utilizzare soluzioni miste, creando una propria politica di comunicazione tra i nodi ROS ed il codice di controllo.

(27)

“Robot Operating System”

Messaggi ROS

In ROS i messaggi sono utilizzati sia per richiedere servizi che per permettere la comunicazione tra i vari nodi.

Un messaggio non è altro che una struttura dati. Le librerie standardo

mattono a disposizione i tipi primitivi standard (int, double, float…), gli array dei tipi primitivi, ed altre strutture più complesse.

ROS mette già a disposizione una serie di messaggi predefiniti, che permettono di gestire la maggior parte informazioni in ambito robotico

(informazioni riguardo la posa del robot, gli output dei sensori, il controllo dei giunti di un robot,…). E’ sempre possibile definire un messaggio ad hoc per le proprie esigenze.

(28)

“Robot Operating System”

Messaggi ROS

Es.

Creare un messaggio contenente un dato di tipo float:

std_msgs/Float32 Message;

Message.data = 10;

Pubblicare il messaggio creato:

Publisher.publish(Message)

Lista dei messaggi standard di ros:

http://ros.org/wiki/std_msgs

(29)

“Robot Operating System”

Messaggi ROS

geometry_msgs/PoseStamped:

descrive la posizione di un oggetto nelle componenti (x,y,z) con quattro gradi di orientazione.

(30)

“Robot Operating System”

Messaggi ROS

sensor_msgs/Image: contiene i dati immagine. Il campo data del

messaggio trasmette la matrice che contiene i valori dei pixel di un immagine.

(31)

“Robot Operating System”

Service ROS

Per invocare la richiesta di un «servizio», è necessario creare un messaggio in cui viaggeranno sia gli input che gli output che ci si aspetta dall’esecuzione del

servizio.

AddTwoInts.srv: (Somma di due interi)

AddTwoInts.h è la definizione del messaggio utilizzato nel service. Il path di questo tipo di messaggi è package/srv/

(32)

“Robot Operating System”

Action msgs

Per eseguire una routine con protocollo client / server, è necessario creare un messaggio .msg in cui vengono specificati 3 campi:

- Goal

- Feedback - Result

(33)

“Robot Operating System”

Ros callback

Una callback non è altro che metodo, sempre in attesi di un

«determinato» tipo di messaggio pubblicato su un topic. Questo metodo è gestito parallelamente al resto del codice scritto

dall’utente e viene invocato su evento. Ogni qual volta viene scritto qualcosa sul topic, la callback viene invocata.

L’esecuzione parallela dei nodi che compongono ogni pacchetto ros è resa possibile dal concetto di callback:

(34)

“Robot Operating System”

Comandi base

- rospack: permette di ricevere informazioni sui package;

- roscd: apre la directory contenente i package;

- roscreate-pkg: crea un package;

- roscore: manda in esecuzione il roscore;

- rosnode: fornisce informazioni sui nodi in esecuzione;

- rosrun: manda in esecuzione un nodo;

- rostopic: fornisce informazioni sui topic attivi;

- rosservice: fornisce informazioni sui service attivi.

(35)

“Robot Operating System”

Comandi base

- roscd: apre la directory contenente i package;

- roscd [nome_package]: es. roscd rviz - roscreate-pkg: crea un package;

- roscreate-pkg [nome_package]: es. roscreate-pkg new_pkg - rosrun: manda in esecuzione un nodo;

- rosrun [nome_pkg] [nome_nodo]: es. rosrun rviz rviz

(36)

“Robot Operating System”

Comandi base

rostopic: permette di visualizzare informazioni sui topic attivi.

rostopic list: restituisce la lista dei topic attivi;

rostopic info [nome_topic]: restituisce il tipo di messaggio pubblicato sul topic;

rostopic hz [nome_topic]: restituisce la frequenza con cui vengono pubblicati i messaggi sul topic;

rostopic echo [nome_topic]: mostra i messaggi inviati al

topic.

(37)

“Robot Operating System”

Tutorial: file system

Struttura tipica della directory di un nodo ros:

/$ROS_WORKSPACE/nodo:

/src < codice sorgente

/launch

/srv < [ service ]

/msg < [ messaggi ]

manifest.xml < definizione delle dipendenze

CMakeLists.txt < istruzioni di compilazione

(38)

“Robot Operating System”

Tutorial: compilazione nodo

CMakeList:

(39)

“Robot Operating System”

Tutorial: compilazione nodo

Per compilare il pacchetto creato, spostarsi all’interno della direcotry del pacchetto (è possibile utilizzare roscd) ed esgeuire il comando:

$ rosmake

(40)

“Robot Operating System”

Tutorial: creazione di un nodo

ros.h: librerie per l’utilizzo delle funzioni di ros.

Main.h:

(41)

“Robot Operating System”

Tutorial: creazione di un nodo

Main.cpp

ros::init presentazione del nodo al roscore.

(42)

“Robot Operating System”

Tutorial: creazione di un nodo

rosnode:

Dopo aver compilato il pacchetto (senza errori!!) è possibile mandare il nodo in esecuzione:

Prima di tutto è necessario avviare il core:

$ roscore

In un altro terminale invece è necessario avviare il nodo:

$ rosrun [nome package] [nome nodo]

Es.

$ rosrun tutorial main

(43)

“Robot Operating System”

Tutorial: creazione di un publisher

Creazione di un nodo ros che pubblica continuamente su un Topic con nome

“publisher” dei dati di tipo Std_msgs::String.

rosnode publisher

Topic Std_msgs::String

(44)

“Robot Operating System”

Tutorial: creazione di un publisher

Pubslisher.h:

NodeHandle: oggetto per l’accesso agli attributi e ai metodi per la gestione del nodo.

Publisher: oggetto per l’accesso ai metodi di pubblicazione.

(45)

“Robot Operating System”

Tutorial: creazione di un publisher

Pubslisher.cpp:

advertise<Message Type>: Creazione di un topic su cui possono essere scritti messaggi di tipo «Message Type»

publish: Metodo per pubblicare su topic.

(46)

“Robot Operating System”

Tutorial: creazione di un publisher

Dopo aver creato e mandato in esecuzione (come visto in precedenza) un nodo che pubblica su un topic, è possibile monitorare lo stato di quel topic attraverso il comando rostopic:

$ rostopic list: Lista dei topic creati sul rosnode

$ rostopic info “Nome Topic”: Informazioni sul topic (tipi di dati pubblicabili);

$ rostopic echo “Nome Topic”: Monitoring dell’attività di publishing sul topic .

rostopic echo /publisher:

(47)

“Robot Operating System”

Tutorial: creazione di un publisher

Subscriber.h:

sub: oggetto per l’accesso ai metodi per la gestione del nodo in sottoscrizione.

Dichiarazione di un callback

(48)

“Robot Operating System”

Tutorial: creazione di un publisher

Subscriber.cpp:

subscribe: Metodo per la sottoscrizione ad un topic

(49)

“Robot Operating System”

Tutorial: creazione di un publisher

Subscriber.cpp:

subscribe: Metodo per la sottoscrizione ad un topic

spin: Permette alle callback di restare in vita anche dopo la terminazione del «codice»

(50)

“Robot Operating System”

Tutorial: creazione di un publisher

(51)

“Robot Operating System”

Manifest

Il file manifest.xml è un file che contiene tutte le dipendenze del nodo, ovvero tutti gli altri pacchetti ros da cui dipende. E’ necessario inserire qui la dipendenza prima di compilare il nodo:

Dopo aver creato un nuovo nodo ad esempio è necessario aggiungere la riga:

<depend package=‘’roscpp’’ />

(52)

“Robot Operating System”

roslaunch

Per eseguire un nodo è possibile utilizzare il comando: rosrun.

Tuttavia se è necessario eseguire un maggior numero di nodi, è possibile utilizzare il comando roslaunch:

roslaunch [ nome_pkg ] file.launch

(53)

“Robot Operating System”

RosBag

Es.

$ rosbag record [nome_topic] [Tipo di messaggio]

$ rosbag –o bagfile record /image sensor_msgs/Image

$ rosbag play bagfile

Un bag file è un formato in ROS per conservare il contenuto di messaggi attivi sui topic. Queso strumento può essere di aiuto al programmatore sia per

effettuare debug sui nodi da esso implementati (eseguendo un test sulla piattaforma reale e controllando successivamente i dati dell’esperimento) sia per sviluppare il proprio codice senza dover eseguire tutti i nodi

dell’architettura.

(54)

“Robot Operating System”

Referenze

http://www.ros.org/wiki/

http://www.ros.org/wiki/ROS/Installation

http://www.ros.org/wiki/ROS/Tutorials

Riferimenti

Documenti correlati

Die Aufmerksamkeit der Herrscherin fanden nahezu alle Empfängergruppen; allerdings wurde immer wieder eine gewisse Präferenz für Empfänger aus dem süddeutschen Raum konstatiert,

He is using Microsoft’s browser She plays with Internet

He is using Microsoft’s browser She plays with Internet

He is using Microsoft’s browser He is a fan of Internet Explorer.. Another

Graph analysis allows to find similarities between texts and entities even if they do not match. syntactically (so at

A sort of semantic dimension: Entities can be related within the graph-KB The better/larger is graph-KB, the more efective is the annotation. State-of-the-art

• we propose a class of relational topic models, named Constrained Relational Topic Model (CRTM), that is a semi- supervised extension of RTM that includes not only

In particular, we propose an approach to make multiple topic ontologies to support the semantic navigation available to users, exploiting semantic relations as explicit links