RoboSoccer Gruppe A4 - WS 17/18
Autor: Lukas Kriete
Einleitung
In diesem Artikel möchte wir (Moritz Oberg, Alessio Cebeci, Lukas Kriete, Gruppe A4) euch, unsern Roboter "Bobby" vorstellen. Dieser Roboter ist das Endergebnis unseres Informatikpraktikums Wintersemester 17/18. Die Aufgabe in unserem Praktikum war es, einen Roboter zu konstruieren und zu programmieren, der einen Inferotball erkennt, zu ihm hinfährt, in greift und danach ihn Richtung Tor schießt. Am Ende des Praktikums wir ein Robosoccertunier veranstaltet, in dem unser Robotor seine Fähigkeiten unter Beweis stellen muss. Dieses Projekt findet im Rahmen des Informatikpraktikums unter der Aufsicht von Prof. Schneider statt.
Teammitglieder
Im folgenden werden die Teammitglieder und ihre Aufgaben kurz vorgestellt.
- Moritz Oberg
- Entwicklung und programmieren mithilfe von BridxCC
- Film für Youtube
- Alessio Cebeci
- Entwicklung und programmieren mithilfe von BridxCC
- Konstruktion von Bobby in Lego Digital Designer
- Bau des Roboters
- Lukas Kriete
- Bau des Roboters
- Entwicklung einer Spielstrategie mithilfe von PAP-Designer
- Entwicklung und programmieren mithilfe von BridxCC
- Artikel auf dem Wiki der HSHL
Hardware
1.Schussarm/ Greifarm:
- Der vordere Teil des Arms dient dazu den Ball festzuhalten. Auf der entgegengesetzten Seite befindet sich der Teil zum schießen. Der Motor 3
- ist für den Fang- / Schussarmzuständig. Durch genaue Winkeleinstellung, lässt sich die Schussvorrichtung auf ein Grad genau steuern.
- 2.Unterkonstruktion
- Besteht aus 2 Motoren. Die Motoren können die Rotationen auf einen Grad genau bestimmen. Dabei ist die maximale Umdrehungen 160 Umdrehungen/ Minuten und das ::maximale Drehmoment ca. 0,2 Nm.
- Die Unterkonstruktion besteht aus zwei Servormotoren. An den sind extra große Reifen, wodurch es Bobby möglich ist, schnelle zum Ball zu fahren oder sich zu drehen.
- Außerdem haben wir bei Bau darauf geachten die Unterkonstruktion möglichst tief zu bauen, da dadurch der Schwerpunkt von Bobby weiter unten ist.
- Das dritte Rad ist eine Kugel, wodurch sich Bobby sehr gut drehen kann.
- 3.NXT-Brick
- Der NXT- Brick ist das "Gehirn" von den Bobby. Bei ihm werden alle Sensoren und Motoren angeschlossen.
- 3.Infarot Sensor:
- Der Inferotsensor (IRSEEKERV2 )besitzt 5 Detektoren, die in einem Radius von 240 Grad, Inferotsignale erfassen können. Diese 5 Detektoren lassen sich in 9 Sektoren unterteilen um eine genauere Richtung des Inferotsignales zu bestimmen. Basierend auf dem pyroelektrischen Prinzip, lässt sich sogar die Intensität der Inferotstrahlen in den Detektoren bestimmen. Dadurch kann ein Abstand des Inferotball`s ermittelt werden.
- 4.Tastsensor:
- Dieser Sensor hat die Funktion, zu erkennen ob sich ein Ball in der Schussvorrichtung befindet. Prallt der Ball gegen den Splint des Tastsensors, bekommt der NXT das Signal 1. Dieses Signal kann mit Hilfe ::des :Programmes weiter verarbeitet werden.
- 5.Kompass:
- Der Sensor führt 100 Messungen pro Sekunde durch und übermittelt eine Zahl zwischen 0 und 359, die den Winkel zum Nordpol ausdrückt. Der Sensor verfügt über zwei Modi:
- Im Lesemodus übermittelt der Sensor jedes Mal einen Wert, wenn er vom intelligenten Lego Mindstorms NXT-Stein einen Lesebefehl erhält.
- Im Kalibriermodus kann der Sensor so eingestellt werden, dass er störende Magnetfelderdes Roboter-Elektromotors, der Batterien usw. neutralisiert.
- Die Werte können als relative oder absolute Werte angezeigt werden. Das erleichtert die Programmierung, wenn der Roboter einer bestimmten Richtung folgen soll.
Spielstrategie: PAP
Hauptproramm
Das Hauptprogramm besteht im Wesendlichen aus einer Dauerschleife welche die beiden Fubnktionen „zuballfahren“ und „ball“ enthält. Diese werden so lange ausgeführt bis das Programm manuell abgebrochen wird.
Zuballfahren
In der Funktion wird zunächst die Intensität des Infrarotsignals überprüft. Überschreitet die Intensität einen bestimmten Wert reduziert der Roboter seine Geschwindigkeit. Ansonsten fährt der Roboter mit voller Geschwindigkeit zum Ball während er seine Richtung immer anhand des direction-Wert des Infrarotsensors anpasst. Ist der Tastsensor des Roboters ausgelöst und die Intensität des Signals groß genug, gibt die Funktion keine weiteren Fahrbefehle und der Roboter hält an.
Ball
Die Funktion „ball“ schließt den vorhandenen Fang/Schuss-arm des Roboters sobald der Tastsensor eine Berührung registriert und ein bestimmter Infrarotwert überschritten wird. Wenn nach schließen des Arms der Tastsensor nicht gedrückt und das Infrarotsignal abgefallen ist, öffnet er den Arm wieder und bringt ihr in die Ausgangssituation. Ist der Ball gefangen ruft die Funktion eine weitere Unterfunktion „torausrichten“ auf welche so lange läuft bis der Roboter richtig ausgerichtet ist. Ist dies geschehen schießt der Roboter den Ball und bringt den Arm nach einer kurzen Wartezeit wieder in die Ausgangslage.
Torausrichten
Die Funktion richtet den Roboter zum Tor aus indem sie sich am Kompasssensor orientiert und den Roboter in die Richtung dreht, in die die wenigsten Grad zu drehen sind. Gibt der Kompass den geforderten Wert zurück, stoppt die Funktion.
Ansteuerung der Aktoren
Als Aktuatoren haben wir nur die Motoren von NXT. Die nachfolgenden Befehle, beziehen sich auf die Möglichkeiten der Ansteuerung der Motoren:
- OnFwd() oder OnRev()
- RotateMotor()
- OnFwdReg() oder OnRevReg()
- OnFwdSync() oder OnRevSync()
- Off() oder Float()
- Motor fährt geradeaus mit einer angegeben Geschwindigkeit
- OnFwd(Ausgang_Motor, Leistung);
- Motor fährt rückwärts mit einer angegeben Geschwindigkeit
- OnRev(Ausgang_Motor, Leistung);
- Motor rotiert mit einer angegeben Geschwindigkeit bis zu dem angegebenen Winkel
- RotateMotor(Ausgang_Motor, Leistung, Winkel);
- Regulierungsmodus, zum synchronen Motorenlauf in Fahrtrichtung Vorwärts
- OnFwdReg(Ausgang_Motor, Leistung, REGMODE);
- Regulierungsmodus, zum synchronen Motorenlauf in Fahrtrichtung Rückwärts
- OnRevReg(Ausgang_Motor, Leistung, REGMODE);
- Automatisches fahren einer Kurve durch Angaben eines Radius in Fahrtrichtung Vorwärts
- OnFwdSync(Ausgang_Motor, Leistung, Radius);
- Automatisches fahren einer Kurve durch Angaben eines Radius in Fahrtrichtung Rückwärts
- OnRevSync(Ausgang_Motor, Leistung, Radius);
- Motor bremst sofort ab
- Off(Ausgang_Motor);
- Motor läuft aus
- Float (Ausgang_Motor);
- Begriffe:
- On = An; Fwd = Vorwärts; Rev = Rückwärts; Rotate = rotieren; Reg = Regulation; Off = Aus; Flout = gleiten
Ansteuerung der Sensor
- Tastsensor:
- Der Eingang X wird der Funktion des Sensors zugewiesen.
- SetSensorTouch(IN_X)
- Mit dieser Funktion, wird der Zustand (1/0) des Tastsensors ausgelesen.
- Sensor(IN_X)
- Kompasssensor:
- Mit diesem Befehl wird der Kompass mit dem Eingang X verbunden
- #define COMPASS IN_X
- Mit der Funktion wird der Kompass ausgelesen und gibt einen Wert zwischen 0 und 359 raus
- SensorHTCompass(IN_2)
- Mit diesem Befehl wir der Inferotsensor mit dem Eingang X verbunden
- #define IRSEEKER IN_X
- Mit der Funktion wird der Inferotsensor ausgelesen
- ReadSensorHTIRSeeker2AC(IRSEEKER, dir, s1, s2, s3, s4, s5);
Spielfeld
- Breite Spielfeld : 183cm
- Länge Spielfeld : 122cm
- Länge 11-Meter-Raum :30cm
- Breite 11-Meter-Raum : 74cm
Werbebanner
Link zum Video
Um unseren Booby in Action zu sehen und um uns kurz vorzustellen klicke auf den Link
Was haben wir gelernt?
- Grafische Programmierung mithilfe von NXT 2.1
- Praktische Anwendung der Programmierkenntnisse in der Sprache C
- Umgang mit SVN
- Sensoren und ihre Funktionsweise
- Teamarbeit und Aufgabenverteilung
- Nachvollziehabre Dokumentation im Quellcode
- Erstellung eines Filmes und eines Werbeposters
→ zurück zum Hauptartikel: Informatikpraktikum WS 17/18