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

Malte Sparenborg

Software-Leitung, Navigation
B.Sc. Informatik

Mitglied seit Januar 2023

Tim Füchsel

Tim Füchsel

Tooling
B.Sc. Informatik

Mitglied seit Mai 2022

Sebastian Knackstedt

Sebastian Knackstedt

Build-Systeme
B.Sc. Technische Informatik

Mitglied seit Oktober 2021

Steffen Begemann

Steffen Begemann

Skills, Navigation
B.Sc. Informatik

Mitglied seit Januar 2023

Tobias Pahl

Tobias Pahl

Filter, Visualisierung
M.Sc. Technische Informatik

Mitglied seit Januar 2022

Robert Hart

Robert Hart

Visualisierung
M.Sc. Technische Informatik

Mitglied seit Oktober 2021

Georg Laios

Georg Laios

Visualisierung
B.Sc. Technische Informatik

Mitglied seit Januar 2023

Nastya Martynkova

Anastasia Martynkova

Simulation, Navigation
B.Sc. Informatik

Mitglied seit Januar 2023

Fabrice Zeug

Fabrice Zeug

Navigation
B.Sc. Mechatronik

Mitglied seit November 2019

Du möchtest den luhbots beitreten?