RoboSoccer Gruppe B1 - WS 17/18: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(96 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:HowTo]]
'''Autor:''' [[Benutzer:Lars Unverzagt|Lars Unverzagt]]  und [[Benutzer:Daniel Schiewe|Daniel Schiewe]]  


'''Autor:''' Christoph Jutz


== Einleitung ==
== Einleitung ==
Das Ziel des Praktikums besteht darin einen LEGO - Roboter zu konstruieren und zu programmieren, der selbstständig auf einem Spielfeld einen Spielball erkennt und diesen schnellstmöglich in das gegnerische Tor schießt
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 [http://193.175.248.52/wiki/index.php/Regelwerk_RoboSoccer hier <ref> Regelwerk - http://193.175.248.52/wiki/index.php/Regelwerk_RoboSoccer </ref>]. 


=== Teammitglieder ===
=== Teammitglieder ===
In diesem Abschnitt werden kurz die Teammitglieder, die an diesem Projekt beteiligt waren, und ihre Tätigkeiten vorgestellt.
* '''Lars Unverzagt'''
** Konstruktion des Roboters
# Christoph Jutz
** Entwicklung einer Spielstrategie
#* Bau des Roboters
** Programmierung in BricxCC (NXC)
#* Nachbau des Roboters als LEGO - Modell mit dem LEGO - Designer
** Erstellung des HSHL - Wiki - Artikel
#* Entwicklung eines Konzepts/einer Spielstrategie
** Erstellung des Youtube-Videos
#* Implementierung der Spielstrategie in BricxCC (Brixc Command Center)
* '''Daniel Schiewe'''
#* HSHL - Wiki - Artikel
** Nachbau des Roboters im Lego-Designer inkl. Bauanleitung
# Darius Wude
** Entwicklung einer Spielstrategie
#* Bau des Roboters
** Programmierung in BricxCC (NXC)
#* Entwicklung einer Spielstrategie
** Erstellung des HSHL - Wiki - Artikel
#* Implementierung der Spielstrategie in BricxCC
** Erstellung des Youtube-Videos
# Anas Habbaba
#* Bau des Roboters


== Das Spielfeld ==
== Das Spielfeld ==
Gespielt wird auf einem 183cm langen und 122cm breiten RoboSoccer - Spielfeld. Die beiden Tore sind 45cm breit und 14cm hoch.
Das Spielfeld ist 183cm lang und 122cm breiten. Dies sind die genauen Maße eines RoboSoccer - Spielfeld. Die beiden Tore sind 45cm breit und 14cm hoch.
Weitere Abmessungen und Infos lassen sich [https://campusapp01.hshl.de/pluginfile.php/325636/mod_resource/content/1/inf_I_prak_feld.pdf hier <ref> Spielfeld - https://campusapp01.hshl.de/pluginfile.php/325636/mod_resource/content/1/inf_I_prak_feld.pdf </ref>] finden.
Für weitere Informationen zu dem RoboSooccer - Spielfeld können sie [https://campusapp01.hshl.de/pluginfile.php/325636/mod_resource/content/1/inf_I_prak_feld.pdf hier <ref> Spielfeld - https://campusapp01.hshl.de/pluginfile.php/325636/mod_resource/content/1/inf_I_prak_feld.pdf </ref>]klicken.
 
== Regelwerk ==
Das vollständige Regelwerk ist [http://193.175.248.52/wiki/index.php/Regelwerk_RoboSoccer hier <ref> Regelwerk - http://193.175.248.52/wiki/index.php/Regelwerk_RoboSoccer </ref>] zu finden.


== Hardware ==
== 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.  
Unser Roboter wurde auf Basis eines Lego-Mindstorms-Bausatz gebaut. In diesem Set sind mehrere Motoren und verschiedene Sensoren vorhanden.  
<br>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.
Folgende Sensoren sind im Bausatz enthalten: Ultraschallsensor, Tastsensoren, Lichtsensor und Geräuschsensor
<br>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 [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=nsk1042 Infrarotsensor <ref> Infrarotsensor - http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=nsk1042 </ref>], um den Spielball suchen zu können und zum anderen ein [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034 Kompassensor <ref> Kompasssensor - http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034 </ref>] zur Positionsbestimmung und zum Ausrichten zum Tor. Beide Sensoren werden von der Firma [http://www.hitechnic.com/# HiTechnic <ref> Homepage HiTechnic - http://www.hitechnic.com/# HiTechnic </ref>] hergestellt.
Von unserem Professor haben wir zusätzlich einen [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=nsk1042 Infrarotsensor <ref> Infrarotsensor - http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=nsk1042 </ref>] sowie einen [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034 Kompasssensor  <ref>Kompasssensor - http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034 </ref>]enthalten.
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). <br>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 ==
=== Beispiele für Befehle der Sensoren und Aktoren: ===
Zur Entwicklung einer Spielstrategie für das Spielprogramm wird zunächst ein Programmablaufplan mit dem Programm [http://friedrich-folkmann.de/papdesigner/Hauptseite.html „PaP-Designer“ <ref> Pap-Designer http://friedrich-folkmann.de/papdesigner/Hauptseite.html </ref>] erstellt.
Bei unserer Spielstrategie benutzen wir drei Unterfunktionen: Die Ballsuche und den Ballfang, das Ausrichten zum Tor und den Ballschuss. Diese drei Unterfunktionen werden dann in einem Multitaskingprogramm als Dauerschleife im Hauptprogramm zusammengeführt.


=== Ballsuche und Ballfang ===
[[Datei:Ballsuche_und_Ballfang.png|none|mini|Ballsuche und Ballfang]]
Solange der Tastsensor nicht gedrückt ist, soll der Ball gesucht werden und sich die Fangmotorik drehen.
Zur Ballsuche werden die Werte des Infrarotsensors eingelesen. Mit 5 if-Verzweigungen werden die 5 Richtungen unterschieden und die Motoren dann jeweils angesteuert.


=== Ausrichten zum Tor ===
[[Datei:Ausrichten.png|none|mini|Ausrichten]]
Wenn der Tastsensor gedrückt wurde/ist, wird die aktuelle Richtung des Kompassensors eingelesen und die Differenz zur Richtung des Tors berechnet. Danach werden die "Fahrmotoren" so angesteuert, dass sich der Roboter zum Tor bewegt.
Sobald die Differenz, mit einer kleinen Abweichung, der Richtung des Tors entspricht, werden die "Fahrmotoren" gestoppt.


=== Ballschuss ===
'''Motoransteuerung:''' <br>
[[Datei:Ballschuss.png|none|mini|Ballschuss]]
OnFwdSync (Motoreingänge, Geschwindigkeit , Drehwinkel);<br>
Der Schussmotor soll den Ball mit voller Leistung ins Tor schießen.
OnFwd (Motoreingänge , Geschindigkeit);<br>
OnRevSync (Motoreingänge, Geschwindigkeit , Drehwinkel);<br>
OnRev (Motoreingänge , Geschindigkeit);<br>
Off (Motoreingänge);


=== Hauptprogramm ===
[[Datei:Hauptprogramm.png|none|mini|Hauptprogramm]]
Beim Start des Hauptprogramms werden zunächst alle Sensoren auf ihre jeweiligen Ports initialisiert. Danach wird die aktuelle Richtung, welche eine der Torrichtung "West" oder "Ost" entsprechen wird, mit Hilfe des Kompasssensors eingelesen und gespeichert.
In einer Dauerschleife werden dann die einzelnen Unterprogramme aufgerufen.


== Umsetzung der Spielstrategie ==
'''Infrarotsensor:'''<br>
Zur Realisierung der Spielstrategie und Implementierung der Unterprogramme und des Hauptprogramms wurde das [http://bricxcc.sourceforge.net/ Bricx Command Center <ref> Bricx Command Center - http://bricxcc.sourceforge.net/ </ref>] (kurz: BricxCC) verwendet. Dieses benutzt die Programmiersprache [https://de.wikipedia.org/wiki/Not_eXactly_C NXC <ref> NXC - https://de.wikipedia.org/wiki/Not_eXactly_C </ref>] (Not eXactly C).  
''#define IRSEEKER IN_1'' (''Sensoreingang am Microcontroller'')  &nbsp; &nbsp; &nbsp;    (Dieser Befehl legt fest das der [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=nsk1042 Infrarotsensor <ref> Infrarotsensor - http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=nsk1042 </ref>] unter dem Namen IRSEEKER im nachfolgenden Prgramm bekannt ist und am Port eins angeschlossen ist. <br>
<br>Da an dieser Stelle eine vollständige Präsentation des Spielprogramms nicht vorgesehen ist, werden „nur“ die Befehle zur Ansteuerung der Motoren sowie Sensoren vorgestellt:


ReadSensorHTIRSEEKER (IRSEEKER) (''Sensoreingang am Microcontroller'') &nbsp; &nbsp; &nbsp;      (Dieser Befehl liest die Werte des Sensors aus.) <br>


'''Motoren'''
SetSenosorLowspeed (IRSEEKER) &nbsp;&nbsp;&nbsp; ( Die einlese Geschwindigkeit wird verringert. ) <br>
<br><code>OnFwd(OUT_AC, 75);</code>
<br>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.


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


<br><code>Off(OUT_AC);</code>
'''Kompasssensor:''' <br>
<br>Mit diesem Befehl werden die Motoren an den Ausgängen A und C gestoppt.
''#define COMPASS IN_2'' (''Sensoreingang am Microcontroller'') &nbsp;&nbsp;&nbsp; (Dieser Befehl legt fest das der [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034 Kompasssensor  <ref>Kompasssensor - http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034 </ref>] unter dem Namen COMPASS im nachfolgenden Prgramm bekannt ist und am Port zwei angeschlossen ist. <br>


<br><code>Float(OUT_AC);</code>
aktuellerKurs &nbsp; = &nbsp; SensorHTCompass (IN_2) &nbsp;&nbsp;&nbsp; (Dieser Befehl schreibt in eine Variable (''aktuellerKurs'') den eingelesenen Wert.)<br>
<br>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.


<br><code>OnFwdSync(OUT_AC, 75, 50);</code>
SetSenosorLowspeed (COMPASS) &nbsp;&nbsp;&nbsp; ( Die einlese Geschwindigkeit wird verringert. )<br>  
<br>Mit dieser Anweisung lassen sich Bögen mit dem Roboter fahren. Der letzte Parameter gibt dabei den Radius des Bogens an. <br>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.
<br>


<br><code>OnFwdReg(OUT_AC, 75, mode);</code>
'''Tastsensor:'''<br>
<br>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.
SetSensorTouch (IN_4) &nbsp;&nbsp;&nbsp; ( Der Tastsensor ist aktiv im Port vier.)
*'''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.


== Spielstrategie ==
Zur Entwicklung der nachstehenden Spielstrategie haben wir das folgende Programm zur Hilfe benutzt.
[http://friedrich-folkmann.de/papdesigner/Hauptseite.html „PaP-Designer“ <ref> Pap-Designer http://friedrich-folkmann.de/papdesigner/Hauptseite.html </ref>]


'''Sensoren'''
[[Datei:Spielstrategie2.png|none|mini|Spielstrategie]]
*Tastsensor
<code>SetSensorTouch(IN_1);</code>
<br>Der Befehl initialisiert den Tastsensor an Port 1.


<br><code>x = SENSOR_1;</code>
== Umsetzung der Spielstrategie ==
<br>Gibt den Zustand des Tastsensors zurück und schreibt ihn in die Variable x.
Um die Spielstrategie erfolgreich umsetzen zu können, haben wir folgendes Programm verwendet.[http://bricxcc.sourceforge.net/ Bricx Command Center <ref> Bricx Command Center - http://bricxcc.sourceforge.net/ </ref>] (kurz: BricxCC)  Dieses benutzt die Programmiersprache [https://de.wikipedia.org/wiki/Not_eXactly_C NXC <ref> NXC - https://de.wikipedia.org/wiki/Not_eXactly_C </ref>].
<br><br>


'''Nun zur Spielstrategie:'''


*Infrarotsensor
Bevor das Spiel beginnt wird manuell die Richtung festgelegt in die er während des Spiels schießt.
<code>SetSensorLowspeed(IN_3);</code>
Sobald der Startschuss fälllt wird das Programm durch den "On-Button" gestartet. Die Sensoren sind aktiv.
<br>Initialisert den Infrarotsensor an Port 3.
Der [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=nsk1042 Infrarotsensor <ref> Infrarotsensor - http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=nsk1042 </ref>] empfängt die Signale des Balls und kann Bewegungen des Balls wahrnehmen. Durch seine 5 Bereiche weiß er genau, wo sich der Ball befindet und kann präzise auf ihn zusteuern.  


<br><code>ReadSensorHTIRSeeker2AC(IN_3, richtung, s1, s3, s5, s7, s9);</code>
Während er auf den Ball zufährt rotiert sein Fangarm dauerhaft, um den Ball nicht zu verpassen.
<br>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
Wenn der Roboter den Ball erwischt hat, und der Ball vor den Tastsensor gedrückt wird, hält der Roboter an, um nicht gegen die offiziellen Regeln zu verstoßen.
<code>SetSensorLowspeed(IN_4);</code>
Der Microcontroller errechnet, um wieviel Grad sich der Roboter derehen muss, um auf das richtige Tor zu schießen. Dies macht er Mithilfe des am Start festgelegten Wertes und der aktuellen Richtung, die vom [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034 Kompasssensor   <ref>Kompasssensor - http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034 </ref>] eingelesen wird.
<br>Initialisiert den Kompasssensor an Port 4.


<br><code>x = SensorHTCompass(IN_4);</code>
Sobald er die richtige Richtung gefunden hat dreht der Fangarm in die entgegengesetzte Richtung. Der Ball wird dann im Optimalfall in das gegnerische Tor geschossen. <br>
<br>Gibt den Wert des Kompass an Port 4 aus und speichert ihn in der Variablen x.
<br>


    
    
Weitere nützliche Befehle, Beispiele und Erläuterungen lassen sich in dem Buch [https://www.daniel-braun.com/buch/roboter-programmieren-mit-nxc/ „Roboter programmieren mit NXC für LEGO Mindstorms NXT“ <ref> Buch "Roboter programmieren mit NXC für LEGO Mindstorms NXT" - https://www.daniel-braun.com/buch/roboter-programmieren-mit-nxc/ </ref>] von Daniel Braun finden, welches auch von uns genutzt wurde.
 
 
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|none|mini|NXC Befehle]]


== Werbeplakat ==
== Werbeplakat ==
An dieser Stelle steht das Werbeplakat.
Um unseren Roboter zu präsentieren, haben wir ein Plakat erstellt, was sie hier sehen können.
 
[[Datei: PlakatRoboSoccer.png|none|mini|Plakat]]


== YouTube - Video ==
== YouTube - Video ==
Zur bildlichen Veranschaulichung wurde ein YouTube - Video erstellt, welches hier zu finden ist.
Um zu demonstrieren, wie unser Roboter auf dem Spielfeld aggiert, haben wir ein Kurzes Youtube-Video erstellt.
=== Unterabschnitt ===
In dem Video ist zu sehen, wie der Roboter den Ball sucht, auf den Ball zufährt, sich ausrichtet und auf das Torschießt.
# Nutzen Sie Aufzählungen
#* mit verschiedenen Schachtelungen
#* und so weiter
# zweite Ebene
#* mit erneuter Unterebene
 
=== Bilder ===
Bauen Sie Bilder ein, am besten mit darin gekennzeichneten Stellen, die Sie dann im Text erklären.
[[Datei:RetroGameStation_HSHL_Messe.jpg|rechts|mini|Beispielbild mit Quelle <ref> Eigenes Foto </ref>]]
 
=== Tabellen ===
Eine tolle Tabelle ist hier dargestellt.
{| class="mw-datatable"
! style="font-weight: bold;" | Spalte 1
! style="font-weight: bold;" | Spalte 2
! style="font-weight: bold;" | 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. <ref> [http://meta.wikimedia.org/wiki/Help:Editing/de Hilfeseite des Wikimedia-Projekts] </ref>.


== Zusammenfassung ==
[https://youtu.be/0y1E8U6_aA8 Hier  <ref>Eigenes Youtube-Video - https://youtu.be/0y1E8U6_aA8 </ref>] finden sie den Link zum Video.
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 [http://193.175.248.171/wiki/index.php/Kategorie:HowTo den How-To's].


== Bilder ==
Hier sehen Sie Bilder von unserem Roboter Carlos.
[[Datei:vorderansicht.jpeg|links|mini|Vorderansicht  <ref> Eigenes Foto </ref>]]
[[Datei:Seitenansichtrechts.jpeg|links|mini|Seitenansicht links  <ref> Eigenes Foto </ref>]]
[[Datei:seitenansichhtlinks.jpeg|links|mini|Seitenansicht rechts  <ref> Eigenes Foto </ref>]]
<br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br>


==Bauanleitung==
Wenn Sie den Roboter nachbauen wollen, finden sie hier eine Bauanleitung und im nachstehenden Bild eine Grafik von unseren benutzten Sensoren und Aktoren.
[[Datei:bauanleitung_Roboter_Carlos.pdf|links|mini|Vorderansicht  <ref> Eigene Bauanleitung </ref>]] <br><br>
[[Datei:SensorenAktoren.jpeg|links|mini|Bild zur Verdeutlichung der Sensoren und Aktoren  <ref> Eigenes Foto </ref>]]
<br><br><br><br><br><br><br><br><br><br>


== Literaturverzeichnis ==
== Literaturverzeichnis ==

Aktuelle Version vom 3. Januar 2020, 15:08 Uhr

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

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

Das Spielfeld

Das Spielfeld ist 183cm lang und 122cm breiten. Dies sind die genauen Maße eines RoboSoccer - Spielfeld. Die beiden Tore sind 45cm breit und 14cm hoch. Für weitere Informationen zu dem RoboSooccer - Spielfeld können sie hier [2]klicken.

Hardware

Unser Roboter wurde auf Basis eines Lego-Mindstorms-Bausatz gebaut. In diesem Set sind mehrere Motoren und verschiedene Sensoren vorhanden. Folgende Sensoren sind im Bausatz enthalten: Ultraschallsensor, Tastsensoren, Lichtsensor und Geräuschsensor

Von unserem Professor haben wir zusätzlich einen Infrarotsensor [3] sowie einen Kompasssensor [4]enthalten.



Beispiele für Befehle der Sensoren und Aktoren:

Motoransteuerung:
OnFwdSync (Motoreingänge, Geschwindigkeit , Drehwinkel);
OnFwd (Motoreingänge , Geschindigkeit);
OnRevSync (Motoreingänge, Geschwindigkeit , Drehwinkel);
OnRev (Motoreingänge , Geschindigkeit);
Off (Motoreingänge);


Infrarotsensor:
#define IRSEEKER IN_1 (Sensoreingang am Microcontroller)       (Dieser Befehl legt fest das der Infrarotsensor [5] unter dem Namen IRSEEKER im nachfolgenden Prgramm bekannt ist und am Port eins angeschlossen ist.

ReadSensorHTIRSEEKER (IRSEEKER) (Sensoreingang am Microcontroller)       (Dieser Befehl liest die Werte des Sensors aus.)

SetSenosorLowspeed (IRSEEKER)     ( Die einlese Geschwindigkeit wird verringert. )


Kompasssensor:
#define COMPASS IN_2 (Sensoreingang am Microcontroller)     (Dieser Befehl legt fest das der Kompasssensor [6] unter dem Namen COMPASS im nachfolgenden Prgramm bekannt ist und am Port zwei angeschlossen ist.

aktuellerKurs   =   SensorHTCompass (IN_2)     (Dieser Befehl schreibt in eine Variable (aktuellerKurs) den eingelesenen Wert.)

SetSenosorLowspeed (COMPASS)     ( Die einlese Geschwindigkeit wird verringert. )

Tastsensor:
SetSensorTouch (IN_4)     ( Der Tastsensor ist aktiv im Port vier.)

Spielstrategie

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

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].

Nun zur Spielstrategie:

Bevor das Spiel beginnt wird manuell die Richtung festgelegt in die er während des Spiels schießt. Sobald der Startschuss fälllt wird das Programm durch den "On-Button" gestartet. Die Sensoren sind aktiv. Der Infrarotsensor [10] empfängt die Signale des Balls und kann Bewegungen des Balls wahrnehmen. Durch seine 5 Bereiche weiß er genau, wo sich der Ball befindet und kann präzise auf ihn zusteuern.

Während er auf den Ball zufährt rotiert sein Fangarm dauerhaft, um den Ball nicht zu verpassen.


Wenn der Roboter den Ball erwischt hat, und der Ball vor den Tastsensor gedrückt wird, hält der Roboter an, um nicht gegen die offiziellen Regeln zu verstoßen. Der Microcontroller errechnet, um wieviel Grad sich der Roboter derehen muss, um auf das richtige Tor zu schießen. Dies macht er Mithilfe des am Start festgelegten Wertes und der aktuellen Richtung, die vom Kompasssensor [11] eingelesen wird.

Sobald er die richtige Richtung gefunden hat dreht der Fangarm in die entgegengesetzte Richtung. Der Ball wird dann im Optimalfall in das gegnerische Tor geschossen.



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

Werbeplakat

Um unseren Roboter zu präsentieren, haben wir ein Plakat erstellt, was sie hier sehen können.

Plakat

YouTube - Video

Um zu demonstrieren, wie unser Roboter auf dem Spielfeld aggiert, haben wir ein Kurzes Youtube-Video erstellt. In dem Video ist zu sehen, wie der Roboter den Ball sucht, auf den Ball zufährt, sich ausrichtet und auf das Torschießt.

Hier [12] finden sie den Link zum Video.

Bilder

Hier sehen Sie Bilder von unserem Roboter Carlos.

Vorderansicht [13]
Seitenansicht links [14]
Seitenansicht rechts [15]































Bauanleitung

Wenn Sie den Roboter nachbauen wollen, finden sie hier eine Bauanleitung und im nachstehenden Bild eine Grafik von unseren benutzten Sensoren und Aktoren. Datei:Bauanleitung Roboter Carlos.pdf

Bild zur Verdeutlichung der Sensoren und Aktoren [17]











Literaturverzeichnis


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