RoboSoccer Gruppe B1 - WS 17/18

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen


Autor: Lars Unverzagt und Daniel Schiewe

Einleitung

In dem Informatik-Praktikum des Wintersemesters 17/18, war es unsere Aufgabe einen vollständigen Fußballroboter aus Lego zu kreieren und zu programmieren. Er soll in der Lage sein einen Infrarotball selbstständig zu finden und zu fangen. Nach der Ausrichtung zum Tor soll er auf das Tor schießen.

Das ganze Spielprinzip unterliegt genauen Regeln, die beinhalten was der Roboter darf und was nicht erlaubt ist. Genauere Informationen zu den Regeln finden sie hier [1].

Teammitglieder

  1. Lars Unverzagt
    • Konstruktion des Roboters
    • Entwicklung einer Spielstrategie
    • Programmierung in BricxCC (NXC)
    • Erstellung des HSHL - Wiki - Artikel
  2. Daniel Schiewe
    • Nachbau des Roboters im Lego-Designer
    • Entwicklung einer Spielstrategie
    • Programmierung in BricxCC (NXC)
    • Erstellung des HSHL - Wiki - Artikel

Das Spielfeld

Gespielt wird auf einem 183cm langen und 122cm breiten RoboSoccer - Spielfeld. Die beiden Tore sind 45cm breit und 14cm hoch. Weitere Informationen finden sie hier. hier [2] finden.

Regelwerk

Das vollständige Regelwerk ist hier [3] zu finden.

Hardware

Als Hardware wurde ein LEGO – Mindstorms - Set benutzt. In diesem Set sind 3 Servomotoren, ein Ultraschallsensor, zwei Tastsensoren, ein Lichtsensor und ein Geräuschesensor enthalten.
Der Lichtsensor und der Geräuschesensor wird in unserem Projekt nicht verwendet, da es für diese Sensoren keinerlei sinnvolle Anwendung für ein erfolgreiches Fußballspiel gibt.
Der Ultraschallsensor könnte beispielsweise zur rechtzeitigen Erkennung der Spielfeldbegrenzung genutzt werden. Mit jenem Sensor lässt sich jedoch nicht eindeutig bestimmen, ob das erkannte Hindernis tatsächlich die Wand der Spielfeldbegrenzung, der gegnerische Roboter oder der Spielball ist. Aus diesem Grund, findet der Sensor bei unserem Roboter ebenfalls keine Verwendung.

Damit der Roboter nun jedoch den Spielball finden und sich dann zum Tor ausrichten kann, benötigt es zusätzliche Sensoren, die in dem LEGO – Mindstorms – Set nicht enthalten sind. Das wäre zum einen ein Infrarotsensor [4], um den Spielball suchen zu können und zum anderen ein Kompassensor [5] zur Positionsbestimmung und zum Ausrichten zum Tor. Beide Sensoren werden von der Firma HiTechnic [6] hergestellt. Die Servomotoren sowie der Tastsensor werden im Folgenden noch kurz vorgestellt.

Servomotoren

Der NXT benutzt Servomotoren, die je nach Belieben nach Zeit, Geschwindigkeit, Strecke und Winkel angesteuert werden können. Die Motoren können gradweise nach vorne oder hinten gesteuert werden. Der NXT-Stein bietet 3 Möglichkeiten um Servomotoren anzuschließen.

Die NXT-Servomotoren sind Elektromotoren mit eingebauten Rotationssensoren, die die Umdrehungszahlen in Grad speichern können. Über verschiedene Kommentare und Befehle lassen sich diese rotieren, vor und zurück fahren oder bremsen.

Tastsensor

Der Tastsensor funktioniert im Grunde wie ein normaler Lichtschalter und besitzt entweder die Position 1 (gedrückt) oder 0 (nicht gedrückt).
Durch das Drücken des Tasters gegen einen leichten mechanischen Federwiderstand wird der Sensorstromkreis geschlossen und somit der elektrische Impuls mit einer ungefähren Stromstärke von 2,2 mA abgesetzt. Wird der Taster losgelassen, so wird der Stromkreis wieder durch die meachanische Feder unterbrochen.

Spielstrategie

Zur Entwicklung der nachstehenden Spielstrategie haben wir das folgende Programm zur Hilfe benutzt. „PaP-Designer“ [7]


Spielstrategie

Spielstrategie

Umsetzung der Spielstrategie

Um die Spielstrategie erfolgreich umsetzen zu können, haben wir folgendes Programm verwendet.Bricx Command Center [8] (kurz: BricxCC) Dieses benutzt die Programmiersprache NXC [9] (Not eXactly C).

Da wir vor uns vor Plagiaten schützen wollen, stellen wir unseren Quellcode nicht online, sondern nur allgemeine Befehle, die wir verwendet haben. Diese können nachstehend gelesen werden oder in folgender PDF nachgelesen werden. Datei:NXC-Befehle.pdf

Motoren
OnFwd(OUT_AC, 75);
Dieser Befehl lässt den Roboter geradeaus fahren. Als Parameter werden dafür die Motoren an den Ausgängen A und C und die Geschwindigkeit (75) übergeben.


OnRev(OUT_AC, 75);
Diese Anweisung funktioniert genauso wie OnFwd(), lässt die Motoren diesmal nur rückwärts drehen, sodass der Roboter rückwärts fährt.


Off(OUT_AC);
Mit diesem Befehl werden die Motoren an den Ausgängen A und C gestoppt.


Float(OUT_AC);
Dieser Befehl bremst wie der Befehl Off(), jedoch wird hier einfach die Stromzufuhr zu den Motoren abgeschnitten, was ein Ausrollen der Motoren zu Folge hat.


OnFwdSync(OUT_AC, 75, 50);
Mit dieser Anweisung lassen sich Bögen mit dem Roboter fahren. Der letzte Parameter gibt dabei den Radius des Bogens an.
Bei 0 würde der Roboter ganz normal vorwärts fahren. Bei immer größer werdenden Werten, fährt der Roboter immer Stärker zur Seite. Der Wert 50 dreht nur einen der beiden Motoren, sodass der Roboter praktisch in einem Winkel von 90° fährt. Ein Wert von 127 lässt die beiden Motoren entgegengesetzt drehen, der Roboter dreht sich also auf der Stelle.


OnFwdReg(OUT_AC, 75, mode);
Dieser Befehl reguliert die Motoransteuerung. Die ersten beiden Parameter dieser Anweisung stehen wieder für die Ausgänge der Motoren und die Geschwindigkeit. Für den letzten Parameter gibt es jedoch drei verschiedene Modi.

  • OUT_REGMODE_IDLE Bei diesem Modus findet keine Synchronisation der Motoren statt.
  • OUT_REGMODE_SPEED Synchronisation durch Anpassung der Geschwindigkeit. Unterschiede werden dabei durch Schneller- bzw. Langsamer- Drehen der Motoren ausgeglichen.
  • OUT_REMODE_SYNC Synchronisierung der Rotationen. Unterschiede werden bei diesem Modus durch Pausieren eines Motors ausgeglichen.


Sensoren

  • Tastsensor

SetSensorTouch(IN_1);
Der Befehl initialisiert den Tastsensor an Port 1.


x = SENSOR_1;
Gibt den Zustand des Tastsensors zurück und schreibt ihn in die Variable x.


  • Infrarotsensor

SetSensorLowspeed(IN_3);
Initialisert den Infrarotsensor an Port 3.


ReadSensorHTIRSeeker2AC(IN_3, richtung, s1, s3, s5, s7, s9);
Gibt in richtung zurück, in welchem Bereich des Infrarotsensors sich eine Infrarotquelle befindet. In s1 bis s9 wird die Stärke der Quelle in den einzelnen Bereichen zur Positionsbestimmung gespeichert.


  • Kompasssensor

SetSensorLowspeed(IN_4);
Initialisiert den Kompasssensor an Port 4.


x = SensorHTCompass(IN_4);
Gibt den Wert des Kompass an Port 4 aus und speichert ihn in der Variablen x.


Weitere nützliche Befehle, Beispiele und Erläuterungen lassen sich in dem Buch „Roboter programmieren mit NXC für LEGO Mindstorms NXT“ [10] von Daniel Braun finden, welches auch von uns genutzt wurde.

Werbeplakat

An dieser Stelle steht das Werbeplakat.


YouTube - Video

Zur bildlichen Veranschaulichung wurde ein YouTube - Video erstellt, welches hier zu finden ist.

Unterabschnitt

  1. Nutzen Sie Aufzählungen
    • mit verschiedenen Schachtelungen
    • und so weiter
  2. zweite Ebene
    • mit erneuter Unterebene

Bilder

Bauen Sie Bilder ein, am besten mit darin gekennzeichneten Stellen, die Sie dann im Text erklären.

Beispielbild mit Quelle [11]

Tabellen

Eine tolle Tabelle ist hier dargestellt.

Spalte 1 Spalte 2 Spalte 3
blabla sowieso sowieso
test sowieso test1

Formatierung

Nutzen Sie zur Formatierung Beispiele, z. B. aus dem weltbekannten Wikipedia selbst (das ist die gleiche Syntax!) oder anderer Hilfeseiten wie z. B. [12].

Zusammenfassung

Was ist das Ergbnis? Das Ergebnis dieses Artikels ist eine Vorlage, mit der Nutzer des Wikis schnell und leicht eigene Artikel verwirklichen können. Diese Vorlage ist Bestandteil der Anleitungen aus den How-To's.


Literaturverzeichnis


→ zurück zum Hauptartikel: Informatikpraktikum WS 17/18