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.Weiterlesen
Nachdem wir mehrere Jahre den Fridolin 1.0 erfolgreich in studentischen Projekte und bei Wettbewerben eingesetzt haben, wird es nun Zeit, seinen zeitgemäßen Nachfolger zu entwickeln. Die Arbeiten laufen in Pirmasens, Prof. Dr. Martin Wölker. Er und sein Team stellen dieses Teil-Projekt vor – für studentische Arbeiten, ein Studienprojekt usw.:
DualVolt Nano Shield
verbindet mit TXS0108E 8-Bit Bi-Directional, Level-Shifting,
Voltage Translator die 5V Fridolin Hardware mit den 3,3V Nanos.
Das Thema KI ist aktuell schon auf einem Höhenflug und das scheint sich so schnell nicht zu ändern. Bekannt sind hierbei der Platzhirsch Chat-GPT, auch neuere Namen wie Microsoft Copilot. Was jedoch aktuell noch nicht im Fokus steht, ist die Steuerung von Robotern, welcher Art auch immer, durch eine KI.Weiterlesen
Im Juli 2023 waren die R-ZWEI Kickers in Bordeaux, um mit ihrem Code die Weltmeisterschaft in der RoboCup Standard Platform League (SPL) zu bestreiten.
Warum mit ihrem Code? Warum nicht mit ihren Robotern?
Diese Frage ist recht simpel zu beantworten. Am Code haben wir selbst geschrieben, an den Robotern aber nicht selbst geschraubt. Die SPL erlaubt nämlich nur Standard-Platformen (sprich: Alle teilnehmenden Teams haben baugleiche Roboter zu verwenden).
Die Grundidee ist dabei simpel: Wenn alle Teams die gleichen Bots haben und nichts physisch am Bot verändern können, dann sind die Entwickler dazu gezwungen auf kreative programmatische Lösungen für verschiedene technische Probleme und Challenges zu kommen:
– Ein Roboter kann den Ball gegen das Sonnenlicht nicht richtig sehen? -> Das heißt das Kamerabild muss neu ausgewertet werden mit Filtern und Objekterkennung.
– Ein Roboter kann Objekterkennung, aber das Objekt (Ball) ist hinter einen Pfosten oder einen Mitspieler gerollt. -> Es werden Filter benötigt, die den Roboter schätzen lassen, wo der Ball ist.
– Der Roboter kann seine Umgebung sehen, aber was bedeutet seine Umgebung? -> Ein internes Weltmodell muss gebaut werden, welches der Roboter ständig mit den realen Daten abgleicht, um zu wissen, ob er sich auf einem Fußballfeld befindet und wenn ja, wo.
– usw ….
Da die R-ZWEI Kickers im RoboCup noch ein relativ frisches Team sind, haben wir nicht allen Code selbst geschrieben. In solch eine Liga einsteigen und dabei von komplett Null anfangen zu müssen ist für viele Teams, besonders für kleinere Teams, nicht tragbar.
Stattdessen sind wir von einem Release (CodeRelease 2021) des damaligen, so wie heutigen Weltmeisters, BHuman aus Bremen, abgezweigt und haben auf Basis dieses Codes eigene Verhaltens- und Steuerungsupdates für die Roboter geschrieben.
Da die SPL in den letzten Jahren etwas gewachsen ist, wurde sie in zwei Gruppen geteilt: Champions Cup und Challenge Shield, letztere Gruppe ist vor allem für Neulinge und kompetitiv schwächer aufgestellte Teams gedacht.
Da wir noch neu sind und dies unsere erste WM war, sind wir in der zweiten Gruppe angetreten.
Trotz unseres Status als Grünschnäbel in der Liga, waren wir in der Lage uns in unserer Gruppe auf Platz 2 vorzukämpfen und dementsprechend mit einer Trophäe heimzukommen.
Bist du auf der Suche nach einem praxisnahen technischem Wahlpflichtfach, in dem man sich mit Gleichgesinnten kreativ austoben kann? Dann möchten wir dich herzlich zur IMST Challenge einladen!Weiterlesen
Wir sind ein gemischtes Team von Berufsschülern, Studierenden, Professoren, Industriepartnern – gegründet 2020 – mit dem Ziel die Themen Robotik und KI in der Lehre praxisnäher zu gestalten. Wir freuen uns jederzeit über Neuzugänge!
Die KICKERS arbeiten OpenSource. Die aktuellen Entwicklungen finden Sie auf Github:
David Kostka (Angewandte Informatik, HSKL): Bilderkennung
Jannis Schottler (Angewandte Informatik, HSKL): RoboCup Junior League Weltmeister
Jonas Lambing(BBS KL): Cards, Deployment
Markus Dauth (Master Informatik, HSKL): Agiles Testen, Optimierung
Mike Hindi (Angewandte Informatik, HSKL): Bilderkennung
Felix Mayer(Angewandte Informatik, HSKL): Teach-In, Optimierung Steuerung
Über den Link unten könnt ihr unserem Chat auf Discord besuchen. Wenn ihr daran interessiert seid, mehr über uns und unsere Arbeit zu erfahren, dann besucht uns bei einem unserer wöchentlichen Treffen.
Warum wir uns „R-ZWEI KICKERS“ nennen?
Darum 🙌
Was findet ihr auf dieser Webseite?
So ziemlich alles: worum es geht, wie wir arbeiten, welche Arbeitsmaterialien wir für neue Team Mitglieder vorbereitet haben – und ganz unten auf der Seite eine Liste der aktuellen Projekte und offenen Arbeiten. Viel Spaß beim Lesen😉
Worum geht es? 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.
Unser Kooperationspartner abat+ unterstützt uns deshalb 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.
Unsere Naos 😃
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.
GORE 2022
Wegen den letzten uns wohl bekannten, weltweiten Corona Restriktionen wurde der RoboCup 2019 remote abgehalten, wodurch auch einige Turniere wie der SPL nicht in der selben Form stattfinden konnten. Aber innerhalb der deutschen Community wurde schon damals ein „German Open Replacement Event“ geplant, um zumindest trotz reiner remote Teams das Event unter Turnier Bedingungen stattfinden lassen zu können. 2022 war es dann soweit, dass vor dem offiziellen Start des RoboCup 2022 das GORE sich widerholt hat und im vollen Umfang vor Ort statt fand in der Handelskammer Hamburg. Remote Teams nahmen dennoch teil weil diese sogar von außerhalb von Deutschland kamen!
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 Fußball Rasen.
Voraussetzung hierfür ist die im Projekt bereits mitgelieferte IDE CodeLite oder vorzugsweise Visual Studio code. Als Betriebssysteme benutzten wir derzeit Ubuntu 18.04 LTS (empfohlen) und Windows 10 zum Einsatz.
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 vom amtierenden Weltmeister 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 Code Beispiel. 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);
}
}Weiterlesen
TurtleBot 2 ist ein mobiles Roboterkit mit Open-Source-Software, der mit einer Blackboard Architektur namens ROS (Robot Operating System) gesteuert wird. Durch diese Architektur können verschiedene Programmiersprachen im selben Projekt genutzt werden. Diese sind vorwiegend Python und C++. Durch seinen flexiblen Baustil können ebenso diverse Komponenten ergänzt werden, damit auch mehr Funktionalitäten hinzugefügt werden können.
Im Rahmen eines Projektes wurde er von Studenten liebevoll zu Botty McTurtleFace getauft oder kurz Botty.
Videos
Botty fährt vorwärts und umgeht ein Objekt.
Botty fährt ein Viereck.
Ausstattung
Im Auslieferungszustand besaß der Turtlebot 2 mehrere Hardware Komponenten, um seine Umgebung wahrzunehmen und mit ihr interagieren zu können. Alle sind mit einem NUC PC mit Ubuntu 16.04 verbunden, der sich direkt als Onboard PC auf dem TurtleBot 2 befindet. Folgende Komponenten besitzt er:
Greifarm PhantomX Reactor Der PhantomX Reactor Arm ist ein ROS-kompatibler Greifarm. Der Greifarm wird über einen Arbotix-M gesteuert, welches ein modifiziertes Arduino-Board zur Ansteuerung von Servo-Motoren ist. Auf dem NUC des TurtleBot kann eine ROS Anwendung gestartet werden, welche Positionierungsbefehle für den Greifarm annimmt und diese Befehle dann an das Arduino-Board weiterleitet. Hierfür befindet sich ein Arduino-Image auf dem Arbotix-M, welches die ROS-Befehle interpretiert und entsprechend die Servo-Motoren ansteuert.
Lidar Hokuyo URG-04LX-UG01 Es handelt sich hierbei um einen Laserscanner zur Berechnung von Distanzen auf einer horizontalen Ebene. Der Wahrnehmungswinkel beträgt 240° und die Wahrnehmungsreichweite ist bis zu ca. 4 Meter.
3D-Kamera Orbbec Astra Die Orbbec ist eine 3D-Kamera mit einem Sichtfeld von 60° horizontal und 49,5° vertikal. Dazu hat sie eine Reichweite von bis zu 8 meter.
Kobuki-Base Die Kobuki-Base macht den TurtleBot 2 mobil und beinhaltet die benötigte Lithium-Ionen Batterie. Daneben stellt die Basis auch Tasten, LEDs und Bumpers, zur Kollisionserkennung, zur Verfügung.
Allerdings erlaubt seine besondere Baustruktur durch Halterungen und Platten mehrere Etagen über der Kobuki-Base zu stapeln, um auf diese Weise mehr Platz für weitere Komponenten hinzuzufügen. Daher wurden zu den ursprünglichen Komponenten noch ein Mikro für Spracherkennung und Sprachausgabe hinzugefügt. Ebenso wurde die 3D-Kamera ummontiert und an der Unterseite einer der Platten angebracht, damit sie ein besseres Sichtfeld hat.
Arbeiten mit Turtlebot 2
Programmierung
Die Programmierung ist einfacher als man denkt. Wie bereits erwähnt unterstützt ROS sowohl Python, wie auch C++. Im folgenden wird ein Python Beispiel betrachtet, mit dem der TurtleBot 2 ein Viereck fahren soll. Ein Video davon ist weiter oben zu finden.
def drive(meter):
# starte den Motor Service, um mit ihm kommunizieren zu können
rospy.wait_for_service('motor')
job = rospy.ServiceProxy('motor', call) # Die Nachricht ist in diesem Fall ein Objekt "call"
# erzeuge die Nachricht
param=[]
param.append(meter)
command=call()
command.call="forwardByMeters" # die vom Motor erwünschte Aktion
command.param=param # die zurück zu legende Distanz
#sende die Nachricht
response=job(command.call,command.param) # Übermittelung der Nachricht
return response # Ausgabe der zurück erhaltenen Antwort
def turn(angle):
# starte den Motor Service, um mit ihm kommunizieren zu können
rospy.wait_for_service('motor')
job = rospy.ServiceProxy('motor', call) # Die Nachricht ist in diesem Fall ein Objekt "call"
# erzeuge die Nachricht
param=[]
param.append(angle)
command=call()
command.call="turnRigthByAngle" # die vom Motor erwünschte Aktion
command.param=param # die zurück zu legende Distanz in Gradzahl
#sende die Nachricht
response=job(command.call,command.param) # Übermittelung der Nachricht
return response # Ausgabe der zurück erhaltenen Antwort
if __name__ == "__main__":
for x in range (0,4):
print("Going Forward to "+str(drive(1.0)))
sleep(0.1)
print("Turning around to: "+str(turn(90)))
sleep(0.1)Weiterlesen
Der Nao ist ein autonomer, humanoider Roboter entwickelt von dem französischen Unternehmen Aldebaran Robotics. Er besitzt eine Vielzahl an Sensoren, Motoren und Kameras, sowie eine Spracherkennung und -ausgabe. Seit 2008 wurden mehrere Versionen des Nao veröffentlicht . Die aktuellste Version, der Nao V6, ist 2018 erschienen.Weiterlesen