Il SIMULATORE CIRCUITALE SPICE DIEE A.A. 2002-2003 Ing. Maria Katiuscia Zedda.
CORSO SISTEMI DI GOVERNO DEI ROBOT Lezione n.7 Un simulatore
-
Upload
britanni-lowe -
Category
Documents
-
view
40 -
download
2
description
Transcript of CORSO SISTEMI DI GOVERNO DEI ROBOT Lezione n.7 Un simulatore
Guida all’utilizzo di Player e Guida all’utilizzo di Player e StageStage
Dott.ssa Mariacarla Staffa
Dipartimento di Informatica e SistemisticaUniversity of Naples “Federico II”
Naples, [email protected]
SommarioSommario
Mariacarla Staffa [email protected] 3
Il Progetto Player/StageIl Progetto Player/Stage Player/Stage/GazeboPlayer/Stage/Gazebo Il modello Client/ServerIl modello Client/Server
Scaricare Player/StageScaricare Player/Stage Installazione Player/StageInstallazione Player/Stage
Creazione del file di ConfigurazioneCreazione del file di Configurazione Creazione del file .worldCreazione del file .world Scrittura del Codice Client e Scrittura del Codice Client e
compilazionecompilazione
IntroduzioneIntroduzione
SettingSetting
TestingTesting
IntroduzioneIntroduzioneSettingSettingTestingTesting
Il Progetto Player/StageIl Progetto Player/StagePlayer/Stage/GazeboPlayer/Stage/GazeboIl modello Client/ServerIl modello Client/Server
Mariacarla Staffa [email protected] 4
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/
IntroduzioneIntroduzione
Mariacarla Staffa [email protected] 5
IntroduzioneIntroduzioneSettingSettingTestingTesting
Il Progetto Player/StageIl Progetto Player/StagePlayer/Stage/GazeboPlayer/Stage/GazeboIl modello Client/ServerIl 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] 6
IntroduzioneIntroduzioneSettingSettingTestingTesting
Il Progetto Player/StageIl Progetto Player/StagePlayer/Stage/GazeboPlayer/Stage/GazeboIl modello Client/ServerIl modello Client/Server
Sensori
Attuatori Sistema di Controllo
ServerSistema Robotico
Client
Mariacarla Staffa [email protected] 7
IntroduzioneIntroduzioneSettingSettingTestingTesting
Il Progetto Player/StageIl Progetto Player/StagePlayer/Stage/GazeboPlayer/Stage/GazeboIl modello Client/ServerIl modello Client/Server
Sistema di Controllo
Player Client Library
C/C++C#
JavaTcl
PythonLisp
Player Server
Mariacarla Staffa [email protected] 8
IntroduzioneIntroduzioneSettingSettingTestingTesting
Il Progetto Player/StageIl Progetto Player/StagePlayer/Stage/GazeboPlayer/Stage/GazeboIl modello Client/ServerIl modello Client/Server
Player Client Library
C/C++C#
JavaTcl
PythonLisp
Mariacarla Staffa [email protected] 9
IntroduzioneIntroduzioneSettingSettingTestingTesting
Scaricare Player/StageScaricare Player/StageInstallazione Player/StageInstallazione Player/Stage
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
Il download di Player /Stage e Gazebo può essere eseguito dal sito: http://sourceforge.net/project/showfiles.php?group_id=42445
SettingSetting
Mariacarla Staffa [email protected] 10
IntroduzioneIntroduzioneSettingSettingTestingTesting
Scaricare Player/StageScaricare Player/StageInstallazione Player/StageInstallazione Player/Stage
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] 11
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
Per far invocare un server player bisogna:1.aprire un terminale2.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.
TestingTesting
Mariacarla Staffa [email protected] 12
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura 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] 13
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
driverInterfaccia + dispositivo
Mariacarla Staffa [email protected] 14
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
Player Server
Player Client (user program)
<.cfg> <.world>
<.cfg>
Environment description?
sim
ulaz
ione
real
e
Mariacarla Staffa [email protected] 15
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
Insieme di “modelli”
<.world>Caratteristiche generali dell’ambiente
predefiniti: predefiniti: Blobfinder, bumper ,
gripper, position, laser, Ptz, ranger,
speech, ecc.
creati dall’utente: creati dall’utente: attraverso un
modello di base chiamato “Model”
La parola chiave “define” viene utilizzata per creare un nuovo modello a partire da uno già esistente”
Positionsize
velocitycolor
visibility etc.
Mariacarla Staffa [email protected] 16
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
include "pioneer.inc“ include "pioneer.inc“ include "map.inc“ include "map.inc“ size [20 20]size [20 20]resolution 0.01 resolution 0.01 gui_interval 10 gui_interval 10 window( window( size [ 800.000 800.000 ] size [ 800.000 800.000 ] center [ 0.0 0.0] center [ 0.0 0.0] scale 0.028 scale 0.028 #size of each bitmap pixel in metres#size of each bitmap pixel in metres) ) map ( map ( bitmap "lab.png"bitmap "lab.png" size [20 20]size [20 20] name "lab"name "lab") . . . ) . . .
Inclusione della libreria che contiene le Inclusione della libreria che contiene le definizioni relative al robot pioneerdefinizioni relative al robot pioneer
Inclusione della libreria Inclusione della libreria che contiene le direttive che contiene le direttive per utilizzare immagini per utilizzare immagini esterne come sfondoesterne come sfondo
Grandezza del mondo in metri Grandezza del mondo in metri
Risoluzione del modello Risoluzione del modello
Velocità di aggiornamento dello Velocità di aggiornamento dello schermo di simulazione in msschermo di simulazione in ms
Configurazione della Configurazione della finestra di interfaccia finestra di interfaccia
Definizione della mappa Definizione della mappa che funge da sfondoche funge da sfondo
Mariacarla Staffa [email protected] 17
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
. . .. . .define pioneerblob pioneer2dx (define pioneerblob pioneer2dx ( ptz( blobfinder(ptz( blobfinder( channel_count 2channel_count 2 channels ["red" "green"]) )channels ["red" "green"]) )))pioneerblob (pioneerblob ( color "blue"color "blue" name "Robot"name "Robot" pose [-4 7 0]pose [-4 7 0]))define puck model (define puck model ( size [ 0.40 0.40]size [ 0.40 0.40] blob_return 1blob_return 1 obstacle_return 1obstacle_return 1))puck( pose [-8 -2 0 ] color "red" )puck( pose [-8 -2 0 ] color "red" )puck( pose [-7 -7.5 0 ] color "green" )puck( pose [-7 -7.5 0 ] color "green" )
Estenzione del modello di base Estenzione del modello di base definito dal device pioneer2dx definito dal device pioneer2dx conuna camera blobfinder, che conuna camera blobfinder, che
riconosce due colori riconosce due colori
Definizione del robot:Definizione del robot:(possibili campi della struttura:(possibili campi della struttura:
name - color - size - pose - ecc.)name - color - size - pose - ecc.)
Definizione di un modello di Definizione di un modello di oggetto chiamato puck:oggetto chiamato puck:
(possibili campi della struttura:(possibili campi della struttura:name - shape - color - size - pose name - shape - color - size - pose - obstacle return - gripper return - - obstacle return - gripper return -
ecc.)ecc.)
Istanziazione di due puck di colori Istanziazione di due puck di colori diversi e in diverse posizionidiversi e in diverse posizioni
Mariacarla Staffa [email protected] 18
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
Attivare/disattivare la simulazione
help
Visualizzare componenti statiche (griglie di
riferimento, mappa, oggetti) e dinamiche (trace del robot
velocità, posizione, ecc.)
Salvare l’ambiente, resettarlo o acquisire
screenshot dello stesso a diversi
intervalli di tempo
Settare preferenza di simulazione
(velocità, passi di simulazione,ecc.)
#include <stdio.h>#include <stdio.h>#include "playerc.h"#include "playerc.h"
int main(int argc, const char **argv){ int main(int argc, const char **argv){ playerc_client_t *client; playerc_client_t *client; playerc_position_t *position;playerc_position_t *position; . . .. . .
Mariacarla Staffa [email protected] 19
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
Include la libreria “player.h” contenente i prototipi delle funzione
e i tipi di player
Player Client (user program)
Player Server
<.cfg> <.world>
<.cfg>
sim
ulaz
ione
real
e
Definisce un particolare proxy per il programma client
Definisce un dispositivo di tipo position
Mariacarla Staffa [email protected] 20
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
1) Creazione del client e connessione:
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.
Si procede secondo la seguente sequenza di passi:
client = playerc_client_create(NULL, "localhost", 6665);client = playerc_client_create(NULL, "localhost", 6665);playerc_client_connect(client);playerc_client_connect(client);
Mariacarla Staffa [email protected] 21
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
2) Creazione e connessione del dispositivo proxy:
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).
position = playerc_position_create(client, 0);position = playerc_position_create(client, 0);playerc_position_subscribe(position, PLAYER_ALL_MODE);playerc_position_subscribe(position, PLAYER_ALL_MODE);
3) Configurazione del dispositivo e invio dei comandi:
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.
playerc_position_enable(position, 1);playerc_position_enable(position, 1);playerc_position_set_speed(position, 0, 0, 0.1);playerc_position_set_speed(position, 0, 0, 0.1);
Mariacarla Staffa [email protected] 22
4) Lettura dei dati dal dispositivo:
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.
playerc_client_read(client);playerc_client_read(client);printf("position : %f %f %f\n", position->px, ... );printf("position : %f %f %f\n", position->px, ... );
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
Mariacarla Staffa [email protected] 23
5) Distruzione del proxy:
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:
La funzione disconnect dice al server che il client è in fase di arresto e la funzione destroy libera la memoria associata al client.
playerc_position_unsubscribe(position);playerc_position_unsubscribe(position);playerc_position_destroy(position);playerc_position_destroy(position);
playerc_client_disconnect(client);playerc_client_disconnect(client);playerc_client_destroy(client);playerc_client_destroy(client);
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
Mariacarla Staffa [email protected] 24
IntroduzioneIntroduzioneSettingSettingTestingTesting
Creazione del file di ConfigurazioneCreazione del file di ConfigurazioneCreazione del file .worldCreazione del file .worldScrittura del Codice Client e compilazioneScrittura del Codice Client e compilazione
PlayerClientUser
Program
$ gcc -o nomeclient `pkg-config --cflags playerc` nomeclient.c `pkgconfig --libs playerc`$ ./nomeclient
Mariacarla Staffa [email protected] 25
RiferimentiRiferimenti
http://playerstage.sourceforge.net/http://playerstage.sourceforge.net/http://sourceforge.net/mail/?group_id=42445http://sourceforge.net/mail/?group_id=42445http://www.activrobots.com/http://www.activrobots.com/manuale utente per l’installazione di Player e Stagemanuale utente per l’installazione di Player e Stage