La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Player Stage E.Mumolo, DEEI 2 Il problema Molti tipi di piattaforme e controllori È un problema di virtualizzazione per la portabilità

Presentazioni simili


Presentazione sul tema: "1 Player Stage E.Mumolo, DEEI 2 Il problema Molti tipi di piattaforme e controllori È un problema di virtualizzazione per la portabilità"— Transcript della presentazione:

1 1 Player Stage E.Mumolo, DEEI

2 2 Il problema Molti tipi di piattaforme e controllori È un problema di virtualizzazione per la portabilità del codice

3 Soluzione Strato di virtualizzazione Player Server Programma utente (client) Player Server Robot Reale TCPIP interfacce File di configurazione

4 Architettura del Player Computer di sviluppo Robot reale

5 Simulazione E se non ho il robot? STAGE (simula il robot e il mondo) Programma utente (client) Player Server STAGE TCPIP interfacce File di configurazione del player File di configurazione di Stage

6 In definitiva Client PLAYER STAGE (mondi a 2D) ROBOT REALE GAZEBO (mondi a 3D) tcp/udp simulazione interfacce del robot simulazione degli ambienti Cliente Programma scritto in - C - C++ - Java - Pyton -…

7 7 Running Player Building and installation make make install Execution player [–p ] playerv [hostname:port] playerjoy [hostname:port]

8 File di configurazione del player: *.cfg Player Server Camera Laser Motors blobfinder:0 ( driver acts devicepath=/dev/video0 channel 0 ) laser:0 ( driver sicklms200 port /dev/ttyS1 resolution 50 ) position:0 ( driver p2os_position port /dev/ttyS0 max_xspeed 500 )

9 Player cfg 9

10 Programmazione clienti in C++ Il programma Cliente usa la libreria libplayerc++ La libplayerc++ si basa sul modello service proxy Il cliente è implementato includendo oggetti che sono proxy per servizi remoti In definitiva, lo sviluppo del programma si basa sulla desisione dei proxy necessari, e luso dei metodi forniti dalla classe I proxy sono gestiti dal Controller Funzioni del Controller: Fornisce un corpo al cliente (Embodyness) Supervisiona il funzionamento Fornisce le funzionalità previste

11 #include int main(int argc, char *argv[]) { PlayerClient robot("localhost"); SonarProxy sp(&robot,0,'r'); Position2DProxy pp(&robot,0,'w'); double newturnrate,newspeed; for(int i=0;i<1000;i++) { if(robot.Read()) exit(1); sp.Print(); // print out sonars for fun // semplice algoritmo per evitare gli ostacoli if((sp.ranges[0] + sp.ranges[1]) < (sp.ranges[6] + sp.ranges[7])) newturnrate = DTOR(-20); // turn 20 degrees per second else newturnrate = DTOR(20); if(sp.ranges[3] < 0.500) newspeed = 0; else newspeed = 0.100; pp.SetSpeed(newspeed,newturnrate); //comandi ai motori }

12 File di configurazione di Stage: world file 12

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

14 Position2dProxy: metodi principali Position2dProxy (PlayerClient *aPc, uint aIndex=0) costrutorePosition2dProxyPlayerClient ~Position2dProxy () distruttore~Position2dProxy void SetSpeed (double aXSpeed, double aYSpeed, double aYawSpeed) invia comandi al motoreSetSpeed void SetMotorEnable (bool enable) abilita/disabilita i motoriSetMotorEnable void ResetOdometry () resetta lodometry a (0,0,0).ResetOdometry void SetOdometry (double aX, double aY, double aYaw) inizializza lodometria alla posizione (x, y, yaw).SetOdometry double GetXPos () GetXPos double GetYPos ().GetYPos double GetYaw ()GetYaw double GetXSpeed ()GetXSpeed double GetYSpeed ().GetYSpeed double GetYawSpeed ().GetYawSpeed 14

15 LaserProxy: metodi principali LaserProxyLaserProxy (PlayerClient *aPc, uint aIndex=0) costruttorePlayerClient ~LaserProxy~LaserProxy () distruttore uint GetCount () numero di punti nella acquisizione.GetCount player_point_2d_tplayer_point_2d_t GetPoint (uint aIndex) dati dello scanner: x,y (m).GetPoint int GetIntensity (uint aIndex) richiede lintensitàGetIntensity void RequestGeom () richiede la geometria del laserRequestGeom player_bbox_tplayer_bbox_t GetSize () richiede la dimensione.GetSize double GetMinLeft () richiede la minima lettura a sinistra.GetMinLeft double GetMinRight () richiede la minima lettura a destra.GetMinRight

16 SonarProxy SonarProxy (PlayerClient *aPc, uint aIndex=0) costruttore PlayerClient ~SonarProxy~SonarProxy () distruttore uint GetCount () richiede il conteggio delle misureGetCount double GetScan (uint aIndex) richiede una lettura particolareGetScan double operator[] (uint aIndex) richiede un modo alternativo di lettura delle misureoperator[] uint GetPoseCount () numero di posizioni valideGetPoseCount player_pose_tplayer_pose_t GetPose (uint aIndex) richiede la posizione deòl sonarGetPose void RequestGeom () richide la geometria del sensoreRequestGeom


Scaricare ppt "1 Player Stage E.Mumolo, DEEI 2 Il problema Molti tipi di piattaforme e controllori È un problema di virtualizzazione per la portabilità"

Presentazioni simili


Annunci Google