RoboCup German Open 2013: Zusammenfassung

Leider haben wir erst jetzt Zeit gefunden, einen Artikel zu schreiben. Hier nun die Zusammenfassung der der deutschen Meisterschaften 2013 in Magdeburg: Nach der unkomplizierten Anreise am Donnerstag mit dem Zug von Osnabrück über Hannover nach Magdeburg sind wir nach Beziehen unserer Zimmer in der schön zentral gelegenen Jugendherberge direkt zum Messegelände gefahren, um unseren Roboter zu testen. Der Wettbewerb fing für uns erst am Freitag an, weshalb wir den gesamten Donnerstagnachmittag und Freitagvormittag Zeit zum Testen hatten. Der Roboter funktionierte sehr gut, wir mussten nur einige Feineinstellungen vornehmen, da der Testparcours in unserer Schule nach einem etwas anderem Schema aufgebaut ist. Eine wesentliche Verbesserung war die Kollisionserkennung über die Entfernungssensoren: Bumper sind doch, zumindest so, wie wir sie angebaut haben, recht unzuverlässig (da mechanisch => decken nur kleinen Bereich ab und reagieren recht spät). Deshalb nutzen wir nun zwei außen liegende Entfernungssensoren, um eine Kollision mit einer Wand zu erkennen, was uns schon mehrmals geholfen hat. Freitag fing dann der Wettbewerb an. Wir waren zwar recht nervös (es kann ja immer etwas schief gehen). Der Roboter fuhr sehr zuverlässig durch den Parcours, allerdings haben wir ein Opfer nicht erkannt, weshalb wir dreißig Punkte unter der Maximalpunktzahl lagen. Der zweite Wertungslauf lief leider nicht so toll: Der Roboter hatte einen kleinen Bug in der Software, was wir leider erst später erkannt und behoben haben: Wenn der Roboter nach dem Drehen nicht 100%ig gerade an einer sehr langen Geradeausfahrt (also mehrere Fliesen hintereinander) stand, hat er in der Karte einige Fliesen einfach übersprungen. Die Karte war dann also unbrauchbar und nach der Hälfte der erkannten Opfer mussten wir den Wertungslauf abbrechen, da der Roboter stehen geblieben ist (wir hatten zuvor keine Zeit, eine gute Fehlererkennung für eine solche Situation zu implementieren). Zum Glück gab es ja einen Streichlauf und nach der Analyse des Videomaterials wurde der Fehler schnell behoben, dennoch durfte ab jetzt in den Wertungsläufen kein Fehler mehr passieren. Im dritten Wertungslauf hatten wir dann auch die volle Punktzahl erreicht (dieses war auch der erste Wertungslauf, bei dem es ein Opfer gab, das die Teams, die nur mit der rechten Hand Regel gearbeitet haben nicht erkennen konnten). Insgesamt standen wir so nun auf dem zweiten Platz. Das nächste Team (ein Team mit extrem viel Glück, LEGO, haben durch Zufall einige Opfer erkannt => wäre ein Roboter gewesen, den wir in einer Woche hätten zusammenschustern können) war aber sehr dicht dran. Die Hauptrunde hatte also entschieden, ob wir uns für die WM qualifizieren oder nicht. Wir haben noch bis in den Abend getestet, alles schien perfekt. Abends war dann das Social Event, auf dem die aktuellen Ergebnisse bekannt gegeben wurden. Am nächsten Tag stand dann der Hauptlauf an: Sehr nervös, aber zuversichtlich gingen wir in den Wettkampf. Wieder eine Arena mit einem „Inselopfer”, was die meisten anderen Teams also nicht hätten finden können. Leider passierte dann, was niemand so wirklich gedacht hätte: Der Roboter fuhr gegen eine Wand und schon war der Wertungslauf hinüber… Später erfuhren wir, dass wir nach dieser vermasselten Hauptrunde von dem 2. auf den 5. Platz gerutscht sind. Sehr schade. Eine spätere Analyse des Problems ergab, dass eine lange Geradeausfahrt, die uns sowieso vorher schon Probleme gemacht, die allerdings behoben werden konnten, uns aus dem Konzept brachte. In dieser langen Geradeausstrecke von acht Fliesen befand sich des Weiteren eine Sackgasse. Konstruktionsbedingte Ungenauigkeiten haben, da keine Referenzpunkte für die Entfernungssensoren zur Verfügung standen, einen Fehler von mehreren cm verursacht.

Abschließend können wir sagen, dass uns der RoboCup 2013 bis hierhin viel Spaß gemacht, auch, wenn wir etwas enttäuscht nach Hause fahren mussten. Wir sind uns sicher, dass es nächste Saison mit der Weltmeisterschaft, die in Brasilien stattfindet, klappen wird und wir haben auch schon ein Konzept für eine überarbeitete Version unseres Roboters im Kopf. 😉

Deutsche Meisterschaften: Vorbereitung: Endspurt

Noch drei Tage bis zum Beginn der deutschen RoboCup Meisterschaften 2013 in Magdeburg, das heißt ENDSPURT! In den letzten zwei Wochen konnten wir einiges verbessern. Wir haben verschiedene kleine Fehler in der Software und in der Hardware behoben, die auf Anhieb gar nicht aufgefallen sind, aber einiges ausmachten. Der Sensor zum Erkennen der Sackgassen befindet sich so nun in der Mitte des Roboters, die Fahranweisungen wurden auf die neuen Entfernungssensoren umprogrammiert, ein recht schwerwiegender Fehler in der Hardware, der zeitweise bei Stößen Kurzschlüsse oder Busabstürze und somit einen Neustart verursacht hat, wurde entfernt, ein gebrochener LEGO-Verbinder, der den Kontakt der Zahnräder verhinderte wurde ausgetauscht und vieles mehr.

Des Weiteren haben wir den Algorithmus von Gaston Tarry implementiert. Wir fahren nun sehr einfach und recht zuverlässig alle Fliesen des Labyrinths ab um alle Opfer (auch auf möglichen Inseln) finden zu können, des Weiteren stoppt der Roboter automatisch auf der Startfliese. Der Algorithmus selbst ist super, Probleme kann es aber geben, wenn der Roboter die Orientierung verliert (wenn er beispielsweise sehr ungünstig gegen eine Wand fährt, aber dagegen sind die Taster bzw. Bumper vorne am Roboter sehr effektiv). Da müssen nur noch Feineinstellungen gemacht werden, dann klappt das Ganze (hoffentlich) gut.

Generell werden wir in Magdeburg aber etwas auf Glück setzen müssen. Wir haben ja nur zwei Optionen:

  1. Wir deaktivieren die Karte und folgen zuverlässig der rechten Wand
    –> Es werden keine Fehler passieren, dafür werden wir definitiv aufgrund der Geschwindigkeit unseres Roboters nicht unter den ersten zwei Plätzen landen (vielleicht 3. oder 4.).
  2. Wir benutzen den Algorithmus und die Karte und riskieren eine vordere Platzierung
    –> Wenn alles klappt, werden wir mindestens 2. Platz, da nur noch ein anderes Team eine Karte nutzt. Wenn Fehler passieren, werden wir vielleicht nur auf dem 5. oder schlechteren Platz landen, aber das kann uns ja egal sein, da nur die Qualifikation zur WM wichtig ist und wir die mit Option 1 sehr wahrscheinlich nicht schaffen würden.

Wir haben uns logischerweise für die zweite Option entschieden (nur so haben wir Chancen auf eine Qualifikation). Das muss sein. Sehr wahrscheinlich werden wir den Roboter aber noch rechtzeitig zuverlässig (genug) durch den Parcours fahren lassen können, da wir morgen und übermorgen noch jeweils ca. 2 Stunden Zeit zum Testen im großen Parcours der Schule haben und Donnerstag den ganzen Nachmittag in Magdeburg.

Wir werden also zuversichtlich aber wahrscheinlich mit einem mulmigen Gefühl in den Wettkampf gehen. 😀

Zwischenstand: Karte

Nach etwas mehr als zwei Woche programmieren, programmieren, programmieren funktioniert unsere Karte nun perfekt. Wir haben noch zusätzliche Entfernungssensoren mit einer höheren Reichweite hinzugefügt, durch die wir nun größtenteils auf die Encoder verzichten können (wenn der Roboter nämlich irgendwo hängen bleiben sollte, drehen die Motoren durch, die Encoder zählen weiter und der Roboter ,,denkt“, er wäre die entsprechende Strecke gefahren, was natürlich die Karte unbrauchbar macht).

Unsere Kartenerstellung funktioniert so, dass wir immer, wenn wir eine Fliese (also 30cm) gefahren sind oder wir uns gedreht haben überprüfen, ob und wo Wände neben dem Roboter sind und ggf. eine Variable für die jeweiligen Wände in einem mehrdimensionalen Array hochzählen. Da wir mehrere Sensoren auf einer Seite haben, können wir die Schrittweite, wie weit die Variable also hochgezählt werden soll, auf die Zuverlässigkeit des Sensors anpassen (ein analoger, optischer Entfernungssensor in der Mitte des Roboters ist zuverlässiger als ein Ultraschallsensor, da das Auslesen eines Ultraschallsensors bei uns relativ lange dauert und außerdem die Wände den Schall des Sensors ungünstig reflektieren können).

Nun sind wir mit der Verarbeitung der Karte im Roboter angefangen. Zur Navigation werden wir den Algorithmus von Gaston Tarry benutzen:

  1. Wenn du einen Gang betrittst, markiere den Eingang mit dem Wort Stopp. Betritt nie einen Gang, der mit Stopp markiert ist.
  2. Betrittst du das erste Mal eine Kreuzung (daran erkennbar, dass an keinem Gang eine Markierung angebracht ist), markiere den eben verlassenen Gang mit dem Wort zuletzt.
  3. Gibt es an einer Kreuzung Gänge, die keine Markierung besitzen, wähle einen beliebigen davon, um weiterzugehen. Sollte es keine unmarkierten Gänge mehr geben, betritt den mit zuletzt markierten Gang.

Dieser Algorithmus hat den riesigen Vorteil, dass er sehr flexibel ist, Inseln und abgeschlossene Bereiche (in denen z.B. das Netzteil steht) kein Problem sind und dass er automatisch am Startfeld anhält, wenn jede Fliese mindestens einmal befahren wurden. Einen kleinen Haken hat die ganze Sache allerdings: Bei Foyern, also bei großen, freien Flächen im Parcours, wenn sich der Gang also von einer Fliesenbreite auf mehrer Fliesenbreiten aufweitet, fährt der Roboter ziemlich oft in dem Foyer hin- und her, d.h. wir benötigen relativ viel Zeit. In Anbetracht der Tatsache, dass wir durch den Algorithmus aber alle Opfer finden können und dass es nur noch etwas mehr als zwei Wochen bis zu den German Open sind, sollte das aber das kleinste Problem sein.

Nebenbei wurden übrigens die Quoten für die WM, die dieses Jahr in Eindhoven stattfindet, veröffentlicht. In Rescue B werden dieses Jahr 14 Teams teilnehmen, aber nur zwei Teams kommen weiter. Zum Vergleich: Letztes Jahr haben zehn Teams teilgenommen und es durften drei Teams zur WM. Das wird also ziemlich knapp, mit etwas Glück kann das aber funktionieren.