Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoDonata Nardi Modificato 11 anni fa
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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.