RoboSoccer Gruppe A4 - WS 17/18: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
(169 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 4: | Zeile 4: | ||
== Einleitung == | == Einleitung == | ||
In diesem Artikel möchte wir (Moritz Oberg, Alessio Cebeci, Lukas Kriete, Gruppe A4) euch, | In diesem Artikel möchte wir (Moritz Oberg, Alessio Cebeci, Lukas Kriete, Gruppe A4) euch, unseren 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 === | === Teammitglieder === | ||
Zeile 11: | Zeile 10: | ||
Im folgenden werden die Teammitglieder und ihre Aufgaben kurz vorgestellt. | Im folgenden werden die Teammitglieder und ihre Aufgaben kurz vorgestellt. | ||
#Moritz Oberg | #[[Benutzer:Moritz Oberg|Moritz Oberg]] | ||
#*Entwicklung und programmieren mithilfe von | #*Entwicklung und programmieren mithilfe von BricxCC | ||
#*Film für Youtube | #*Film für Youtube | ||
#Alessio Cebeci | #[[Benutzer:Alessio Cebeci|Alessio Cebeci]] | ||
#*Entwicklung und programmieren mithilfe von | #*Entwicklung und programmieren mithilfe von BricxCC | ||
#*Konstruktion von Bobby in Lego Digital Designer | #*Konstruktion von Bobby in Lego Digital Designer | ||
#*Bau des Roboters | #*Bau des Roboters | ||
#Lukas Kriete | #[[Benutzer:Lukas Kriete|Lukas Kriete]] | ||
#*Entwicklung einer Spielstrategie mithilfe von PAP-Designer | #*Entwicklung einer Spielstrategie mithilfe von PAP-Designer | ||
#*Artikel auf dem Wiki der HSHL | #*Artikel auf dem Wiki der HSHL | ||
#*Erstellung des Werbeplaketes | |||
== Hardware== | |||
[[Datei:Fahrzeugmerkmale.png|300px|thumb|rechts|Fahrzeugmerkmale: Beschriftung<ref> Eigenes Foto </ref>]] | |||
=== 1. Unterkonstruktion === | |||
::Die 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 diesen sind extra große Reifen, wodurch es Bobby möglich ist, schnell zum Ball zu fahren oder sich zu drehen. | |||
::Außerdem haben wir beim Bau darauf geachten, die Unterkonstruktion möglichst tief zu bauen, da dadurch der Schwerpunkt von Bobby deutlich tiefer liegt. | |||
::Das dritte Rad ist eine Kugel, wodurch sich Bobby sehr gut drehen kann. | |||
=== 2. 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 drei | |||
::ist für den Fang- / Schussarmzuständig. Durch genaue Winkeleinstellung, lässt sich die Schussvorrichtung auf ein Grad genau steuern. | |||
=== 3. NXT-Brick === | |||
::Der NXT- Brick ist das "Gehirn" von den Bobby. Bei ihm werden alle Sensoren und Motoren angeschlossen. | |||
=== 4. Infarot Sensor: === | |||
:::[[Datei:Infarotsensor.PNG|200px|thumb|links|Empfangsbereiche: Infarotsensor<ref> Eigenes Foto </ref>]] | |||
::Der Infrarotsensor (IRSEEKERV2 )besitzt 5 Detektoren, die in einem Radius von 240 Grad, Infrarotsignale erfassen können. Diese 5 Detektoren lassen sich in 9 Sektoren unterteilen um eine genaue Richtung des Infrarotsignales zu bestimmen. Basierend auf dem pyroelektrischen Prinzip, lässt sich sogar die Intensität der Infrarotstrahlen in den Detektoren bestimmen. Dadurch kann ein Abstand des Infrarotball`s ermittelt werden. | |||
Zeile 57: | Zeile 61: | ||
=== 5. 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. | |||
=== 6. 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 === | |||
[[Datei:Hauptprogramm.PNG|120px|none|mini|Fahrzeugmerkmale: Hauptprogramm<ref> Eigenes Foto </ref>]] | |||
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=== | |||
[[Datei:Zuballfahren.PNG|160px|none|mini|Fahrzeugmerkmale: Zuballfahren<ref> Eigenes Foto </ref>]] | |||
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=== | |||
[[Datei:Ball.PNG|160px|none|mini|Fahrzeugmerkmale: Ball<ref> Eigenes Foto </ref>]] | |||
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 === | |||
[[Datei:Torausrichten.PNG|120px|none|mini|Fahrzeugmerkmale: Torausrichten<ref> Eigenes Foto </ref>]] | |||
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)'' | |||
::'''Infarotsensor:''' | |||
::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== | |||
[[Datei:Spielfeld.png|250px|thumb|rechts|Fahrzeugmerkmale: Zuballfahren<ref> Eigenes Foto </ref>]] | |||
:::::::Breite Spielfeld : 183cm | |||
:::::::Länge Spielfeld : 122cm | |||
:::::::Länge 11-Meter-Raum :30cm | |||
:::::::Breite 11-Meter-Raum : 74cm | |||
Zeile 74: | Zeile 190: | ||
== Werbebanner == | |||
[ | [[Datei:Bobby_Werbeplakat.jpg|none|mini|Werbebanner]] | ||
== Link zum Video == | == Link zum Video == | ||
Um unseren Booby in Action zu sehen und um uns kurz vorzustellen klicke auf den | Um unseren Booby in Action zu sehen und um uns kurz vorzustellen klicke auf den [http://youtube.com/watch?v=uenqrz7zReg&feature=youtu.de/ Link] | ||
== Was haben wir gelernt? == | == 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 | ||
== | == Link zu unserem svn-Ordner== | ||
Hier befindet sich unser [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/ svn-Ordner] | |||
== Literaturverzeichnis == | == Literaturverzeichnis == |
Aktuelle Version vom 25. Januar 2018, 10:10 Uhr
Autor: Lukas Kriete
Einleitung
In diesem Artikel möchte wir (Moritz Oberg, Alessio Cebeci, Lukas Kriete, Gruppe A4) euch, unseren 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 BricxCC
- Film für Youtube
- Alessio Cebeci
- Entwicklung und programmieren mithilfe von BricxCC
- Konstruktion von Bobby in Lego Digital Designer
- Bau des Roboters
- Lukas Kriete
- Entwicklung einer Spielstrategie mithilfe von PAP-Designer
- Artikel auf dem Wiki der HSHL
- Erstellung des Werbeplaketes
Hardware
1. Unterkonstruktion
- Die 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 diesen sind extra große Reifen, wodurch es Bobby möglich ist, schnell zum Ball zu fahren oder sich zu drehen.
- Außerdem haben wir beim Bau darauf geachten, die Unterkonstruktion möglichst tief zu bauen, da dadurch der Schwerpunkt von Bobby deutlich tiefer liegt.
- Das dritte Rad ist eine Kugel, wodurch sich Bobby sehr gut drehen kann.
2. 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 drei
- ist für den Fang- / Schussarmzuständig. Durch genaue Winkeleinstellung, lässt sich die Schussvorrichtung auf ein Grad genau steuern.
3. NXT-Brick
- Der NXT- Brick ist das "Gehirn" von den Bobby. Bei ihm werden alle Sensoren und Motoren angeschlossen.
4. Infarot Sensor:
- Der Infrarotsensor (IRSEEKERV2 )besitzt 5 Detektoren, die in einem Radius von 240 Grad, Infrarotsignale erfassen können. Diese 5 Detektoren lassen sich in 9 Sektoren unterteilen um eine genaue Richtung des Infrarotsignales zu bestimmen. Basierend auf dem pyroelektrischen Prinzip, lässt sich sogar die Intensität der Infrarotstrahlen in den Detektoren bestimmen. Dadurch kann ein Abstand des Infrarotball`s ermittelt werden.
5. 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.
6. 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)
- Infarotsensor:
- 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
Link zu unserem svn-Ordner
Hier befindet sich unser svn-Ordner
Literaturverzeichnis
→ zurück zum Hauptartikel: Informatikpraktikum WS 17/18