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

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(70 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:HowTo]]
'''Autor:''' [[Benutzer:Christoph Jutz|Christoph Jutz]]
 
'''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 zu schießen.
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.


=== Teammitglieder ===
=== Teammitglieder ===
In diesem Abschnitt werden kurz die Teammitglieder, die an diesem Projekt beteiligt waren, und ihre Tätigkeiten vorgestellt.
In diesem Abschnitt werden kurz die Teammitglieder, die an diesem Projekt beteiligt waren, und ihre Tätigkeiten vorgestellt.
   
   
# Christoph Jutz:
# [[Benutzer:Christoph Jutz|Christoph Jutz]]
#* Bau des Roboters
#* Bau des Roboters
#* Nachbau des Roboters als LEGO - Modell mit dem LEGO - Designer
#* Nachbau des Roboters als LEGO - Modell mit dem LEGO - Designer
#* Entwicklung eines Konzepts/einer Spielstrategie
#* Entwicklung eines Konzepts/einer Spielstrategie
#* Implementierung der Spielstrategie in BricxCC (Brixc Command Center)
#* Implementierung der Spielstrategie in BricxCC (Brixc Command Center)
#* Pflege des SVN
#* HSHL - Wiki - Artikel
#* HSHL - Wiki - Artikel
# Darius Wude
# [[Benutzer:Darius Wude|Darius Wude]]
#* Bau des Roboters
#* Bau des Roboters
#* Entwicklung einer Spielstrategie
#* Entwicklung einer Spielstrategie
#* Implementierung der Spielstrategie in BricxCC
#* Implementierung der Spielstrategie in BricxCC
# Anas Habbaba
#* Videoerstellung und -schnitt
# [[Benutzer:Mohamad-Anas Habbaba|Anas Habbaba]]
#* Bau des Roboters
#* 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.
Gespielt wird auf einem 183cm langen und 122cm breiten 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] finden.
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.


== Regelwerk ==
== Regelwerk ==
Das vollständige Regelwerk ist [[Regelwerk RoboSoccer|hier]] zu finden.
Wie bei einem richtigen Fußballspiel gibt es natürlich auch beim RoboSoccer gewisse Regeln, die beachtet werden müssen. Das vollständige Regelwerk dazu 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.  
Als Hardware wurde ein [https://de.wikipedia.org/wiki/Lego_Mindstorms_NXT LEGO – Mindstorms - Set <ref> LEGO – Mindstorms - Set - https://de.wikipedia.org/wiki/Lego_Mindstorms_NXT </ref>] benutzt. In diesem Set sind ein [https://shop.lego.com/en-PL/NXT-Intelligent-Brick-9841 NXT-Brick <ref> NXT-Brick - https://shop.lego.com/en-PL/NXT-Intelligent-Brick-9841 </ref>], welcher unter anderem einen Microcontroller beinhaltet, der sich programmieren lässt, 3 Servomotoren, ein Ultraschallsensor, zwei Tastsensoren, ein Lichtsensor und ein Geräuschesensor enthalten.  
<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.
<br>Der Lichtsensor und der Geräuschesensor werden in unserem Projekt nicht verwendet, da es für diese Sensoren keinerlei sinnvolle Anwendung für ein erfolgreiches Fußballspiel gibt.
<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.
<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], um den Spielball suchen zu können und zum anderen ein [http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034 Kompassensor] zur Positionsbestimmung und zum Ausrichten zum Tor. Beide Sensoren werden von der Firma [http://www.hitechnic.com/# HiTechnic] hergestellt.  
Damit der Roboter nun jedoch den Spielball finden und sich dann zum Tor ausrichten kann, benötigt es zusätzliche Sensoren, die in dem [https://de.wikipedia.org/wiki/Lego_Mindstorms_NXT 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.  
Die Servomotoren sowie der Tastsensor werden im Folgenden noch kurz vorgestellt.
Die Servomotoren sowie der Tastsensor werden im Folgenden noch kurz vorgestellt.


=== Servomotoren ===
=== 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.
Der NXT benutzt Servomotoren, die je nach Belieben nach Zeit, Geschwindigkeit, Strecke und Winkel angesteuert werden können. Mit den eingebauten Rotationssensoren lassen sich die Umdrehungszahlen in Grad speichern und über verschiedene Befehle rotieren, vor und zurück fahren oder bremsen. Der NXT-Brick bietet 3 Möglichkeiten, um die 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 ===
=== 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.
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.
=== Bilder des Roboters ===
[[Datei:IR_COMP_TOUCH_beschriftet.jpg|none|mini|Vorderansicht <ref> Eigenes Foto </ref>]]
[[Datei:Frontalansicht.jpg|none|mini|Frontalansicht <ref> Eigenes Foto </ref>]]
[[Datei:NXT_FANG_beschriftet.png|none|mini|Rückansicht <ref> Eigenes Foto </ref>]]
[[Datei:Roboninho.png|none|mini|LEGO-Modell <ref> Selbsterstellter Screenshot </ref>]]
Mit dem [http://ldd.lego.com/de-de LEGO Digital Designer <ref> LEGO Digital Designer - http://ldd.lego.com/de-de </ref>] haben wir den Roboter in einem 3D-Modell nachgebaut. Eine Bauanleitung, um den Roboter nachzubauen befindet sich hier: [[Datei:Bauanleitung_Roboninho.pdf]]


== Spielstrategie ==
== Spielstrategie ==
Zur Realisierung einer Spielstrategie für das Spielprogramm wird zunächst ein Programmablaufplan mit dem Programm [http://friedrich-folkmann.de/papdesigner/Hauptseite.html „PaP-Designer“] erstellt.
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.
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.
 
=== 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.


=== Ballsuche und Ballfang ===
=== Ballsuche und Ballfang ===
[[Datei:Ballsuche_und_Ballfang.png|none|mini|Ballsuche und Ballfang <ref> Eigenes Foto </ref>]]
[[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.  
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.
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 ===
=== Ausrichten zum Tor ===
[[Datei:Ausrichten.png|none|mini|Ausrichten <ref> Eigenes Foto </ref>]]
[[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.
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.
Sobald die Differenz, mit einer kleinen Abweichung, der Richtung des Tors entspricht, werden die "Fahrmotoren" gestoppt.


=== Ballschuss ===
=== Ballschuss ===
[[Datei:Ballschuss.png|none|mini|Ballschuss <ref> Eigenes Foto </ref>]]
[[Datei:Ballschuss.png|none|mini|Ballschuss]]
Der Schussmotor soll den Ball mit voller Leistung ins Tor schießen.
Der Schussmotor soll den Ball mit voller Leistung ins Tor schießen.
=== 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 ==
== Umsetzung der Spielstrategie ==
Zur Realisierung der Spielstrategie und Implementierung der Unterprogramme und des Hauptprogramms wurde das [http://bricxcc.sourceforge.net/ Bricx Command Center] (kurz: BricxCC) verwendet. Dieses benutzt die Programmiersprache [https://de.wikipedia.org/wiki/Not_eXactly_C NXC ](Not eXactly C).  
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).  
<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:
<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:




'''Motoren'''
'''Motoren'''
<br><code>OnFwd(OUT_AC, 75);</code>
<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>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.  
Zeile 98: Zeile 105:


'''Sensoren'''
'''Sensoren'''
*Tastsensor
*Tastsensor
<code>SetSensorTouch(IN_1);</code>
<code>SetSensorTouch(IN_1);</code>
Zeile 120: Zeile 125:
<br>Initialisiert den Kompasssensor an Port 4.
<br>Initialisiert den Kompasssensor an Port 4.


<br>x = SensorHTCompass(IN_4);</code>
<br><code>x = SensorHTCompass(IN_4);</code>
<br>Gibt den Wert des Kompass an Port 4 aus und speichert ihn in der Variablen x.
<br>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 [https://www.daniel-braun.com/buch/roboter-programmieren-mit-nxc/ „Programmieren mit NXC“] von Daniel Braun finden, welches auch von uns genutzt wurde.
Weitere nützliche Befehle, Beispiele und Erläuterungen lassen sich [https://gym-leibnitz.lima-city.de/robotik/wp-content/uploads/2016/01/NXC_Tutorial_DE.pdf hier <ref> NXC-Befehle - https://gym-leibnitz.lima-city.de/robotik/wp-content/uploads/2016/01/NXC_Tutorial_DE.pdf </ref>] und
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.


== Werbeplakat ==
Damit jeder auf den ersten Blick sehen kann, wie unser Roboter aussieht und was seine Hauptmerkmale sind, haben wir ein Werbeplakat erstellt und den Roboter auf den Namen "Roboninho" getauft.
[[Datei:Roboninho_Werbeplakat.png|none|mini|Werbeplakat]]


=== Unterabschnitt ===
== YouTube - Video ==
# Nutzen Sie Aufzählungen
Zur bildlichen Veranschaulichung wurde ein YouTube - Video erstellt, welches [https://www.youtube.com/watch?v=VQPF9ObOaXU hier <ref> YouTube-Video - https://www.youtube.com/watch?v=VQPF9ObOaXU </ref>] zu finden ist.
#* 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 ===
== Lernerfolg ==
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>.
Bei diesem Projekt können sowohl erste Erfahrungen in der C-Programmierung, als auch in der Konstruktionstechnik, beim Bauen des Roboters, gesammelt werden. Dabei lernt man verschieden Sensoren und deren Funktionsweise und Programmierung kennen. Außerdem lernt man, zunächst ein Konzept zu entwickeln, welches man anschließend mit einer angemessenen Dokumentation in die Tat umsetzt. Es gilt dabei Probleme im Team zu lösen und sich untereinander abzusprechen.
 
== 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 [http://193.175.248.171/wiki/index.php/Kategorie:HowTo den How-To's].
 
 
== Ausblick ==
Was kann/muss noch verbessert werden?


== Projektunterlagen ==
Alle Projektunterlagen lassen sich [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Gruppen/Gruppen_WS1718/C2/Projektunterlagen/ hier(nur mit Zugangsberechtigung) <ref> Projektunterlagen - https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Gruppen/Gruppen_WS1718/C2/Projektunterlagen/ </ref>] finden.


== Literaturverzeichnis ==
== Literaturverzeichnis ==
<references />
<references />
== Korrektur/Rückmeldungen ==
Hier können Nutzer oder kritische Leser (meist Professoren) Verbesserungen fordern/vorschlagen.
== YouTube - Video ==
Zur bildlichen Veranschaulichung wurde ein YouTube - Video erstellt, welches hier zu finden ist.




→ zurück zum Hauptartikel: [[RoboSoccer_WS_17/18|Informatikpraktikum WS 17/18]]
→ zurück zum Hauptartikel: [[RoboSoccer_WS_17/18|Informatikpraktikum WS 17/18]]

Aktuelle Version vom 25. Januar 2018, 11:13 Uhr

Autor: Christoph Jutz

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.

Teammitglieder

In diesem Abschnitt werden kurz die Teammitglieder, die an diesem Projekt beteiligt waren, und ihre Tätigkeiten vorgestellt.

  1. Christoph Jutz
    • Bau des Roboters
    • Nachbau des Roboters als LEGO - Modell mit dem LEGO - Designer
    • Entwicklung eines Konzepts/einer Spielstrategie
    • Implementierung der Spielstrategie in BricxCC (Brixc Command Center)
    • Pflege des SVN
    • HSHL - Wiki - Artikel
  2. Darius Wude
    • Bau des Roboters
    • Entwicklung einer Spielstrategie
    • Implementierung der Spielstrategie in BricxCC
    • Videoerstellung und -schnitt
  3. Anas Habbaba
    • Bau des Roboters

Das Spielfeld

Gespielt wird auf einem 183cm langen und 122cm breiten RoboSoccer - Spielfeld. Die beiden Tore sind 45cm breit und 14cm hoch. Weitere Abmessungen und Infos lassen sich hier [1] finden.

Regelwerk

Wie bei einem richtigen Fußballspiel gibt es natürlich auch beim RoboSoccer gewisse Regeln, die beachtet werden müssen. Das vollständige Regelwerk dazu ist hier [2] zu finden.

Hardware

Als Hardware wurde ein LEGO – Mindstorms - Set [3] benutzt. In diesem Set sind ein NXT-Brick [4], welcher unter anderem einen Microcontroller beinhaltet, der sich programmieren lässt, 3 Servomotoren, ein Ultraschallsensor, zwei Tastsensoren, ein Lichtsensor und ein Geräuschesensor enthalten.
Der Lichtsensor und der Geräuschesensor werden 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 [5], um den Spielball suchen zu können und zum anderen ein Kompassensor [6] zur Positionsbestimmung und zum Ausrichten zum Tor. Beide Sensoren werden von der Firma HiTechnic [7] 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. Mit den eingebauten Rotationssensoren lassen sich die Umdrehungszahlen in Grad speichern und über verschiedene Befehle rotieren, vor und zurück fahren oder bremsen. Der NXT-Brick bietet 3 Möglichkeiten, um die Servomotoren anzuschließen.

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.

Bilder des Roboters

Vorderansicht [8]
Frontalansicht [9]
Rückansicht [10]
LEGO-Modell [11]

Mit dem LEGO Digital Designer [12] haben wir den Roboter in einem 3D-Modell nachgebaut. Eine Bauanleitung, um den Roboter nachzubauen befindet sich hier: Datei:Bauanleitung Roboninho.pdf

Spielstrategie

Zur Entwicklung einer Spielstrategie für das Spielprogramm wird zunächst ein Programmablaufplan mit dem Programm „PaP-Designer“ [13] 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.

Hauptprogramm

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.

Ballsuche und Ballfang

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

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

Ballschuss

Der Schussmotor soll den Ball mit voller Leistung ins Tor schießen.

Umsetzung der Spielstrategie

Zur Realisierung der Spielstrategie und Implementierung der Unterprogramme und des Hauptprogramms wurde das Bricx Command Center [14] (kurz: BricxCC) verwendet. Dieses benutzt die Programmiersprache NXC [15] (Not eXactly C).
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:


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 hier [16] und in dem Buch „Roboter programmieren mit NXC für LEGO Mindstorms NXT“ [17] von Daniel Braun finden, welches auch von uns genutzt wurde.

Werbeplakat

Damit jeder auf den ersten Blick sehen kann, wie unser Roboter aussieht und was seine Hauptmerkmale sind, haben wir ein Werbeplakat erstellt und den Roboter auf den Namen "Roboninho" getauft.

Werbeplakat

YouTube - Video

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

Lernerfolg

Bei diesem Projekt können sowohl erste Erfahrungen in der C-Programmierung, als auch in der Konstruktionstechnik, beim Bauen des Roboters, gesammelt werden. Dabei lernt man verschieden Sensoren und deren Funktionsweise und Programmierung kennen. Außerdem lernt man, zunächst ein Konzept zu entwickeln, welches man anschließend mit einer angemessenen Dokumentation in die Tat umsetzt. Es gilt dabei Probleme im Team zu lösen und sich untereinander abzusprechen.

Projektunterlagen

Alle Projektunterlagen lassen sich hier(nur mit Zugangsberechtigung) [19] finden.

Literaturverzeichnis


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