# Player Project

Het Player Project (voorheen bekend als het Player/Stage Project of Player/Stage/Gazebo Project) is een project dat een gratis, open-sourcesoftwareplatform ontwikkeld voor onderzoek in robotica en sensorsystemen. Het bestaat uit de Player-netwerkserver en de Stage- en Gazebo-robotsimulators. De programma's Player en Stage zijn vernoemd naar een gedicht van William Shakespeare, The Seven Ages of Man.
Het Player Project is een project waaronder momenteel drie roboticagerelateerde softwareplatformen ontwikkeld worden. Deze bestaan uit de Player-netwerkroboticaserver, de Stage-2D-robotsimulatieomgeving, en de Gazebo-3D-robotsimulatieomgeving. Het project werd opgericht in 2000 door Brian Gerkey, Richard Vaughan en Nathan Koenig aan de Universiteit van Zuid-Californië in Los Angeles, en wordt veel gebruikt in onderzoek en opleiding binnen de robotica.

## Player

Player voorziet een netwerkinterface voor de verschillende robots en sensoren. Het client-servermodel van Player zorgt ervoor dat de programma's voor het controleren van robots in eender welke programmeertaal geschreven kunnen worden, die dan uitgevoerd worden op een computer met netwerkverbinding naar de robot. Player ondersteunt meerdere concurrente clientverbindingen met apparaten, waardoor er nieuwe mogelijkheden ontstaan voor verdeelde en collaboratieve waarneming en controle.
Het Player-softwarepakket werkt op POSIX-compatibele besturingssystemen, waaronder Linux, Solaris, de BSD-varianten en Mac OS X. Met enige configuratie en compilatie is het ook mogelijk om Player te installeren op een Microsoft Windows-besturingssysteem, maar deze ondersteunt niet de twee simulators Stage en Gazebo. Player kan omschreven worden als een 'abstracte robot laag', waarbij alle apparaten voorgesteld worden als een set van vooraf gedefinieerde interfaces.
Player ondersteunt een grote variatie aan hardware (zowel robots als sensoren). Het bevat ook verschillende clientbibliotheken voor een aantal programmeertalen, waaronder C, C++, Python en Ruby. Bibliotheken van derde partijen zijn beschikbaar in de Java- en Tcl-programmeertalen. Verder biedt het programma ook een minimaal en flexibel ontwerp, ondersteuning om meerdere apparaten concurrent te besturen en on-the-fly-serverconfiguratie.

### Eigenschappen van Player

* Player is onafhankelijk van programmeertaal of ontwerpplatform, hoewel het moeilijk te installeren is op Windows.
* Player maakt geen veronderstelling over de structuur van het controleprogramma voor de robot. Zo kan deze op eender welke manier geschreven worden.
* Met Player kan dezelfde controleinterface op verschillende apparaten gebruikt worden.
* Player is ontworpen om virtueel elke hoeveelheid aan clients te ondersteunen.
Player bestaat voornamelijk uit drie concepten:
* Interface: een specificatie betreffende de interactie met de sensoren, aandrijving of algoritmes. De interface bepaalt de syntaxis en semantiek van alle berichten die uitgewisseld worden binnen de entiteiten van dezelfde class.
* Driver: het softwaregedeelte dat "praat" met de sensoren, aandrijving, of algoritmes, en deze vertaald naar een voor de interface te begrijpen taal.
* Apparaat: de driver en interface zorgen voor de aansturing van het apparaat (een robot of de onderdelen hiervan).

## Stage

Stage simuleert een aantal mobiele robots, die zich bewegen oriënteren in een tweedimensionale omgeving. Er worden verschillende sensor modellen gesimuleerd, waaronder sonar, scanninglaser, rangefinder, pan-tilt-zoomcamera met kleurdetectie en odometrie.
Stage-apparaten werken met een standaard Player-interface, zodat er weinig tot geen aanpassingen vereist zijn bij de overstap van simulatie naar hardware.

## Gazebo

Gazebo is een multi-robotsimulator voor buitenomgevingen. Net zoals Stage is het in staat om meerdere robots, sensoren en objecten te simuleren, maar doet dit in een driedimensionale omgeving. Het programma genereert zowel realistische sensorfeedback als fysieke interacties tussen objecten.

## Player/Stage drivers, interfaces en devices

Een Player driver is een verzameling van functies die wordt gebruikt om een abstracte communicatie te vormen tussen de fysieke robot en de client code. Deze driver implementeert methoden om te communiceren met de proxy's, die terug te vinden zijn in de Playerdocumentatie. Een proxy omschrijft de standaard communicatie met een object in Player, zoals een sonar of motor. Sommige proxy's en drivers voorzien een complexe functionaliteit voor het ontwikkelen van een simulatie en implementatie. Om een driver uit te voeren wordt de code in een speciale bibliotheek gecompileerd, en wordt een bijhorend *.cfg-bestand aangemaakt. Wanneer Player gestart wordt met als parameters de naam van het *.cfg-bestand zal de client code verbinding maken met de Player-server, en via de standaardproxy's communiceren met de driver. Er bestaan al vele drivers voor verschillende robots, die terug te vinden zijn in de Player driver list.
Een interface is een standaard methode waarmee een driver informatie zendt en ontvangt van Player. Net zoals de drivers worden interfaces gecompileerd in Player.
Een device is een driver die gebonden is aan een interface, zodat Player hiermee kan communiceren. Dit betekent dat als je met een werkelijke robot aan het werken bent, je kan communiceren met de verschillende onderdelen (motoren, sensoren etc.). Bij een gesimuleerde robot werk je dan met een gesimuleerd onderdeel, dat op dezelfde manier werkt.

## Player/Stage-bestandstypen

Player/Stage werkt voornamelijk met 3 verschillende bestandstypen:
* een *.world bestand;
* een *.cfg (configuratie) bestand;
* een *.inc (include) bestand;
Het *.world bestand bevat welke elementen er aanwezig zijn in de omgeving (world). Hierin wordt de vorm van de robot beschreven, verschillende objecten en lay-out van de omgeving. Het *.inc bestand heeft dezelfde syntaxis als het *.world-bestand, maar wordt voornamelijk gebruikt om bepaalde entiteiten apart in te voeren (zoals bijvoorbeeld de robot zelf, of een object). Dit is vooral van toepassing als de entiteit die hierin beschreven wordt in meerdere projecten herbruikt wordt. Het *.cfg-bestand vertelt Player alle informatie over de robot, zoals de te gebruiken drivers om te communiceren met de robot. Deze driver kan zowel de werkelijke robot zijn, als een simulatie in Stage (Player ziet Stage dan als een hardwareset). Het configuratiebestand vertelt hoe Player op de robot moet inwerken, en hoe het de data van de driver moet interpreteren om deze aan de code van de robot door te geven. Objecten in het *.world-bestand moeten ook beschreven staan in het *.cfg-bestand indien de code hierop moet inwerken.

## Ondersteunde robots

* Garcia, ontwikkeld door Acroname
* Obot d100, ontwikkeld door Botrics
* epuck, ontwikkeld door e-puck
* ER1 en ERSDK robots, ontwikkeld door Evolution Robotics
* Roomba en Create, ontwikkeld door iRobot
* Khephera en Hemission, ontwikkeld door K-TEAM
* Mindstorms NXT, ontwikkeld door LEGO
* Kinect, ontwikkeld door Microsoft
* PSOS/P2OS/AROS-gebaseerde robots, ontwikkeld door MobileRobots
* mBase, ontwikkeld door MoviRobotics
* NOMAD200, ontwikkeld door Nomadics
* RFLEX-gebaseerde robots, ontwikkeld door RWI/iRobot
* Robotic Mobility Platform (RMP), ontwikkeld door Segway
* Clodbuster, ontwikkeld door UPenn GRASP
* ERRATIC, ontwikkeld door Videre Design
* 914 PC-BOT, ontwikkeld door White Box Robots