HS KL geht zur RoboCup German Open 2021!

Der RoboCup soll die Robotik und KI Forschung fördern und das vor einem öffentlichen Publikum. Ein Fußball spielender Roboter mag  wie eine eher wissenschaftliche Herausforderung aussehen, aber man muss dabei eine Fülle von Standard Problemen – wie man sie aus der heutigen Industrie kennt – lösen, und ist damit ein guter Einstieg in die Welt der KI.

RoboCup 2014, Joao Pessoa, Brasilien. Quelle: Uni Bonn

Der AK Smart Machines ruft alle interessierten Studierenden, Professoren, und interessierte Unternehmen auf, in unser Team einzusteigen, und es gemeinsam bis bin die Qualifikation für den RoboCup 2021 zu schaffen!

Unser Kooperationspartner abat+ unterstützt uns bei Projekt- und Bachelor-Arbeiten in den Feldern robuste Bildverarbeitung, innovative Roboter Programmierung und Prozessoptimierung in der diskreten Fertigung, um neue Geschäftsfelder für die Industrie 4.0 zu erschließen.

Was ist die RoboCup Standard Platform League?

Der Robot Soccer World Cup ist die Fußball WM für Roboter. Der erste Wettkampf wurde 1997 bestritten und heute werden neben Fußball auch viele andere Wettkampf Arten ausgefochten, wie z. Bsp. auch die RoboCup Rescue League, bei dem die Roboter auf eine Rettungsmission entsandt werden.

Beim RoboCup lassen verschiedene Teams aus aller Welt ihr 5 Roboter in 2 Mannschaften gegeneinander wetteifern und dabei um den Fußball kämpfen, den Gegner austricksen und Tore schießen.  Die Standard Platform League (SPL) verwendet ausschließlich den gleichen Roboter, den NAO v6.

Die kleinen Roboter müssen sich vollständig autonom über das Spielfeld bewegen und dürfen nur wenig miteinander kommunizieren, um dennoch eine Team Strategie zu entwickeln, die zum Sieg führt. Dabei sollen sie trotz allem unabhängig voneinander agieren können.

Arbeiten mit dem NAO



Arbeitsumgebung

Der kleine humanoide Roboter NAO ist unser Spieler auf dem Spielfeld und wir sind sein Trainer.
Bei uns wird er sowohl mit C++ als auch mit Python programmiert. Dabei wird Python bei der Bilderkennung, wie zur Erkennung des Balls und des Tors, verwendet und C++ für den ganzen Rest. Darunter fällt zum Beispiel seine Bewegung über den Fussballrasen.

Voraussetzung hierfür ist die im Projekt bereits mitgelieferte IDE CodeLite und das Betriebssystem Ubuntu 18.04 LTS.

Außerdem gibt es auch einen Simulator. Dann muss man nicht immer vor Ort sein um seinen Code zu testen. Der Simulator ‘SimRobot’ ist sogar von einem mehrfachen Siegerteam des RoboCup (B-Human, Uni Bremen und DFKI) entworfen.


Beispiel Code

Wie gut müsst ihr programmieren können? Beantwortet es euch selbst.

Unten seht ihr ein paar Code Beispiele. Wenn ihr in der Lage seid, nachzuvollziehen was dort passiert, dann seid ihr bestens vorbereitet.

Sollte der NAO umfallen muss er laut Regelwerk selbst in der Lage sein wieder auf zu stehen. Der folgende Code erreicht das.

void FallEngine::safeFall(FallEngineOutput& output) const
{
  // set stiffness of each joint
  for(int i = 0; i < Joints::numOfJoints; i++)
    output.stiffnessData.stiffnesses[i] = 10;

  // falling backwards ? sit up.
  if(output.fallingBackwards)
  {
    MotionUtilities::sit(output);
  }

  // falling forward ? stand up.
  else if(output.fallingForward)
  {
    MotionUtilities::stand(output);
  }
}

Zuerst wird die Festigkeit alle Gelenke des Roboters festgelegt und anschließend das Bewegungsmuster zum Aufstehen zu starten. Dabei wird unterschieden, ob er nach vorne oder hinten umgefallen war. Als humanoider Roboter muss der NAO ebenso wie wir Menschen unterschiedliche Bewegungen ausführen um aufzustehen, je nachdem in welche Richtung er gefallen ist.



Dieser Code positioniert die NAOs innerhalb des Simulators SimRobot an zufällige Positionen.

srand(Time::getCurrentSystemTime());
      
      for(int i = 0; i < numOfRobots; i++)
      {
          if(robots[i].simulatedRobot)
          {
              // calculate the difference between the outermost points for length and width of the field
              // scale down by 50% to end up in a quadrant
              float dx = (fieldDimensions.xPosOpponentGroundline - fieldDimensions.xPosOwnGroundline) * 0.5f;
              float dy = (fieldDimensions.yPosLeftSideline - fieldDimensions.yPosRightSideline) * 0.5f;
              
              // randomize pos by getting a random value and clamping it to the respective x / y range by using modulo
              float x = fieldDimensions.xPosOwnGroundline + fmodf(static_cast<float>(rand()), dx);
              float y = fieldDimensions.yPosRightSideline + fmodf(static_cast<float>(rand()), dy);
              
              // move robot to the randomized position
              robots[i].simulatedRobot->moveRobot(Vector3f(x, y, dropHeight), Vector3f(), false);
              
              // generate another random position
              x = fieldDimensions.xPosOwnGroundline + fmodf(static_cast<float>(rand()), dx);
              y = fieldDimensions.yPosRightSideline + fmodf(static_cast<float>(rand()), dy);
              
              // move ball
              robots[i].simulatedRobot->moveBall(Vector3f(x + 100, y + 100, 0), false);
          }
      }

Der Code wirkt zwar recht groß ist aber doch sehr simpel.

Nachdem der Seed festgelegt wurde iteriert eine Schleife über alle im Simulator vorhandene NAOs. Mit ‘dx ‘und ‘dy’ wird ein Bereich im Spielfeld definiert, in dem die NAOs positioniert werden. Dieses Feld wird aus den Größenverhältnisse des Fußballfelds erzeugt, die im Objekt ‘fieldDimensions’ hinterlegt sind.

Mit den Informationen über den Rahmen werden nun die NAOs auf zufälligen x und y Koordinaten des Spielfelds platziert und anschließend erhält auch der Ball eine zufällige Position.

In diesem Code Abschnitt passiert also nicht mehr als die verschiedenen Roboter und den Ball auf zufälligen Positionen auf dem Spielfeld zu verteilen.

Teilnahme des AK Smart Machines

Der Arbeitskreis Smart Machines der HS KL plant eine Teilnahme zur Qualifikationsphase der German Open in Magdeburg, April 2021.

 

Durch die Teilnahme wollen wir allen Studenten für die KI begeistern und sie im selben Moment fördern. Das bietet ihnen die einzigartige Möglichkeit den kleinen NAO als Freund und Helfer kennen zu lernen und mit ihm zu arbeiten. Vielleicht ergibt sich sogar Kontakt zu einer KI orientierten Firma, da der RoboCup auch außerhalb Deutschlands sehr populär ist.

Also was brauchen wir noch für eine erfolgreiche Teilnahme am RoboCup German Open 2021?

5x NAO V6
Ein Fußballfeld als Testumgebung
Eine Arbeitsumgebung
Einen Simulator
Einen Monster PC mit 3 GPUs und 64 GB RAM
Insider Wissen von ehemaligen Weltmeistern
Einen Gitlab Server
Ein Team  

Ein Link zum Gitlab Server findet ihr hier.

Wenn ihr ganz neugierig seid, findet ihr hier das Laborbuch, indem unser derzeitiger Fortschritt und Arbeitsweise beschrieben wird.

Da wir auch selbst über die nötigen NAOs verfügen, ist man keineswegs auf den Simulator angewiesen. Es kann ebenso mit den realen NAOs gearbeitet werden.

Die Vorarbeit ist also bereits getan; das einzige was fehlt bist du!

Hast du Interesse? Dann melde dich einfach und mach mit. Es gibt keinen Zwang, keine Verpflichtungen, keine Bürokratie. Also wenn du mit machen möchtest, dann meld’ dich einfach bei uns. Am Ende dieser Seite findest du die aktuelle Liste aller Projekte; Deine Vorschläge für weitere Themen sind willkommen.

Erste Schritte, Juli 2020

Auf den folgenden Videos sieht man unsere Naos im Keller des O028 auf einem 1/4 Wettbewerbsfeld:

Torschuss Nao auf ein leeres Tor

Und hier kommt ein Verteidiger zur Hilfe, und klärt die Situation:

 

Zwei kleine Mannschaften: Verteidiger klärt

 

Projekte, Bachelorarbeiten

Hier findest Du eine Übersicht über aktive und offene Arbeiten (Stand: 09/2020)

StatusFormTitelBeschreibung
aktivPraxisphase + BachelorRobuste Bildererkennung in Echtzeit bei Verfügbarkeit nur geringer Ressourcen – TensorFlow Lite im praktischen Einsatz“Systeme zur Bilderkennung wie TensorFlow und Torch büßen drastisch an Performanz ein unter wechselnden Bedingungen wie geänderten Lichtverhältnisse, verwackelten und verschmutzen Kamerasystemen, unbekannten Objekten.
aktivPraxisphase + BachelorVereinfachtes Teach-In von Robotern durch Muster-Analyse des Einlernens mittels Data Mining Modellen“Modellierung einer Robotersteuerung auf drei Ebenen (Maschinenbewegungen, Muster von Bewegungen, Arbeitsabläufe) Erfassung von Rohdaten im Simulator von B-Human Teach-In von Bewegungsmustern Erfassung und automatische Analyse von komplexen Abläufen (hier genannt: Strategien)  
offenPraxisprojektPhysik-Engine im Simulator realitäts-naher programmierenBsp.: Schussweite, Genauigkeit, Logging zur Gewinnung von Datenspuren Team-Stärke: 2 Personen
offenPraxisprojektNeue Bewegungsmuster für den Nao erprobenBsp.: Verbesserte Stellung zum Ball, Dribbling, Doppelpass spielen Team-Stärke: 2 Personen
offenPraxisprojektEinfache Team Kooperationsstrategien entwickelnBsp.: Pässe spielen, Raumdeckung Team-Stärke: 2-3 Personen
offenPraxisprojektCI/CD mittels Docker Container automatisierenVorhandenen Container erweitern um mehr Testfälle und automatische Auswertung Team-Stärke: 1-2 Personen
    


Teile diese Seite