Player Stage

Post on 18-Jan-2016

51 views 0 download

description

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. - PowerPoint PPT Presentation

Transcript of Player Stage

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

Soluzione

Strato di virtualizzazione Player Server www.playerstage.org

Programma utente (client)

Player Server

Robot Reale

TCPIP

interfacce

File di configurazione

Architettura del Player

Computer di sviluppo

Robot reale

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

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

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]

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)

Player cfg

9

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

#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

}

}

File di configurazione di Stage: world file

12

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.

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

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.

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