Soccer Software
Von Programmen und Daten.
Die Software ist neben der Elektronik-, Hardware- und Strategieabteilung der vierte Hauptbestandteil unseres Teams. Die Aufgabe der Software ist es der Strategieabteilung eine Möglichkeit zu geben Befehle an die Roboter zu senden, um ein möglichst flüssiges und Taktisches Spiel zu ermöglichen.
Aber wie kann ein Computerprogramm diese Funktionalität erfüllen? Um dies zu erreichen, ist unsere Software in verschiedene Module unterteilt, die jeweils verschiedene Aufgaben haben. Bevor wir zu den Modulen kommen, einige Informationen über die Software-Sprache und die Erstellungswerkzeuge:
Software-Sprache und Erstellungswerkzeuge
Derzeit verwenden wir C++20 ohne ein größeres Framework, um unsere Module zu implementieren. Wir bauen unsere Software mit CMake und Conan als Abhängigkeitsmanagement. Für die Grafik verwenden wir ein eigenes OpenGL-Rendering mit ImGui als GUI-Backend. Abgesehen von einigen externen Abhängigkeiten (wie protobuf, asio oder boost) versuchen wir, alles von Grund auf neu zu schreiben.
Um mit der Außenwelt (den Robotern und Kameras) zu kommunizieren, haben wir die Module „ssl_interface“ und „robot_interface“. Das „ssl_interface“-Modul empfängt die Daten der Spielfeldkameras und übersetzt die Bilder in unser eigenes Format, sodass wir schnell auf die für uns wichtigen Informationen zugreifen können. Außerdem empfängt es den aktuellen Spielstatus und die Nachrichten des Schiedsrichters und speichert diese Informationen entsprechend ab. Das Modul „robot_interface“ wiederum übersetzt Softwarebefehle in ein Format, das von unserer RF-Basisstation gelesen werden kann, welche dann wiederum direkt mit dem Roboter kommuniziert.
Alle Informationen, die von verschiedenen Stellen kommen, wandern durch ein Modul, den „game_data_provider“, in welchem sie unter anderem gefiltert werden. Dieses Modul entscheidet auch, an was für einem Ort all diese Daten abgespeichert werden. Beispielsweise werden Positionsdaten jeglicher Art an das „world_model“ weitergegeben, welches diese dann interpoliert.
Für die Analyse der Daten ist der „Observer“ zuständig. Dieser ist ein Analysewerkzeug, welches Positionsdaten der Roboter und des Balls bekommt und anhand dieser Informationen Auskunft über den aktuellen Zustand des Spiels (Ballbesitz, Risikofaktor, Zielwahrscheinlichkeit) liefert.
Die Entscheidung was für Aktionen jeder Roboter als nächstes ausführen sollte, ist unserer Strategie überlassen. Diese arbeitet in Python und kann per „pybind11“ und den von uns bereitgestellten Methoden mit unserer Software interagieren.
Die Navigation der Roboter ist ein nicht-triviales Problem, da hierbei sichergestellt werden muss, dass diese weder miteinander, mit Gegnerrobotern oder den Banden kollidieren. Dies wird dadurch erschwert, dass alle Roboter auf dem Feld potenziell mit mehreren Metern pro Sekunde über das Spielfeld fahren können. Mit diesem Problem befasst sich der „localplanner“. Dieser kümmert sich um die Pfadberechnung und darum, die tatsächlichen Bewegungsbefehle an die Roboter zu senden.
Um all diese Prozesse vernünftig darzustellen, schreiben wir zusätzlich unsere eigene Visualisierung „luhviz“. Mithilfe dieser kann man zusätzlich, neben dem generellen Überwachen der Abläufe, auch manuell die Roboter steuern oder strategische Befehle an diese Senden.
Software Module
Strategie
Um eine schnelle Entwicklung im Bereich der Strategie zu ermöglichen ist es notwendig diese in einer Interpretierten Sprache wie Python zu schreiben. Da unsere Hauptsoftware allerdings in C++ geschrieben ist, ist es eine Herausforderung für sich eine Vernünftige Kommunikation zwischen Software und Strategie zu ermöglichen. Um dieses Problem zu überwinden haben wir eine Schnittstelle mithilfe von pybind11 erschaffen, mit welcher die Strategie notwendige Funktionsaufrufe in unserer Software in machen kann.
Navigation
Die Navigation lokalisiert sowohl die Roboter als auch den Ball auf dem Spielfeld. Dazu werden sie als einzelne Koordinatensysteme in einem globalen Koordinatensystem gehandhabt. Diese Vorgehensweise erleichtert die Berechnung der Orientierung und Position zweier Roboter zueinander. Diese Daten können dann gleichermaßen von den Strategie- und den Navigationsmodulen verwendet werden. Das Hauptziel des Navigationssystems ist die Planung der bestmöglichen Route für einen Roboter, um das gewünschte Ziel zu erreichen.
Kommunikation
Das Kommunikationsmodul übernimmt die Kommunikation mit allen Instanzen außerhalb des Netzwerks. Es empfängt Daten und formatiert diese für die weitere Verwendung in unser netzwerkinternes Nachrichtenformat. Auf ähnlicher Weise konvertiert es auch interne Daten in das extern vorgegebene Format. Darüber hinaus fällt das Herstellen und Aufrechterhalten der Verbindung zu externen Geräten ebenfalls in den Aufgabenbereich des Verbindungsmoduls.
Unsere Software ist Open Source!
Im Rahmen der Open Source Challenge des RoboCups 2023 haben wir unsere Software komplett auf GitHub veröffentlicht. Open Source for the Win!
Das Software-Team
Malte Sparenborg
Mitglied seit Januar 2023
Tim Füchsel
Mitglied seit Mai 2022
Sebastian Knackstedt
Mitglied seit Oktober 2021
Steffen Begemann
Mitglied seit Januar 2023
Tobias Pahl
Mitglied seit Januar 2022
Robert Hart
Mitglied seit Oktober 2021
Fabrice Zeug
Mitglied seit November 2019