HS-KL RoboCup 2021

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

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.

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); } } Weiterlesen

TurtleBot 2

Der TurtleBot 2

Beschreibung und Eigenschaften

 






















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

The Tactigon Tutorial

The Tactigon board (front)

The Tactigon Tutorial

(Please note that this tutorial is work in progress)

Introduction

We appreciate your interest in programming intelligent machines. Here we show you what kind of materials, resources and know-how the working group Smart Machines has to offer. In addition, we are always available for questions and joint projects.

Our idea was to use soft- and hardware for gesture recognition to remotely control drones, mobile robots and robotic arms to intelligently support workflows. A very elegant and easy-to-use method to achieve this is the Tactigon board by Next Industries. It is a very small, easily programmable Arduino based board equipped with a gyroscope, an accelerometer and many other sensors to allow the detection of gestures, and it also comes with enough computing power to interpret them and make them useful.

The advantage of this approach is that the user can control machines intuitively through easily understandable and learnable gestures while retaining a free mind to focus on the actual problem they are working on, not on operating their equipment. And because the Tactigon uses Bluetooth, there are no wires to trip over, either.

In this tutorial we provide you with

  • references to basic information to get you started
  • example code and videos
  • the full API documentation of the Tactigon
  • game breaking issues that we’ve run into, and possible solutions

For advanced users who have already programmed an Arduino board, we have further information, for example on

  • the technical implementation of gesture recognition
  • how to tell the robot where it is, so it can accurately navigate
  • the man-machine interface concept

To develop applications using the Tactigon, the working group Smart Machines has purchased the drone Crazyflie 2.0 among others. You can find all our information on the Crazyflie, including sample code for use with the Tactigon, on this page.

An important note to conclude: All members of the HS-KL can borrow the resources of the working group at any time; for use in lessons and tutorials, or even for a graduation thesis.

 

Getting started

Before you start, you’ll need a system running Windows (tested on 7 and 10, make sure to install the latest windows updates). The Tactigon is not yet compatible with Mac, Linux or other systems (as of September 2018). Additionally, you’ll need a USB-A to micro-USB cable to upload your sketches to the board.

Please note: The Tactigon uses Bluetooth Low Energy (BLE) for wireless communication. Make sure that any other devices you want it to communicate with also support BLE.

The Tactigon is based on the Arduino platform, so for everything to run smoothly, it is recommended that you use the official Arduino IDE for development. You can find it here.
After downloading and installing the IDE, follow this guide to prepare it for the Tactigon.

The full documentation of the Tactigon can be found here and here.

Please note: All code for the Tactigon must be written in C.

 

Bluetooth Low Energy

Follow this tutorial on how to set up BLE on the Tactigon. Please note that there are code samples at the very end of the linked page which the text refers to.

Points to consider:

  • The role of Tactigon can be CENTRAL or PERIPHERAL, depending on the direction in which the connection is to be established. See bleManager.InitRole(TACTIGON_BLE_CENTRAL); in the linked tutorial code above.
  • BLE is not a mandatory part of Bluetooth. Please make sure your hardware is compatible.

Basic concepts

When working with the Tactigon or other BLE devices, you’ll run into the following concepts:

  • UART: Universal Asynchronous Receiver Transmitter. Standard serial interface between PCs and microcontrollers
  • COM: Serial port interface. Refers not only to physical ports, but also to virtual ports, such as ports created by Bluetooth or USB-to-serial adapters.
  • USB HID: Device that receives input from humans and gives output to humans.
  • The Arduino IDE can monitor the current serial (COM) interface [screenshot pending]. This can be very useful for debugging — use Serial.println("example text"); to write example text to the COM port.

Sensor values, reading out values

For a list of all classes supported by the tactigon,

click here Weiterlesen

Hackathon Tage 4 und 5

Am 4. und 5. Tag des Hackathons konnten wir sichtbare Fortschritte verzeichnen. Es ist nun möglich die Flugdrohne mittels T-Skin von Next Industries kontrolliert zu steuern. Mithilfe eines an der Unterseite des Quadcopters angebrachten Sensor wird der Abstand zum Boden gemessen und konstant gehalten. Per Drücken eines Knopfes auf dem T-Skin schwebt die Crazyflie 50cm über dem Boden und kann mit entsprechenden Handbewegungen nach vorne un hinten, sowie seitlich bewegt werden. Ein weiterer Knopfdruck deaktiviert den “Hover-Mode” und die Drohne landet (noch) unsanft. Parameter wie maximaler Neigungswinkel und Höhe des “Hover-Modes” lassen sich im Crazyflie-Client einstellen.

Nach 5 Tagen Hackathon sind die grundlegenden Schritte geglückt, einer Implementierung von Gesten steht nun nichts mehr im Wege.

Hier ein Video zweier Flüge der Crazyflie 2.0 mit einer Steuerung mittels T-Skin:

 

Hackathon Tage 2 und 3

Crazyflie 2.0 & Crazyradio, Tactigon-Board, T-Skin

Wir melden uns zurück vom Hackathon mit einem kleinen Bericht zum 2. und 3. Tag:

Basierend auf den im vorigen Beitrag beschriebenen Fortschritten konnten wir nach einigem Kopfzerbrechen eine (noch zu optimierende) Steuerung für Pitch-, Roll- und Yaw-Parameter mit linearem Ansprechverhalten implementieren. In Abhängigkeit zu den vom Tactigon erfassten Dreh- und Neigungswinkel werden die Werte an den Crazyflie Client weitergegeben, interpretiert und an die Flugdrohne weitergeleitet.

Nun gilt es diese Steuerung zu optimieren, denn bisher konnte kein Flugversuch ohne gebrochenen Rotor beendet werden 😉 Hoffentlich können wir heute zu einem späteren Zeitpunkt ein Video eines erfolgreichen Flugversuchs teilen.

Die folgenden Bilder zeigen das verwendete Equipment (Tactigon-Board, T-Skin, Crazyflie 2.0, Crazyradio), sowie die Ergebnisse erster Flugversuche.

 

Hackathon Tag 1

Am ersten Tag des Hackathons stand vor allem das Synchronisieren des bisherigen Projektstandes im Vordergrund. Schon vor Beginn des Hackathons wurde versucht, dem Crazyflie Client mittels Tactigon erste Steuerbefehle zu übergeben, die letztendlich an die Crazyflie Flugdrohne weitergegeben werden. Die Realisierung geschieht über ein Input-Interface welches in Python geschrieben ist.
Am Ende des ersten Tages konnte eine rudimentäre Steuerung implementiert werden, die darauf basiert vier Werte – übergeben mittels Tactigon – entgegenzunehmen um anschließend Steuerungsbefehle im Crazyflie Client auf den Thrust-Parameter zu mappen. Das folgende Video zeigt den Arbeitsstand zum Ende des ersten Hackathon-Tages.

Vielen Dank an Next Industries für die Bereitstellung des Tactigon T-Skins!

Verwendete Hardware: Bitcraze Crazyflie 2.0, Next Industries Tactigon und T-Skin

 

Hackathon im September: Ergebnisse der Umfrage

Vielen Dank an alle Teilnehmer/-innen der Umfrage zum Beitrag des Arbeitskreises für den ersten Hackathon im Fachbereich I/MST am Standort Zweibrücken. Wie im Vorfeld bereits angekündigt möchte der Arbeitskreis die Umfrage-Ergebnisse veröffentlichen, um einen Einblick in mögliche Themenbeiträge für den Hackathon zu ermöglichen.

Die Mehrheit der Teilnehmer stimmte für die Programmierung eines Open-Source Quadcopters, gefolgt von der Programmierung eines Roboterarms. Den dritten Platz belegten der Alphabot, sowie ein humanoider Roboter mit der gleichen Anzahl an Stimmen. Im Folgenden eine Visualisierung des Ergebnisses. Zu beachten gilt hierbei dass eine Mehrfachauswahl möglich war.