1 Player Stage - Programmazione E.Mumolo, DEEI

Slides:



Advertisements
Presentazioni simili
Trieste, 26 novembre © 2005 – Renato Lukač Using OSS in Slovenian High Schools doc. dr. Renato Lukač LinuxDay Trieste.
Advertisements

Preposizioni semplici e articolate
CUDA & OpenMP parallel programming.
Cache Memory Prof. G. Nicosia University of Catania
Teoria e Tecniche del Riconoscimento
Esercitazioni If nidificati
Parametri Acustici (ISO 3382)
Interfacce Java.
Introduzione ad Array e Funzioni 2IC/2ID – a. s.2012/13.
Generazione di numeri casuali in Dev C++
EUROPA TERRA DI MISSIONE. Flags of Europe This page contains flags and maps for Europe and its countries. European Union MAPS Europe 1 -- no flag references.
WSDL (Web Services Description Language) Laurea Magistrale in Informatica Reti 2 (2006/07) dott. Federico Paoloni
E.Mumolo, DEEI Player Stage E.Mumolo, DEEI
Corso di Elettronica per Sensori e Trasduttori.
Le funzioni.
L’albero della famiglia
Un DataBase Management System (DBMS) relazionale client/server.
Esempio: Tombola! Parte seconda.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
J0 1 Marco Ronchetti - Corso di Formazione Sodalia – Febbraio 2001 – Modulo Web Programming Tomcat configuration.
EJB Getting started Database: MySql Application Server: Pramati Server Ambiente di sviluppo: Pramati Studio 3 Applicazione esempio: Logon Trento, 30/10/2002.
prompt> java SumAverage
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
HDM Information Design notation v.4. HDM Information Design.
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
TIPOLOGIA DELLE VARIABILI SPERIMENTALI: Variabili nominali Variabili quantali Variabili semi-quantitative Variabili quantitative.
CORSO SISTEMI DI GOVERNO DEI ROBOT Lezione n.7 Un simulatore
JAVA C import java.util.*; #include <stdio.h>
1 Esercitazione sui segnali Problema: creare un programma analizzatore di file testuali che prenda come argomenti il nome di un file e una sequenza di.
Programming with JXTA Hello World Peer discovery Peer Group discovery Creating Peer group Joining a Peer Group.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 3 - Functions Outline 3.1Introduction 3.2Program Components in C++ 3.3Math Library Functions 3.4Functions.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Sottoprogrammi e Unità di Compilazione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
Il main program Ogni programma in C++, per essere eseguibile, deve contenere una funzione main() da cui l’esecuzione comincerà main() deve avere un tipo.
Le regole Giocatori: da 2 a 10, anche a coppie o a squadre Scopo del gioco: scartare tutte le carte per primi Si gioca con 108 carte: 18 carte.
Players: 3 to 10, or teams. Aim of the game: find a name, starting with a specific letter, for each category. You need: internet connection laptop.
Compito desame del Svolgimento della Sezione 5: CONTROLLORI Esempio preparato da Michele MICCIO.
Chats in nursery schools By Linda Giannini and Carlo Nati XPLORA SCIENCE TEACHER CONFERENCE CERN 15TH - 18TH JUNE 2006.
AN Fondam98 Input Output Input Output I files standard di I/O.
LHCf Status Report Measurement of Photons and Neutral Pions in the Very Forward Region of LHC Oscar Adriani INFN Sezione di Firenze - Dipartimento di Fisica.
Progetto Rover – Fase 1. Obiettivo e Vincoli Obiettivo è creare applicazione capace di controllare in remoto un Rover, dotato di torretta sensoriale e.
1 Web Design Internet Agency. 2 Web Design Internet Agency Qual è il valore aggiunto che può portare allimpresa ? Perché è fondamentale oggi avere un.
OUTPUT FORMATTATO La funzione printf consente di effettuare la stampa a video formattata. Sintassi: printf ( stringa_formato, arg0, arg1, … ); La stringa.
Alcuni, qualche, un po’ di
Castelli Enrico Classe 1i
Motor Sizing.
L2 Elaborazione di immagini in C/C++
void binario(int n); …………………
Prospettive delle attivita' di Astrofisica Nucleare con Recoil Mass Separators Prospettive delle attivita' di Astrofisica Nucleare con Recoil Mass Separators.
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,
Creazione progetto in C++/DEV
Personalizzazione e porting delle procedure esterne connesse ad Aleph Il caricamento degli utenti della circolazione da files esterni Modifiche introdotte.
Installazione di Drupal su Linux (sistemista) Installazione step-by-step e note.
MILANO Single step D=400mm, f=40°Diag From a message of Levacher about next step thermal analysis for the baffle can be allocated a space of.
/ Elementi di C++ Introduzione a ROOT , Laboratorio Informatico ROOT warm up , Laboratorio Informatico Introduzione a.
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
Funzioni stringhe. chr Restituisce il carattere di un valore ascii dato. Per vedere lelenco dei codici ascii clicca QQQQ uuuu iiiiEsempio
Architettura software La scelta architetturale: MVA (Model – View – Adapter/Control) The view is completely decoupled from the model such that view and.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
UG40 Energy Saving & Twin Cool units Functioning and Adjustment
Introduzione al linguaggio C. Cos’e’ il C? Il C e’ un linguaggio ad alto livello Un compilatore C prende in input un file contenente codice sorgente C.
Collection & Generics in Java
Introduction to automatic ABMs documentation Keywords: Doxygen ODD protocol MASON documentation Simone Romano.
Sistemi di elaborazione dell’informazione Modulo 3 -Protocolli applicativi Unità didattica 4 - Protocolli del Web Ernesto Damiani Lezione 3 – Esempi HTTP.
Moles and Formula Mass.
Saluti ed espressioni Greetings in Italian.
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
Well and Truly by Roni Horn. Mind map Artist’s name Techniques Life Groupworks Artworks My opinion Her message My artwork inspiried by…
Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 5 -Test e verifica Ernesto Damiani Università degli Studi di Milano.
WRITING – EXERCISE TYPES
Transcript della presentazione:

1 Player Stage - Programmazione E.Mumolo, DEEI

2 Programmazione Player Librerie C (libplayerc), C++ (libplayerclient), Tcl (tclPlayer), etc. Ciclo di programmazione in Playerstage 1. Connessione con il proxy 2. Sottoscrivere i device. 3. Leggi i sensori. 4. Elabora i dati. 5. Invia i comandi agli attuatori.

File di configurazione per Player File *.cfg formato dalla descrizione dei driver Driver: controllo sensori/attuatori Definizione: Nome Plugin: nome della libreria (opzionale) Provides: indirizzo dei driver Alwayson: il driver viene caricato subito (1) o quando Player riceve una richiesta da un client (0)

Esempio (simple.cfg) # load the Stage plugin simulation driver driver ( name "stage" provides ["simulation:0" ] plugin "libstageplugin" # load the named file into the simulator worldfile "simple.world" ) # Create a Stage driver and attach position2d and laser interfaces to "robot1" driver ( name "stage" provides ["position2d:0" "laser:0" ] model "robot1" )

Descrizione del mondo per Stage Esempio: simple.world Tutte le informazioni sullambiente Specifica i sensori e attuatori La mappa dellambiente Parametri della simulazione Risoluzione (dimensione di un pixel) Intervallo di tempo di simulatione …

Esempio: simple.world (1) # defines Pioneer-like robots include "pioneer.inc" # defines 'map' object used for floorplans include "map.inc" # defines sick laser include "sick.inc" # size of the world in meters size [16 16] # resolution of the underlying... #...raytrace model in meters resolution 0.02 # update the screen every 10ms gui_interval 20 # configure the GUI window window ( size [ ] center [ ] scale ) Y X lp[179] lp[0] laser lp[90] davanti sinistra destra

Esempio: simple.world (2) # load an environment bitmap map ( bitmap "bitmaps/cave.png" size [16 16] name "cave" ) # create a robot pioneer2dx ( name "robot1" color "red" pose [ ] sick_laser( samples 361 laser_sample_skip 4 ) )

Robot Pioneer (pioneer.inc) (1) # The Pioneer2DX sonar array define p2dx_sonar ranger ( scount 16 # define the pose of each transducer [xpos ypos heading] spose[0] [ ] spose[1] [ ] spose[2] [ ] spose[3] [ ] spose[4] [ ] spose[5] [ ] spose[6] [ ] spose[7] [ ] spose[8] [ ] spose[9] [ ]Y spose[10] [ ] spose[11] [ ] spose[12] [ ] spose[13] [ ] spose[14] [ ] spose[15] [ ] # define the field of view of each transducer [range_min range_max view_angle] sview [ ] # define the size of each transducer [xsize ysize] in meters ssize [ ] ) Y X sonar

Robot Pioneer (pioneer.inc) (2) # a Pioneer 2 or 3 in standard configuration define pioneer2dx position ( # actual size size [ ] # the pioneer's center of rotation is offset from its center of area origin [ ] # draw a nose on the robot so we can see which way it points gui_nose 1 # estimated mass in KG mass 15.0 # this polygon approximates the shape of a pioneer polygons 1 polygon[0].points 8 polygon[0].point[0] [ ] polygon[0].point[1] [ ] polygon[0].point[2] [ ] polygon[0].point[3] [ ] polygon[0].point[4] [ ] polygon[0].point[5] [ ] polygon[0].point[6] [ ] polygon[0].point[7] [ ] }... Y X

Descrizione dellambiente Esempi di ambienti (files png in stage-2.0.1) Creazione di un ambiente cave.pngautolab.pngsimple_room.png

Compilazione/esecuzione Librerie utente Variabile dambiente: export PKG_CONFIG_PATH=/robodeb/local/lib/pkgconfig Compilatori: gcc o g++ o java Makefile: target : *.cc g++ -o out pkg-config –flags playerc++ *.cc pkg-config –libs playerc++ Esecuzione (in bash):./target

Principali programmi di utilità Dgps_server Playercam Playerjoy joystick Playernav Playerprint Playerv visualizza quello che il robot vede

Robot e Sensori Oggetto PlayerClient: controlla ogni connessione al Player server. PlayerClient robot("localhost"); Alcuni metodi inclusi: robot.Read(), root.Write(), robot.SetFrequency() … Oggetto Odometria Position2dProxy pp(&robot,0); Alcuni metodi inclusi: pp.SetSpeed(), pp.ResetOdometry(), GetXPose(), GetYPose(), GetYaw(), … Oggetto Sonar SonarProxy sp(&robot,0); Alcuni metodi: sp.GetScan() (o sp[]), sp.GetPose(), sp.GetPoseCount(),.. Oggetto Laser LaserProxy lp(&robot,0); Metodi: lp.GetPoint(i) (o lp[i]), lp.GetRange(i), lp.GetCount(), …

Sick LMS-200 e Sonar

Schema di programma di base int main(int argc, char *argv[]) { using namespace PlayerCc; double ss,phi; double tx=5., ty=5.; //coordinate del punto target PlayerClient robot("localhost"); SonarProxy sp(&robot,0); LaserProxy lp(&robot,0); Position2dProxy pp(&robot,0); for(;;) { robot.Read(); //aspetta i dati dei sensori elabora(); //qualche elaborazione... pp.SetSpeed(ss,phi); } Esercizio: lettura sensori

Alcune manovre elementari di moto (navigazione semplice) Evitamento degli ostacoli (obstacle avoidance) Inseguimento del muro (wall following) Moto punto-punto (point stabilization) : Manovra di parcheggio (parking) : il robot parte da una configurazione iniziale (x i,y i, i ) e raggiunge una configurazione finale (x f,y f, f ) Inseguimento della traiettoria (trajectory tracking ): il robot deve raggiungere e seguire un cammino geometrico con unassegnata legge temporale. Inseguimento del cammino (path following): il robot deve seguire un particolare cammino geometrico senza specifiche temporali. Inseguimento obiettivo (target tracking)

Sonar Obstacle Avoidance (primitivo) #include Int main(int argc, char *argv[]) { using namespace PlayerCc; PlayerClient robot("localhost"); SonarProxy sp(&robot,0); Position2dProxy pp(&robot,0); for(;;) { double turnrate, speed; robot.Read(); if((sp[0] + sp[1] + sp[2] + sp[3]) < (sp[4] + sp[5]+sp[6] + sp[7])) turnrate = dtor(-50); // 20 gradi/s else turnrate = dtor(50); pp.SetSpeed(1, turnrate); } Esercizio: descrivere il log del cammino

Laser Obstacle Avoidance (primitivo) #include #include "args.h" int main(int argc, char **argv) { using namespace PlayerCc; double jog; PlayerClient robot(gHostname, gPort); Position2dProxy pp(&robot, gIndex); LaserProxy lp(&robot, gIndex); pp.SetMotorEnable (true); for(;;) { double minR = 1e9; double minL = 1e9; robot.Read(); uint count = lp.GetCount(); //trova la distanza minima a destra e sinistra for (uint j=0; j lp[j]) minR = lp[j]; } for (uint j = count/2; j lp[j]) minL = lp[j]; } jog=5*(minL - minR); std::cout << "Jog" << jog << std::endl; pp.SetSpeed(0.5, jog); }

Random walk (1) #include using namespace PlayerCc; #include "args.h double minfrontdistance = 1; double speed = 1; double avoidspeed = -1; double turnrate = DTOR(40); int main(int argc, char** argv) { int randint; int randcount = 0; int avoidcount = 0; bool obs = false; parse_args(argc,argv); LaserProxy *lp = NULL; SonarProxy *sp = NULL; PlayerClient robot(gHostname, gPort); Position2dProxy pp(&robot, gIndex); sp = new SonarProxy (&robot, gIndex); pp.SetMotorEnable (true); double newturnrate=0.0f, newspeed=0.0f; for(;;) { robot.Read(); obs = ((sp->GetScan (2) < minfrontdistance) || (sp->GetScan (3) < minfrontdistance) || (sp->GetScan (4) < minfrontdistance) || (sp->GetScan (5) < minfrontdistance) ); if(obs ) { newspeed=avoidspeed; if(sp->GetScan(1)+sp->GetScan(15) GetScan(7)+sp->GetScan(8)) newturnrate = -turnrate; else newturnrate = turnrate; } else

Randow Walk (2) { avoidcount = 0; newspeed = speed; //ruota a random per 2 secondi if(!randcount) { /* genera un numero random tra -20 e 20 */ randint = rand() % ; newturnrate = dtor(randint); randcount = 20; } randcount--; } pp.SetSpeed(newspeed, newturnrate); }

Wall following Esercizio: Dist (distanza desiderata) Jog=K*(Dist – minR) Legge di controllo: minR

Moto punto-punto (1) #include Int main(int argc, char *argv[]) { using namespace PlayerCc; double ss,delta=0,phi=0,ang=0,ang1=0, dx,dy;; double tx=5., ty=5.; //coordinate del punto target PlayerClient robot("localhost"); SonarProxy sp(&robot,0); LaserProxy lp(&robot,0); Position2dProxy pp(&robot,0); for(;;) { robot.Read(); dx=tx-pp.GetXPos(); dy=ty-pp.GetYPos(); ang = atan2(dy,dx);//angolo target ang1=pp.GetYaw(); //angolo del robot in rad delta=ang-ang1; //errore pp.SetSpeed(1.5,phi); }

Moto punto-punto (2) Esercizi: Criterio di fermata Percorso di una traiettoria preassegnata (quadrato?) Visualizzazione del cammino Integrazione del programma di moto con un algoritmo per evitare ostacoli Evidenziare i problemi

Moto punto-punto (3) #include int main(int argc, char *argv[]) { using namespace PlayerCc; double ss,delta=0,phi=0,ang=0,ang1=0; double dx,dy,dist; PlayerClient robot("localhost"); SonarProxy sp(&robot,0); LaserProxy lp(&robot,0); Position2dProxy pp(&robot,0); double tx=5., ty=5.; //coordinate target for(;;) { robot.Read(); dx=tx-pp.GetXPos(); dy=ty-pp.GetYPos(); ang = atan2(dy,dx);//angolo target in rad ang1=pp.GetYaw(); //angolo del robot delta=ang-ang1;//errore pp.SetSpeed(0.0,delta); if (fabs(delta)<0.05)break; } for(;;) { robot.Read(); dx=tx-pp.GetXPos(); dy=ty-pp.GetYPos(); dist=sqrt(dx*dx+dy*dy); pp.SetSpeed(2.0,0); std::cout << "target x,y = " << tx <<" " << ty << " dist" << dist << std::endl; if (dist<0.8)break; } Esercizi: generazione di un cammino tracciamento traiettoria

Modello di un robot Controllo Basso/alto livello Feedforward/feedback (pianificazione/reattivo) Sensori Propriocettivi Esterocettivi Attuatori (motori, riduttori…)Effettori (ruote, manipolatori …)