Kurzanleitung zum Soccersimulator
Die Befehle und Skripte stehen im Roboterlabor (hawk, kite,
buzzard, eagle, falcon) im normalen Pfad des Benutzers zur Verfügung.
Falls auf einem anderen Rechner gearbeitet werden soll, kann der Quelltext
des Soccersimulators hier
runtergeladen werden. Bitte keine Simulationen auf owl starten,
da dies der Server ist und so die Arbeit an allen Klientenrechnern stark
beeinträchtigt wird.
Starten des Soccerservers:
Der Start des Soccerservers und eines Soccermonitors erfolgt mit Hilfe
des Skripts: sserver
Starten des Soccerservers mit Aufzeichnung von logs:
Um Logs von den Spielen aufzuzeichnen steht das Skript: sserver-with-log
zur Verfügung. Es muss mit zwei Parametern aufgerufen werden, die
für die zwei unterschiedlichen Logs des Soccerservers verwendet werden.
Die beiden Logs unterscheiden sich folgendermaßen:
Die binäre Datei ist eine Aufzeichnung der Daten die vom (Soccer-)Simulator
zum (Soccer-)Monitor übertragen werden. Sie dient dazu ein Spiel später
nochmal anzusehen.
Die ASCII-Datei ist eine Aufzeichnung sämtlicher Kommandos aller Klienten
und dient zur Fehlersuche im Klienten, insbesondere kann hier Festgestellt
werden, welche Kommandos beim Server ankamen.
Abspielen einer Spielaufzeichnung:
Das script logplay dient dazu, aufgezeichnete Spiele wieder abzuspielen.
Es benötigt als Argument den Dateinamen des Logs. Beispiele für
Spiele sind unter http://www.ida.liu.se/~pausc/RC99/Results.html
zu finden. Dort sind auch Varianten zu finden, wie eine dreidimensionale
Darstellung oder eine automatisch erzeugte Analyse der Spiele.
Quelltext und Dokumentation für die Übungen:
Für die Übungen steht eine (von Übung zu Übung erweiterte)
C++ Bibliothek (robotlib) zur Verfügung.
In diesem Archiv ist unter robotlib/doc/index.html der für die Übung
relevante Teil der Klassenbibliothek dokumentiert. Dokumentation zum Simulator
besteht aus dem Manual und dem Quelltext (siehe
oben).
Die exakten Positionen der Flaggen des Spielfeldes sind in folgendem
Headerfile abgelegt:simconsts.
Korrekturen zum Stamina/Turnneck Problem:
ersetze in File robotlib/src/simpacketdata.cc in Methode operator+=() die Zeile:
if (second.turn_necks > turn_necks) stamina1 = second.turn_necks;
durch
if (second.turn_necks > turn_necks) turn_necks = second.turn_necks;
oder lade die korrigierte Fassung der C++ Bibliothek (robotlib-korr)
Weitere Verbesserungen,
sowie ein Beispiel eines Coaches sind nun
in der allerneuesten Version der Bibliothek vorhanden:robotik-uebung-coach.
Es existiert nun die Möglichkeit die
SoccerSimulatorConnection mit der Methode
setNonBlocking() auf non-blocking IO zu schalten, das hat
zur Folge, daß man einen negativen Rückgabewert bekommt, falls
readPacket() fehlschlägt weil kein Paket vorhanden
ist. Bisher (und weiterhin als Defaulteinstellung) war nur
blocking IO möglich, was bedeutet, daß readPacket() im
Notfall auf ein Paket wartet (inaktiv, d.h. ohne Rechenzeit zu
verbrauchen).
Im Verzeichnis example befindet sich nun ein
Beispiel-Coach-Klient. Der Coach muß die Informationen vom Server
explizit anfragen, mittels (look). Als Antwort kommt dann
ein "See"-Paket vom Server, welches ganz normal mittels
readPacket() abgeholt werden kann. Die Kommandos die dem
Coach zu Verfügung stehen, sind im Manual auf Seite 18 und 19
beschrieben. Achtung, bisher sind nur die Antworten auf
(look) Befehle parsbar, aber die Befehle zum Setzen des
Playmode und der Position von Objekten sollten funktionieren (wenn
auch die Antwort vermutlich einen Parseerror produziert), bei
Problemen bitte ich um Rückmeldung.
Achtung: Um den Coach verwenden zu können muß ein spezieller Soccerserver
gestartet werden: sserver-coach.
Link zum Q-Lernen
Die Webversion des "Reinforcment Learning" Buchs von Sutton und Barto:Reinforcement Learning