Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D La Corte in Rete
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Ernesto Burattini » 7.Un simulatore


Guida all’utilizzo di Player e Stage

Sommario

  • Introduzione
    • Il Progetto Player/Stage
    • Player/Stage/Gazebo
    • Il modello Client/Server
  • Setting
    • Scaricare Player/Stage
    • Installazione Player/Stage
  • Testing
    • Creazione del file di Configurazione
    • Creazione del file .world
    • Scrittura del Codice Client ecompilazione

La lezione è stata curata in collaborazione con la dott.ssa Mariacarla Staffa.

Il Progetto Player/Stage

  • 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.

Player/Stage/Gazebo

  • 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.

Il modello Client/Server

La piattaforma PIONEER 3DX

La piattaforma PIONEER 3DX

La piattaforma PIONEER 3DX

La piattaforma PIONEER 3DX


Il modello Client/Server (segue)

Struttura di Player

Struttura di Player


Il modello Client/Server (segue)

Interfacce di Player

Interfacce di Player


Scaricare Player/Stage

Il download di Player /Stage e Gazebo può essere eseguito dal sito.
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:

n.b.: E’ necessario avere i diritti di amministratore per poter procedere con l’installazione.

Installazione 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-.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

Creazione del file di Configurazione

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]

Dove il <configfile> è un file di testo che descrive l’insieme dei dispositivi che si vogliono istanziare.

Esempio d’uso di Player

Esempio d'uso di Player


Creazione del file di Configurazione (segue)

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à come indicato in figura.

Questo file istruisce il server a creare due dispositivi:

Il programma Client può connettersi così a questi dispositivi, leggere i dati, inviare comandi e così via.

Esempio d’uso di Player

Esempio d'uso di Player


Creazione del file di Configurazione (segue)

 File di configurazione

File di configurazione


Creazione del file .world

File.world

File.world


Creazione del file .world (segue)

File.world

File.world


Creazione del file .world (segue)

File.world

File.world


Creazione del file .world (segue)

File.world

File.world


Creazione del file .world (segue)

File.world

File.world


Scrittura del Codice Client e compilazione

Scrittura codice client e compilazione

Scrittura codice client e compilazione


Scrittura del Codice Client e compilazione (segue)

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.

Scrittura del Codice Client e compilazione (segue)

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.

Scrittura del Codice Client e compilazione (segue)

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.

Scrittura del Codice Client e compilazione (segue)

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.

Scrittura del Codice Client e compilazione (segue)

Scrittura codice client e compilazione

Scrittura codice client e compilazione


Player/Stage

  • http://playerstage.sourceforge.net/
  • http://sourceforge.net/mail/?group_id=42445
  • http://www.activrobots.com/
  • manuale utente per l’installazione di Player e Stage
  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion

Fatal error: Call to undefined function federicaDebug() in /usr/local/apache/htdocs/html/footer.php on line 93