La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

E.Mumolo, DEEI mumolo@units.it Player Stage E.Mumolo, DEEI mumolo@units.it.

Presentazioni simili


Presentazione sul tema: "E.Mumolo, DEEI mumolo@units.it Player Stage E.Mumolo, DEEI mumolo@units.it."— Transcript della presentazione:

1 E.Mumolo, DEEI mumolo@units.it
Player Stage E.Mumolo, DEEI

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) TCPIP Player Server File di configurazione interfacce Robot Reale

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) TCPIP Player Server File di configurazione del player interfacce File di configurazione di Stage STAGE

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

7 Running Player Building and installation Execution
./configure make make install Execution player [–p <port>] <config file> playerv [hostname:port] playerjoy [hostname:port]

8 File di configurazione del player: *.cfg
Server 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 Camera Laser Motors

9 Player cfg

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 l’uso 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 <playerclient. h> #include <stdlib
#include <playerclient.h> #include <stdlib.h> 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

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

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

15 LaserProxy: metodi principali
LaserProxy (PlayerClient *aPc, uint aIndex=0)  costruttore ~LaserProxy ()  distruttore uint GetCount ()  numero di punti nella acquisizione. player_point_2d_t GetPoint (uint aIndex)  dati dello scanner: x,y (m). int GetIntensity (uint aIndex)  richiede l’intensità void RequestGeom ()  richiede la geometria del laser player_bbox_t GetSize ()  richiede la dimensione. double GetMinLeft ()  richiede la minima lettura a sinistra. double GetMinRight ()  richiede la minima lettura a destra.

16 SonarProxy SonarProxy (PlayerClient *aPc, uint aIndex=0)  costruttore ~SonarProxy ()  distruttore uint GetCount () richiede il conteggio delle misure double GetScan (uint aIndex)  richiede una lettura particolare double operator[] (uint aIndex)  richiede un modo alternativo di lettura delle misure uint GetPoseCount ()  numero di posizioni valide player_pose_t GetPose (uint aIndex)  richiede la posizione deòl sonar void RequestGeom ()  richide la geometria del sensore


Scaricare ppt "E.Mumolo, DEEI mumolo@units.it Player Stage E.Mumolo, DEEI mumolo@units.it."

Presentazioni simili


Annunci Google