Wie man dem Veranstaltungskalender und unserer Social Media entnehmen kann, befinden wir – die R-ZWEI Kickers – uns gerade auf den deutschen Meisterschaften der RoboCup Standard Platform League (SPL). Und wer den Live Feed mit verfolgt, wird merken, dass wir bisher noch mehr schlecht, als recht, über den Rasen gestolpert sind.
Aller Anfang ist schwer! So könnte man die Kickers in Schutz nehmen, wenn da nicht mittlerweile 3 Jahre Spielerfahrung im Team stecken würden. Was ist heute also schief gelaufen? Welche Hürden hatten wir beim Aufbauen und an diesem ersten Spieltag, am Donnerstag, den 13.03.2025 zu meistern?
Der Aufbautag

Nach einer knapp 4-stündigen Autofahrt sind die Kickers gestern in Nürnberg angekommen, wobei ich persönlich feststellen muss, dass hier alles irgendwie an ein Labyrinth erinnert: die Straßenführungen, das Layout des Messegeländes, die Einfahrten zu den verschiedenen Toren des tatsächlich enorm großen Geländes, auf dem gerade einige Messen parallel laufen. Einige Male haben wir für kurz geplante Wege länger gebraucht als geplant und uns neu orientieren müssen.
Um die Mittagszeit sind wir jedenfalls gut angekommen und konnten sofort Roboter ausladen und unsere Workstation aufbauen.
Grundsätzlich lief der Aufbau auch gut an: die Workstations sind aus mehreren Richtungen frei zugänglich, mit nahezu optimalen Zugang zu beiden Spielfeldern für die meisten Teams. An jeder Station gab es bereits Netzwerkzugänge und genügend Steckerleisten, sodass wir praktisch sofort unser Setup aufbauen und testen konnten. An dieser Stelle ganz großes Lob an die Organisatoren.
Hier und da gab es ein paar Netzwerkstörungen, aber sowas gehört nunmal zum Aufbautag dazu und die Störungen waren außerdem immer recht fix behoben, wenn man die entsprechenden Hauptverantwortlichen angesprochen hat. Wir hatten an unserer Workstation genug Platz, um relativ zügig alles aufzubauen, unser Roboter-Deployment zu konfigurieren und uns für erste Tests auf den Turnier-Spielfeldern vorzubereiten, womit wir auch beim ersten Fehler angekommen sind.
Fehler 1 – GameController
Im RoboCup wird zur Kontrolle des Spiels elektronische Schiedsrichtersoftware, genannt GameController, eingesetzt, die aktiv den Spielfluss mitkontrolliert. Es hatte sich bereits herumgesprochen, dass bei dem Turnier eine neuere Version dieser Software verwendet würde, weswegen ich im Voraus das aktuellste Release zum Testen heruntergeladen und eingerichtet hatte. Genau hier ist mir aber leider ein kleiner Fehler unterlaufen; dazu gleich mehr, wenn es dann um die ersten Spiele von heute geht.
Leider waren die Stationen mit den elektronischen Schiedsrichtern gestern Nachmittag noch gar nicht aufgebaut, und auch die Netzwerke für die Spielfelder standen noch nicht zur Verfügung, sodass wir mit einem mobilen Hotspot, sowie einem GameController auf dem Team-Notebook, nachgeholfen haben, um trotzdem testen zu können. Einen Test mit den eigentlichen GameControllern und Netzwerkeinstellungen kann man ja immer noch machen, sobald die Netzwerke stehen, so der Gedanke.
Die ersten Tests liefen soweit ganz gut. Klar hat ein mobiler Hotspot nicht die Reichweite, die ein richtiger Router bietet und bei einiger Distanz haben wir die Bots gelegentlich für einige Sekunden aus dem Netzwerk verloren, wenn sie sich zu weit entfernt haben, aber da es bei den ersten Tests vor allem ums Einlaufen ging (wir arbeiten mittlerweile seit einigen Jahren mit der gleichen Hardware und so langsam macht sich leider der Verschleiß bemerkbar), konnten wir diese trotzdem zufriedenstellend abwickeln.
Am frühen Abend stand dann auch tatsächlich ein Netzwerk und wir haben auf beiden Feldern noch einmal getestet, dass wir mit den jeweils eingesetzten GameControllern spielen können. Also hieß es an dieser Stelle erst mal Bots einpacken, eventuell an kleinen strategischen Anpassungen feilen und sonst noch die organisatorischen Meetings mitnehmen. Wir fühlten uns ready fürs Turnier und nutzten die restliche Zeit bis zu den Meetings, um in unserer Unterkunft hier in Nürnberg einzuchecken.

Der erste Spieltag
Theorie und Praxis sind eins wie Seele und Leib, und wie Seele und Leib liegen sie großenteils miteinander in Streit. – Marie von Ebner-Eschenbach
Wie aus meinem Intro und dem Live-Feed (den es auf YouTube auch als Vod zu Feld A und Feld B zum Nachsehen gibt) ersichtlich sein sollte, lief an diesem heutigen erste Spieltag gar nicht mal so viel nach Plan. In der Theorie waren wir bereit, in der Praxis sind uns leider ein paar Fehler unterlaufen.
Fehler 2 – Der Standby-Zustand – Böses Erwachen
Heute morgen, pünktlich um 9 Uhr saßen die R-ZWEI Kickers bereits an ihren Workstations, mit Absicht eine Stunde vor jeglichen Spielen, sodass wir noch Zeit hätten etwaige Änderungen des Vorabends vor ihrem Einsatz im Spiel ein letztes Mal zu testen. So weit, so gut.
Beim Weg zu den Spielfeldern fiel dann aber folgendes auf:
- Die Netzwerke der Spielfelder hatten im Gegensatz zum Vortag scheinbar die Seiten gewechselt
- Der GameController, der an diesem Morgen auf den Maschinen lief, war ein anderer als gestern, direkt erkennbar daran, dass der erste einstellbare Spielzustand, nicht wie bisher, Ready, war, sondern Standby.
Im Schiedsrichter-Meeting am Vorabend wurde noch erwähnt, dass in beiden Ligen – Champions Cup und Challenge Shield – dieses Jahr mit diesem Zustand gespielt wird und während es mich gestern noch verwirrt hat, wie es denn auf dem laufenden GameController umgesetzt würde, prangerte die Antwort als fetter mittiger Button auf dem Bildschirm.
Aber wo war dieser Button gestern? Weder im aktuellen Release noch auf den GameControllern gestern gab es diesen Button. Erst mal unwichtig. Wir mussten testen, ob es funktioniert und gut, dass wir es direkt versucht haben. Es stellte sich heraus, dass wir beim Verarbeiten dieses Zustands einen Fehler hatten, der dafür sorgte, dass sämtliche Roboter wenige Sekunden nach Zustandswechsel abstürzten, im Video (man sieht unseren Testeinlauf direkt zu Beginn der Übertragung) erkennbar an einer Reihe Bots, die sich wieder hinsetzen und weigern zu spielen. Sieht man genau hin erahnt man den Softwareabsturz anhand der rot leuchtenden Augen.
Die Suche nach Fehlern nur wenige Stunden vor einem eigenen Match gestaltete sich wie die nach der sprichwörtlichen Nadel im Heuhaufen. Da ab 10 Uhr zudem die Spielfelder belegt waren, konnten wir – da wir offenbar den falschen GameController hatten – nicht mit Sicherheit testen. Wir machten uns also auf die Fehlersuche, während wir parallel den neuen Code zum GameController herunterluden und bauten.
Unser erstes Spiel: SPQR gegen die R-ZWEI Kickers

VS

Für das erste Spiel gegen das Team SPQR aus Italien hatten unsere Bemühungen leider noch nicht gereicht. Beim Bauen des GameControllers kamen uns leider Issues mit den Tools in die Quere und während wir zwei Stellen identifizieren konnten, die potentiell für den Ausfall verantwortlich waren, mussten wir diese ungetestet in die erste Halbzeit einbauen. Selbst nach einem 10-minütigen Timeout, welches uns gewährt wurde, waren wir leider noch nicht ganz auf Vordermann. Wir bauten also zunächst mit Anpassungen auf beide potentielle Fehlerquellen auf.
So kam es, dass wir die erste Halbzeit ohne Bots starteten und beim Versuch die Bots im Verlauf des Spiel dynamisch rein zu bringen konnten wir nur feststellen, dass unsere Anpassungen den Fehler noch nicht behoben hatten. Die Italiener hatten zwar auch noch ihre Problemchen, jedoch waren sie spielfähig und uns damit einen gewaltigen Schritt voraus. Die erste Halbzeit entschieden sie mit einem 1 – 0 klar für sich.
Wie es so ist mit zwei Fehlerquellen, hatten wir noch drei Optionen übrig. Entweder Fix A bringt etwas und wir können es ohne Fix B versuchen, oder es ist gerade umgekehrt oder wir haben uns beim Fixen vertan und keine der Anpassungen funktioniert. In der Hoffnung eine der Varianten würde funktionieren, haben wir die Bots mit verschieden angepasster Software in die zweite Halbzeit geschickt, damit zumindest das halbe Team (die Hälfte mit dem hoffentlich korrekten Fix) aufs Feld kommt. Leider vergeblich, sodass wir zum ersten Mal, seit ich Teil dieses Teams bin, eine Spielsituation hatten, in der wir für die Länge eines gesamten Spiels nicht spielfähig waren. Auch die Entwickler von SPQR hatten in der Halbzeitpause ordentlich nachgebessert und schafften es so nochmal 4 Tore zu erzielen, weswegen diese Partie im 5 – 0 für SPQR endete.
Also zurück an die Rechner und ran an die Analyse, die Ergebnisse:
- Ich habe den GameController, den wir am Vortag getestet haben, ja bereits als Fehler angegeben und nach Absprache mit den anderen Teams wurde uns klar, wieso dies ein Fehler war:
- Die für das Turnier vorgesehene Version des GameControllers befindet sich noch im Pre-Release. Da ich aus der Release-Liste den aktuellsten heruntergeladen hatte, hatten wir leider den falschen GameController
- Wegen Netzwerkschwierigkeiten war der am Aufbautag bereitgestellte Controller auch noch nicht up-to-date, als wir unser Spiel getestet haben. Da er mit dem von uns heruntergeladenen übereinstimmte, wiegte ich mich in falscher Sicherheit und habe nicht weiter nachgeforscht.
- Da wir unsere Tests entspannt vor den Meetings beendet hatten, um im abgesprochenen Zeitfenster einchecken zu können haben wir den Wechsel der GameController nicht mitbekommen.
- Uns war bei Ankunft bereits bewusst, dass wir im Standby-Zustand noch kein Verhalten implementiert hatten (erwartet wird eine Reaktion auf eine bestimmte Geste des Schiedsrichters, die den Start des Spiels angibt). Seit der WM im letzten Sommer haben wir an anderen Stellen im Code gefeilt und sind zur Umsetzung der Gestenerkennung leider noch nicht gekommen. Wir haben uns dieses Todo tatsächlich erst für die WM im kommenden Sommer aufbewahrt, da wir, wenn auch verzögert, noch als Reaktion auf ein GameController-Signal einlaufen können und unsere Roboter ihren Einlauf oft in 15-20 Sekunden beenden. Leider haben wir hier die eingestellte Verzögerung auch falsch in Erinnerung gehabt, sodass unseren Robotern beim Einlaufen nur 10 Sekunden zur Verfügung stehen und wir den Einlauf zu Beginn eines Spiels nicht beenden können.
Wir holten uns also den GameController aus dem Pre-Release und nutzten die Zeit zwischen den Spielen aktiv, um den Bug im Standby zu beheben. Mit erfolgreicher Beseitigung der Fehlerquellen konnten wir ein erstes Mal aufatmen: Wir werden in diesem Turnier hoffentlich nicht noch einmal ein komplett leeres Feld haben.
Spiel Nummer 2: R-ZWEI Kickers vs. Dutch Nao Team

VS

In unserem zweiten Spiel sind die R-ZWEI Kickers gegen das Dutch Nao Team aus den Niederlanden angetreten. Dieses ist in der Liga bekannt dafür, dass sie seit etwa 2-3 Jahren an einem von Grund auf neuen Framework arbeiten. Von Grund auf bedeutet hierbei unter anderem, dass ihre Roboter in den letzten Jahren teilweise erst einmal das Laufen neu lernen mussten. Hierbei machen die Holländer mit großen Sprüngen im Fortschritt von Wettbewerb zu Wettbewerb auf sich aufmerksam. Nur das strategische Spiel leidet noch etwas darunter, dass man ständig noch an der Kalibrierung der Hardware und grundlegender Software-Komponenten herumdoktert. Andere junge Teams, wir darunter, holen sich die Grundlagen oft von den öffentlich zugänglichen Codebasen erfahrener Teams, was im Turnier einen entschiedenen Vorteil darstellt, aber auch dafür sorgt, dass wir weniger eng mit der grundlegenden Software verrtraut sind und vielmehr auf höheren Abstraktionsebenen arbeiten.
Entsprechend war, trotz vorerst holprigem Spielverhalten, schnell sichtbar, dass die R-ZWEI Kickers strategisch etwas besser da standen. Zumindest bis kurz vor Ende der ersten Halbzeit, wo uns der nächste Fehler auffiel.
Fehler 3 – Communication Burst Mode
Um den Burst Mode zu erklären, sollte man zuerst kurz das Message-Budget erklären:
- Alle Roboter kommunizieren über das WLAN miteinander
- Die Anzahl an Nachrichten (Messages) pro Team pro Spiel ist hierbei auf 1200 begrenzt (Auf YouTube sind die übrigen Nachrichten pro Team jeweils über dem Kamerabild eingeblendet)
- Sollte ein Team mehr als 1200 Messages verwendet haben, werden erzielte Tore aberkannt. Man spielt zu Null.
Der Burst-Mode ist für Spiele gedacht, in denen wir besonders sparsam mit den Nachrichten umgegangen sind. Wenn wir in den letzten Minuten eines Spiels noch ordentlich Nachrichten übrig haben und es unentschieden steht oder wir im Rückstand sind, kann eine durch höhere Anzahl der Nachrichten verstärkte Teamkommunikation das Spiel nochmal verbessern und den entscheidenden Punkt im Turnier liefern, so die Hoffnung.
Leider war der Burst Mode – aus noch nicht fertig erforschtem Grund – für das gesamte Spiel eingestellt. Auf YouTube kann man schön nachverfolgen, wie die Roboter mit bis zu 5 Nachrichten die Sekunde innerhalb von 6-7 Minuten das komplette Budget sprengen. Ein Limiter, der dem Einhalt gebietet, hat uns zum Glück davor bewahrt unser eines erzieltes Tor zu verlieren und uns direkt den nächsten Fehler gezeigt.
Fehler 4 – Kein Fallback für verbrauchtes MessageBudget
Wenn die Roboter nicht mehr miteinander kommunizieren können, sind sie auf sich allein gestellt. Im Fall unserer Implementierung sieht es hierbei für jeden einzelnen Roboter aus, als wenn er allein spielt. Leider fangen wir den Fall des alleine spielenden Roboters in unserer sich dynamisch anpassenden Strategie aber auf eine ganz bestimmte Weise ab: Der Roboter weicht zurück uns verteidigt das Tor.
Nun, was passiert wohl, wenn fünf Roboter der Meinung sind, dass sie mutterseelenallein auf dem Spielfeld stehen? Richtig. 5 Torwarte. Eigentlich hatten wir auch für diesen Fall bereits eine Lösung parat (jeder Bot bespielt dann fest den Bereich, der seiner Position im Lineup entspricht). Jedoch mussten wir feststellen, dass diese Lösung noch nicht greift, weswegen man im Ende der ersten Halbzeit durchaus die berüchtigten fünf Goalies sieht und die Halbzeit somit mit dem 1-0 für uns endete.
In den zehn Minuten Halbzeitpause haben wir versucht unseren Fallback zu fixen, jedoch reichte uns dieser kurze Zeitraum nicht ganz, weswegen man in der zweiten Halbzeit, relativ unspektakulär, auch mehrere Goalies sieht. Das Ergebnis blieb beim 1 – 0.
Auch nach diesem Spiel wurden die Fehler analysiert, behoben und mehrfach auf beiden Feldern getestet und wir hoffen, das wir nach diesem – etwas peinlichen, aber dennoch lehrreichen, Einstolpern ins Turnier, morgen etwas ordentlicher spielen können und somit noch zu einem schönen Turnierverlauf beitragen zu können.
Viel Spaß beim Mitverfolgen und auf einen tollen weiteren Turnierverlauf! 😉
Euer Wilhelm, Team-Captain der R-ZWEI Kickers