Guida all’utilizzo di Player e
Stage
Dott.ssa Mariacarla Staffa
Dipartimento di Informatica e Sistemistica
University of Naples “Federico II”
Naples, Italy
[email protected]
Sommario
Introduzione
Scaricare Player/Stage
Installazione Player/Stage
Setting
Creazione del file di Configurazione
Creazione del file .world
Scrittura del Codice Client e
compilazione
Testing
Mariacarla Staffa
Il Progetto Player/Stage
Player/Stage/Gazebo
Il modello Client/Server
[email protected]
3
Introduzione
Setting
Testing
Il Progetto Player/Stage
Player/Stage/Gazebo
Il modello Client/Server
Player/Stage è un framework open source per la robotica scritto in C/C++
e sviluppato principalmente dallo Stanford AI Lab, dall’USC Robotics
Research Lab e dal Simon Fraser Autonomy Lab con il contributo della
comunità open source.
Il suo obiettivo è quello di sostenere la ricerca nell’ambito di sistemi
robotici e/o sistemi di sensori.
Player è probabilmente il server di controllo per robot maggiormente
utilizzato nel mondo e si sta diffondendo sempre piu’ anche l’utilizzo
delle sue interfacce di simulazione Stage (2D) e Gazebo (3D).
E’ possibile scaricarlo gratuitamente e consultare la documentazione dal/sul sito
ufficiale di Player/Stage: http://playerstage.sourceforge.net/
Mariacarla Staffa
[email protected]
4
Introduzione
Il Progetto Player/Stage
Setting
Testing
Player/Stage/Gazebo
Il modello Client/Server
Player: fornisce un’interfaccia estremamente semplice
verso i sensori e gli attuatori del robot.
Stage: è in grado di simulare un ambiente bidimensionale
(bitmap) in cui si muovono e agiscono popolazioni di robot,
con i loro particolari sensori e attuatori.
Gazebo: è una interfaccia grafica di simulazione simile a
Stage, ma in 3d.
Mariacarla Staffa
[email protected]
5
Introduzione
Setting
Testing
Il Progetto Player/Stage
Player/Stage/Gazebo
Il modello Client/Server
Sistema
Robotico
Sensori
Attuatori
Mariacarla Staffa
[email protected]
Server
Client
Sistema di Controllo
6
Introduzione
Setting
Testing
Il Progetto Player/Stage
Player/Stage/Gazebo
Il modello Client/Server
Player Server
Player
Client
Library
C/C++
C#
Java
Tcl
Python
Lisp
Sistema di Controllo
Mariacarla Staffa
[email protected]
7
Introduzione
Setting
Testing
Il Progetto Player/Stage
Player/Stage/Gazebo
Il modello Client/Server
Player
Client
Library
C/C++
C#
Java
Tcl
Python
Lisp
Mariacarla Staffa
[email protected]
8
Introduzione
Setting
Testing
Scaricare Player/Stage
Installazione Player/Stage
Il download di Player /Stage e Gazebo può essere eseguito dal sito:
http://sourceforge.net/project/showfiles.php?group_id=42445
Prima di procedere all’installazione occorre preparare il sistema in modo da
non avere spiacevoli errori in fase di compilazione (devono cioè essere
installati alcuni pacchetti e alcune librerie  utilizzare: Synaptic )
Per i dettagli consultare guida all’installazione che sarà fornita col
materiale del corso.
Si consiglia comunque di considerare come punto di riferimento:
• il sito: http://playerstage.sourceforge.net/
• e la relativa mailing list: http://sourceforge.net/mail/?group_id=42445
n.b.: E’ necessario avere i diritti di amministratore per poter procedere
con l’installazione
Mariacarla Staffa
[email protected]
9
Introduzione
Scaricare Player/Stage
Setting
Installazione Player/Stage
Testing
Una volta eseguite le operazioni preliminari è possibile installare i pacchetti
relativi rispettivamente a Player Stage e Gazebo , attraverso la seguente
sequenza di comandi:
1. Decomprimere il file scaricato eseguendo da terminale:
$sudo tar xjvf player-<version>.tar.bz2
2. Spostarsi nella directory sorgente di Player:
$cd player-<version>
3. Configurare attraverso il comando
$sudo ./configure
4. Compilare attraverso il comando
$sudo make
5. Installare Player attraverso il comando
$sudo make install
Mariacarla Staffa
[email protected]
10
Introduzione
Setting
Testing
Creazione del file di Configurazione
Creazione del file .world
Scrittura del Codice Client e compilazione
Per far invocare un server player bisogna:
1. aprire un terminale
2. posizionarsi nella cartella contenente il file di configurazione
3. e digitare il comando:
$ player [options] <configfile>
Dove il <configfile> è un file di testo che descrive l’insieme dei dispositivi che si vogliono
istanziare.
Mariacarla Staffa
[email protected]
11
Introduzione
Setting
Testing
Creazione del file di Configurazione
Creazione del file .world
Scrittura del Codice Client e compilazione
Per esempio, se si vuole creare un
interfaccia per un sistema robotico
caratterizzato da una piattaforma
“Pioneer-ActivMedia” e un laser “range
finder-SICKLMS200,” la struttura del file
di configurazione sarà la seguente:
Questo file istruisce il server a creare due dispositivi:
•Un driver Pioneer P2OS, che supporta l’interfaccia position.
•Un driver SickLMS200 che supporta un’interfaccia laser.
Il programma Client può connettersi così a questi dispositivi, leggere i dati,
inviare comandi e così via.
Mariacarla Staffa
[email protected]
12
Introduzione
Setting
Testing
Creazione del file di Configurazione
Creazione del file .world
Scrittura del Codice Client e compilazione
Mariacarla Staffa
[email protected]
dispositivo
Interfaccia +
driver
13
Introduzione
Setting
Creazione del file di Configurazione
Testing
Scrittura del Codice Client e compilazione
Creazione del file .world
reale
Player Server
<.cfg>
simulazione
Player Client
(user program)
<.cfg>
<.world>
Environment description
?
Mariacarla Staffa
[email protected]
14
Introduzione
Setting
Creazione del file di Configurazione
Testing
Scrittura del Codice Client e compilazione
Creazione del file .world
Caratteristiche generali dell’ambiente
<.world>
Insieme di “modelli”
predefiniti:
Blobfinder, bumper ,
gripper, position,
laser, Ptz, ranger,
speech, ecc.
creati dall’utente:
attraverso un
modello di base
chiamato “Model”
Position
size
velocity
color
visibility
etc.
La parola chiave “define” viene utilizzata per creare
un nuovo modello a partire da uno già esistente”
Mariacarla Staffa
[email protected]
15
Introduzione
Setting
Creazione del file di Configurazione
Testing
Scrittura del Codice Client e compilazione
Creazione del file .world
Inclusione della libreria che contiene le
definizioni relative al robot pioneer
include "pioneer.inc“
include "map.inc“
size [20 20]
resolution 0.01
gui_interval 10
window(
Grandezza del mondo in metri
Risoluzione del modello
size [ 800.000 800.000 ]
center [ 0.0 0.0]
scale 0.028 #size of each bitmap pixel in metres
)
map (
Definizione della mappa
che funge da sfondo
...
Mariacarla Staffa
Velocità di aggiornamento dello
schermo di simulazione in ms
Configurazione della
finestra di interfaccia
bitmap "lab.png"
size [20 20]
name "lab"
)
Inclusione della libreria
che contiene le direttive
per utilizzare immagini
esterne come sfondo
[email protected]
16
Introduzione
Setting
Creazione del file di Configurazione
Testing
Scrittura del Codice Client e compilazione
Creazione del file .world
...
define pioneerblob pioneer2dx (
Estenzione del modello di base
definito dal device pioneer2dx
conuna camera blobfinder, che
riconosce due colori
ptz( blobfinder(
channel_count 2
channels ["red" "green"]) )
)
pioneerblob (
Definizione del robot:
(possibili campi della struttura:
name - color - size - pose - ecc.)
color "blue"
name "Robot"
pose [-4 7 0]
)
define puck model (
size [ 0.40 0.40]
blob_return 1
obstacle_return 1
)
puck( pose [-8 -2 0 ] color "red" )
puck( pose [-7 -7.5 0 ] color "green" )
Mariacarla Staffa
[email protected]
Definizione di un modello di
oggetto chiamato puck:
(possibili campi della struttura:
name - shape - color - size - pose
- obstacle return - gripper return ecc.)
Istanziazione di due puck di colori
diversi e in diverse posizioni
17
Introduzione
Setting
Creazione del file di Configurazione
Testing
Scrittura del Codice Client e compilazione
Creazione del file .world
Visualizzare componenti
statiche (griglie di
riferimento, mappa, oggetti)
e dinamiche (trace del robot
velocità, posizione, ecc.)
Attivare/disattivare
la simulazione
help
Settare preferenza
di simulazione
(velocità, passi di
simulazione,ecc.)
<.cfg>
$ player <.cfg>
Salvare l’ambiente,
resettarlo o
acquisire screenshot
dello stesso a diversi
<.world>
intervalli di tempo
Mariacarla Staffa
[email protected]
18
Introduzione
Setting
Creazione del file di Configurazione
Creazione del file .world
Testing
Scrittura del Codice Client e compilazione
reale
Player Server
<.cfg>
simulazione
Include la libreria “player.h”
contenente i prototipi delle funzione
e i tipi di player
<.cfg>
<.world>
#include <stdio.h>
#include "playerc.h"
Definisce un particolare proxy
per il programma client
int main(int argc, const char **argv){
playerc_client_t *client;
playerc_position_t *position;
...
Mariacarla Staffa
Player Client
(user program)
[email protected]
Definisce un dispositivo di tipo
position
19
Introduzione
Setting
Creazione del file di Configurazione
Creazione del file .world
Testing
Scrittura del Codice Client e compilazione
Si procede secondo la seguente sequenza di passi:
1) Creazione del client e connessione:
client = playerc_client_create(NULL, "localhost", 6665);
playerc_client_connect(client);
La funzione create crea un nuovo Client proxy e restituisce un puntatore che può essere
usato nelle future chiamate di funzione (localhost può essere rimpiazzato con
l’hostname di rete del robot).
La funzione connect notifica al server player che un nuovo Client desidera ricevere dati.
Mariacarla Staffa
[email protected]
20
Introduzione
Setting
Creazione del file di Configurazione
Creazione del file .world
Testing
Scrittura del Codice Client e compilazione
2) Creazione e connessione del dispositivo proxy:
position = playerc_position_create(client, 0);
playerc_position_subscribe(position, PLAYER_ALL_MODE);
La funzione create crea un nuovo dispositivo proxy e restituisce un puntatore attraverso
il quale il proxy può essere richiamato in altre funzioni. La funzione subscribe notifica al
server player che un nuovo Client sta utilizzando il dispositivo position, e che il client si
aspetta di poter sia inviare comandi che ricevere dati (PLAYER_MODE_ALL).
3) Configurazione del dispositivo e invio dei comandi:
playerc_position_enable(position, 1);
playerc_position_set_speed(position, 0, 0, 0.1);
La funzione enable invia una richiesta di configurazione al server, cambiando lo stato del
motore del robot da off a on, consentendo in tal modo al robot di muoversi. La funzione
setspeed invia una nuova velocità al motore.
Mariacarla Staffa
[email protected]
21
Introduzione
Setting
Creazione del file di Configurazione
Creazione del file .world
Testing
Scrittura del Codice Client e compilazione
4) Lettura dei dati dal dispositivo:
playerc_client_read(client);
printf("position : %f %f %f\n", position->px, ... );
La funzione di lettura read legge blocchi di dati provenienti da uno dei dispositivi
sottoscritti o dal server stesso (che invia regolarmente dei messaggi di
sincronizzazione a tutti i suoi client). Questa funzione, in particolare, legge i dati in
entrata e aggiorna automaticamente gli elementi nell’appropriato dispositivo proxy.
La funzione inoltre restituisce un puntatore al proxy aggiornato, così che il
programma utente può, se desidera, attivare gli eventi appropriati a seconda dei dati
ricevuti.
Mariacarla Staffa
[email protected]
22
Introduzione
Setting
Creazione del file di Configurazione
Creazione del file .world
Testing
Scrittura del Codice Client e compilazione
5) Distruzione del proxy:
playerc_position_unsubscribe(position);
playerc_position_destroy(position);
La funzione di unsubscribe comunica al server Player che il client non utilizzerà più
quel dispositivo. La funzione destroy, allora, libera la memoria associata a quel
dispositivo proxy e invalida quindi il puntatore al device che da quel momento in poi
non può più essere utilizzato.
6) Disconnessione e distruzione del client proxy:
playerc_client_disconnect(client);
playerc_client_destroy(client);
La funzione disconnect dice al server che il client è in fase di arresto e la funzione
destroy libera la memoria associata al client.
Mariacarla Staffa
[email protected]
23
Introduzione
Setting
Creazione del file di Configurazione
Creazione del file .world
Testing
Scrittura del Codice Client e compilazione
$ gcc -o nomeclient `pkg-config --cflags playerc` nomeclient.c `pkgconfig --libs playerc`
$ ./nomeclient
Player
Client
User
Program
Mariacarla Staffa
[email protected]
24
Riferimenti
http://playerstage.sourceforge.net/
http://sourceforge.net/mail/?group_id=42445
http://www.activrobots.com/
manuale utente per l’installazione di Player e Stage
Mariacarla Staffa
[email protected]
25
Scarica

ppt