1 / 16

Player Stage

Player Stage. E.Mumolo, DEEI mumolo@units.it. Il problema. Molti tipi di piattaforme e controllori È un problema di virtualizzazione per la portabilità del codice. Soluzione. Strato di virtualizzazione  Player Server www.playerstage.org. Programma utente (client). TCPIP. Player Server.

holt
Download Presentation

Player Stage

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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 • www.playerstage.org 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 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 • http://playerstage.sourceforge.net • ./configure • make • make install • Execution • player [–p <port>] <config file> • playerv [hostname:port] • playerjoy [hostname:port]

  8. File di configurazione del player: *.cfg Player 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.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_tGetPoint (uint aIndex)  dati dello scanner: x,y (m). int GetIntensity (uint aIndex)  richiede l’intensità void RequestGeom ()   richiede la geometria del laser player_bbox_tGetSize ()   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_tGetPose (uint aIndex)  richiede la posizione deòl sonar void RequestGeom ()   richide la geometria del sensore

More Related