250 likes | 375 Views
CORSO SISTEMI DI GOVERNO DEI ROBOT Lezione n.7 Un simulatore lezione tenuta dalla d.ssa Mariacarla Staffa prof. Ernesto Burattini. Guida all’utilizzo di Player e Stage. Dott.ssa Mariacarla Staffa Dipartimento di Informatica e Sistemistica University of Naples “Federico II”
E N D
CORSO SISTEMI DI GOVERNO DEI ROBOT Lezione n.7 Un simulatore lezione tenuta dalla d.ssa Mariacarla Staffa prof. Ernesto Burattini
Guida all’utilizzo di Player e Stage Dott.ssa Mariacarla Staffa Dipartimento di Informatica e Sistemistica UniversityofNaples “Federico II” Naples, Italy mariacarla.staffa@unina.it
Sommario • Il Progetto Player/Stage • Player/Stage/Gazebo • Il modello Client/Server 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 mariacarla.staffa@unina.it
Introduzione Setting Testing Introduzione 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 RoboticsResearchLab e dal Simon Fraser AutonomyLab con il contributo della comunità open source. • Il suoobiettivo è quellodisostenere la ricercanell’ambitodisistemirobotici e/o sistemidisensori. • Player è probabilmenteil server dicontrollo per robot maggiormenteutilizzatonelmondo e sistadiffondendosemprepiu’ anchel’utilizzodelle sue interfaccedisimulazione Stage (2D) e Gazebo (3D). E’ possibilescaricarlogratuitamente e consultare la documentazionedal/sulsitoufficialedi Player/Stage: http://playerstage.sourceforge.net/ Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Il Progetto Player/Stage 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 mariacarla.staffa@unina.it
Introduzione Setting Testing Il Progetto Player/Stage Player/Stage/Gazebo Il modello Client/Server Client Server Sistema Robotico Sensori Sistema di Controllo Attuatori Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Il Progetto Player/Stage Player/Stage/Gazebo Il modello Client/Server Player Client Library C/C++ C# Java Tcl Python Lisp Player Server Sistema di Controllo Mariacarla Staffa mariacarla.staffa@unina.it
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 mariacarla.staffa@unina.it
Introduzione Setting Testing Scaricare Player/Stage Installazione Player/Stage Setting 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 mariacarla.staffa@unina.it
Introduzione Setting Testing Scaricare Player/Stage 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: Decomprimere il file scaricato eseguendo da terminale: $sudotarxjvf player-<version>.tar.bz2 Spostarsi nella directory sorgente di Player: $cd player-<version> Configurare attraverso il comando $sudo ./configure Compilare attraverso il comando $sudomake Installare Player attraverso il comando $sudomakeinstall Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world Scrittura del Codice Client e compilazione Testing Per far invocare un server player bisogna: aprire un terminale posizionarsi nella cartella contenente il file di configurazione 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 mariacarla.staffa@unina.it
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 mariacarla.staffa@unina.it
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world Scrittura del Codice Client e compilazione Interfaccia + driver dispositivo Mariacarla Staffa mariacarla.staffa@unina.it 13
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world Scrittura del Codice Client e compilazione Player Server <.cfg> Player Client (userprogram) reale <.cfg> <.world> simulazione Environmentdescription ? Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world Scrittura del Codice Client e compilazione <.world> Caratteristiche generali dell’ambiente Insieme di “modelli” Position size velocity color visibility etc. predefiniti: Blobfinder, bumper , gripper, position, laser, Ptz, ranger, speech, ecc. 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” Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world Scrittura del Codice Client e compilazione Inclusionedellalibreriachecontiene le definizioni relative al robot pioneer Inclusionedellalibreriachecontiene le direttive per utilizzareimmaginiesterne come sfondo include "pioneer.inc“ include "map.inc“ size [20 20] resolution 0.01 gui_interval 10 window( size [ 800.000 800.000 ] center [ 0.0 0.0] scale 0.028 #size of each bitmap pixel in metres ) map ( bitmap "lab.png" size [20 20] name "lab" ) . . . Grandezza del mondo in metri Risoluzione del modello Velocitàdi aggiornamento delloschermodisimulazione in ms Configurazionedellafinestradiinterfaccia Definizionedellamappachefungedasfondo Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world Scrittura del Codice Client e compilazione . . . define pioneerblob pioneer2dx ( ptz( blobfinder( channel_count 2 channels ["red" "green"]) ) ) pioneerblob ( 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" ) Estenzione del modellodi base definitodal device pioneer2dx conuna camera blobfinder, chericonosce due colori Definizione del robot: (possibilicampidellastruttura: name - color - size - pose - ecc.) Definizionedi un modellodioggettochiamato puck: (possibilicampidellastruttura: name - shape - color - size - pose - obstacle return - gripper return - ecc.) Istanziazionedi due puck dicoloridiversi e in diverse posizioni Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world Scrittura del Codice Client e compilazione 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.) Salvare l’ambiente, resettarlo o acquisire screenshot dello stesso a diversi intervalli di tempo Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world Scrittura del Codice Client e compilazione Player Server <.cfg> Player Client (userprogram) reale Include la libreria “player.h” contenente i prototipi delle funzione e i tipi di player <.cfg> <.world> simulazione #include <stdio.h> #include "playerc.h" int main(intargc, const char **argv){ playerc_client_t *client; playerc_position_t *position; . . . Definisce un particolare proxy per il programma client Definisce un dispositivo di tipo position Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world Scrittura del Codice Client e compilazione Si procede secondo la seguente sequenza di passi: 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. client = playerc_client_create(NULL, "localhost", 6665); playerc_client_connect(client); Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world Scrittura 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); 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_set_speed(position, 0, 0, 0.1); Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world Scrittura del Codice Client e compilazione 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); printf("position : %f %f %f\n", position->px, ... ); Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world Scrittura del Codice Client e compilazione 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_destroy(position); playerc_client_disconnect(client); playerc_client_destroy(client); Mariacarla Staffa mariacarla.staffa@unina.it
Introduzione Setting Testing Creazione del file di Configurazione Creazione del file .world 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 mariacarla.staffa@unina.it
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 mariacarla.staffa@unina.it