Player Stage

16
1 Player Stage E.Mumolo, DEEI [email protected]

description

Player Stage. E.Mumolo, DEEI [email protected]. 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. - PowerPoint PPT Presentation

Transcript of Player Stage

Page 1: Player Stage

1

Player Stage

E.Mumolo, DEEI

[email protected]

Page 2: Player Stage

2

Il problema Molti tipi di piattaforme e controllori

È un problema di virtualizzazione per la portabilità del codice

Page 3: Player Stage

Soluzione

Strato di virtualizzazione Player Server www.playerstage.org

Programma utente (client)

Player Server

Robot Reale

TCPIP

interfacce

File di configurazione

Page 4: Player Stage

Architettura del Player

Computer di sviluppo

Robot reale

Page 5: Player Stage

Simulazione

E se non ho il robot? STAGE (simula il robot e il

mondo)

Programma utente (client)

Player Server

STAGE

TCPIP

interfacce

File di configurazionedel player

File di configurazionedi Stage

Page 6: Player Stage

In definitiva

ClientPLAYER

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-…

Page 7: Player Stage

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]

Page 8: Player Stage

File di configurazione del player: *.cfg

PlayerServer

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)

Page 9: Player Stage

Player cfg

9

Page 10: Player Stage

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

Page 11: Player Stage

#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

}

}

Page 12: Player Stage

File di configurazione di Stage: world file

12

Page 13: Player Stage

13

Programmazione player

Librerie C (libplayerc), C++ (libplayerclient), Tcl (tclPlayer), etc.

Passi di programmazione1. Connessione con il proxy

2. Sottoscrivere I device.

3. Leggi I sensori.

4. Elabora i dati.

5. Invia i comandi agli attuatori.

Page 14: Player Stage

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 ().

14

Page 15: Player Stage

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.

Page 16: Player Stage

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