Sommario
La lezione è stata curata in collaborazione con la dott.ssa Mariacarla Staffa.
E’ possibile scaricarlo gratuitamente e consultare la documentazione dal/sul sito ufficiale di 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.
Una volta eseguite le operazioni preliminari è possibile installare i pacchetti relativi rispettivamente a Player Stage e Gazebo , attraverso la seguente sequenza di comandi:
Per far invocare un server player bisogna:
Dove il <configfile> è un file di testo che descrive l’insieme dei dispositivi che si vogliono istanziare.
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.
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.
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.
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.
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.
1. Introduzione
4. Esempi di applicazione del paradigma gerarchico
11. Schema Theory
13. Architetture Reattive a Sussunzione
14. Architetture a Campi di Potenziale
15. Architetture a Campi di Potenziale e Sussunzione
16. Progettazione di un sistema Reattivo - 1
17. Progettazione di un sistema Reattivo - 2
18. Progettazione di un sistema Reattivo - 3