RoboSoccer Gruppe B4 - WS 19/20: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(17 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Autoren:''' [[Benutzer:Dominik Sumkötter|Dominik Sumkötter]], [[Benutzer:Lukas Mücke|Lukas Mücke]], [[Benutzer:Markus Belsch|Markus Belsch]]  
'''Autoren:''' [[Benutzer:Dominik Sumkötter|Dominik Sumkötter]], [[Benutzer:Lukas-Erich Mücke | Lukas Mücke]], [[Benutzer:Markus Belsch|Markus Belsch]]  
   
   
 
[[Datei: Ball-E Werbeplakat.jpg |mini| Werbeplakat für Ball.E <ref> Eigenes Bild </ref>]]
== Einleitung ==
== Einleitung ==
In dem Informatikpraktikum I (WS 19/20) war das Ziel, einen Roboter aus Lego Mindstorms Bauteilen, aufgabengerecht zu konstruieren und zu programmieren, damit er am Ende des Semester autonom Fussball spielen kann und am [[RoboSoccer WS 19/20|RoboSoccer]]-Turnier teilnehmen kann. Der begleitende Professor dieses Praktikums war [[Benutzer:Ulrich Schneider|Prof. Dr. Ulrich Schneider]].
Im [[Informatikpraktikum_MTR|Informatikpraktikum I (WS 19/20)]] war das Ziel, einen Roboter aus Lego Mindstorms Bauteilen, aufgabengerecht zu konstruieren und zu programmieren, damit er am Ende des Semester autonom Fussball spielen kann und am [[RoboSoccer WS 19/20|RoboSoccer]]-Turnier teilnehmen kann. Der begleitende Professor dieses Praktikums war [[Benutzer:Ulrich Schneider|Prof. Dr. Ulrich Schneider]].


== Das Team ==
== Das Team ==


'''[[Benutzer:Lukas Mücke|Lukas Mücke]]'''  
'''[[Benutzer:Markus Belsch|Markus Belsch]]'''
:*Programmierung des Robotes
:*Debugging
:*Erarbeitung der theoretischen Grundlagen
 
'''[[Benutzer:Lukas-Erich Mücke|Lukas Mücke]]'''  
:*Konstruktion des Roboters
:*Konstruktion des Roboters
:*Entwicklung der Spielstrategie
:*Entwicklung der Spielstrategie
Zeile 15: Zeile 20:
:*Entwicklung der Spielstrategie
:*Entwicklung der Spielstrategie
:*Erstellung der Debugging-Funktionen
:*Erstellung der Debugging-Funktionen
'''[[Benutzer:Markus Belsch|Markus Belsch]]'''
:*Programmierung des Robotes
:*Debugging
:*Erarbeitung der theoretischen Grundlagen


(Jedes Mitglied des Teams hat in jedem Bereich zur Fertigstellung des Roboters beigetragen.
(Jedes Mitglied des Teams hat in jedem Bereich zur Fertigstellung des Roboters beigetragen.
Zeile 32: Zeile 32:
:+ hohe Schußkraft und Geschwindigkeit durch langen Hebelarm
:+ hohe Schußkraft und Geschwindigkeit durch langen Hebelarm


*'''Nachteile:'''*
*'''Nachteile:'''
:- Relativ langer Aufbau, vor dem Vorderrad; Manövrieren am Spielfeld Rand
:- Relativ langer Aufbau, vor dem Vorderrad; Manövrieren am Spielfeld Rand
:- Ballaufnahme funktioniert nicht immer fehlerfrei
:- Ballaufnahme funktioniert nicht immer fehlerfrei
Zeile 39: Zeile 39:


=== Aufbau ===
=== Aufbau ===
[[Datei:Ball-E.png|mini| Aufbau Ball.E Ansicht 1 <ref> Bild aus Lego Digital Designer </ref>]]
[[Datei:Ball-E.2.png |mini| Aufbau Ball.E Ansicht 2 <ref> Bild aus Lego Digital Designer </ref>]]
Der Grundgedanke der Konstruktion war es, einen möglichst kompatken Roboter zu bauen, an dem relativ einfach Änderungen vorgenommen werden können. Daraus entwickelte sich der Ansatz, alle Bauteile direkt an dem NXT-Brick zu befestigen. Im nächsten Schritt wurden Gerüste um den Brick gebaut, um möglichst viele und flexible Möglichkeiten zu haben, Sensoren und Aktoren, sowie weitere Gerüste/Gestelle mit wiederum Sensoren und Aktoren anzubringen.
Der Grundgedanke der Konstruktion war es, einen möglichst kompatken Roboter zu bauen, an dem relativ einfach Änderungen vorgenommen werden können. Daraus entwickelte sich der Ansatz, alle Bauteile direkt an dem NXT-Brick zu befestigen. Im nächsten Schritt wurden Gerüste um den Brick gebaut, um möglichst viele und flexible Möglichkeiten zu haben, Sensoren und Aktoren, sowie weitere Gerüste/Gestelle mit wiederum Sensoren und Aktoren anzubringen.


Zeile 47: Zeile 49:
* '''Infrarotsensor:''' Der Infrarotsensor dient dazu, über die Postion des Balls einen Lenkwert zu bestimmen, der dann dazu dient, den Roboter zum Ball zu steuern. Außerdem wird über eine bestimmte Charakteristik im Verlauf der Sensorwerte bestimmt, wann der Ball sich in Reichweite befindet und aufgenommen werden kann
* '''Infrarotsensor:''' Der Infrarotsensor dient dazu, über die Postion des Balls einen Lenkwert zu bestimmen, der dann dazu dient, den Roboter zum Ball zu steuern. Außerdem wird über eine bestimmte Charakteristik im Verlauf der Sensorwerte bestimmt, wann der Ball sich in Reichweite befindet und aufgenommen werden kann


* '''Kompasssensor:''' Der Kompasssensor dient zur Torausrichtung.
* '''Kompasssensor:''' Der Kompasssensor dient zur Ausrichtung des Roboters zum Tor.


== Programmierung ==
== Programmierung ==


Die Programmierung wurde mit dem Tool BricxCC erstellt und kompiliert und dementsprechend NXC Programmiersprache verfasst.
Die Programmierung wurde mit dem Tool BricxCC erstellt und kompiliert und dementsprechend in der Programmiersprache NXC verfasst.


=== PAP/Spielstrategie ===
=== PAP/Spielstrategie ===
Zeile 58: Zeile 60:
Danach beginnt auf Knopfdruck die Endlossschleife, indem das Verhalten des Roboters während des Spiels definiert ist.
Danach beginnt auf Knopfdruck die Endlossschleife, indem das Verhalten des Roboters während des Spiels definiert ist.
Der Roboter soll immer auf den Ball zufahren, bis der IR-Sensor meldet, dass der Ball in greifbarer Nähe ist. Dann soll der Ball gefangen werden. Das Unterprogramm "Ballfangen" wird ausgeführt, bis ein Timer abläuft (500ms), oder der Tastsensor ermittelt, dass der Ball tatsächlich gefangen ist. Wenn der Tastsensor gedrückt würde, richtet sich der Roboter in Richtung des Tors aus und schießt. Wenn der Ball nicht gefangen wurde, sucht der Roboter erneut den Ball und fährt darauf zu.
Der Roboter soll immer auf den Ball zufahren, bis der IR-Sensor meldet, dass der Ball in greifbarer Nähe ist. Dann soll der Ball gefangen werden. Das Unterprogramm "Ballfangen" wird ausgeführt, bis ein Timer abläuft (500ms), oder der Tastsensor ermittelt, dass der Ball tatsächlich gefangen ist. Wenn der Tastsensor gedrückt würde, richtet sich der Roboter in Richtung des Tors aus und schießt. Wenn der Ball nicht gefangen wurde, sucht der Roboter erneut den Ball und fährt darauf zu.
{|class="wikitable"
| [[Datei:BALL E PAP.jpg| mini | links | PAP des Programms von BALL.E <ref> BALL.E PAP </ref>]]
|}


=== Debugging ===
=== Debugging ===
Um die Fehlersuche in der Programmierung zu vereinfachen haben wir zwei Ansätze zum Debugging verfolgt: Zum einen, werden während des Programmablaufs alle wichtigen Werte auf dem LCD des NXT-Bricks ausgegeben, zum anderen werden einmalig die kalibrierten Werte und alle 500ms fast alle Sensorwerte in einer Log-Datei auf dem Brick abgelegt. Als Zusatzinformation, wird das Unterprogramm, in dem sich der Roboter zum gegebenen Zeitpunkt befindet, mit in der Datei abgelegt.
Um die Fehlersuche in der Programmierung zu vereinfachen haben wir zwei Ansätze zum Debugging verfolgt: Zum einen, werden während des Programmablaufs alle wichtigen Werte auf dem LCD des NXT-Bricks ausgegeben, zum anderen werden einmalig die kalibrierten Werte und alle 500ms fast alle Sensorwerte in einer Log-Datei auf dem Brick abgelegt. Als Zusatzinformation, wird das Unterprogramm, in dem sich der Roboter zum gegebenen Zeitpunkt befindet, mit in der Datei abgelegt.


==== Quellcode LCD-Ausgabe ====
==== Ausgabe Data-Logging in Tabelle ====
{| class="wikitable"
| [[Datei:BallEDatalog.jpg | mini | links | Beispielwerte aus dem Datalogging in einem Tabellenkalkulationsprogramm <ref> Datalog in Tabelle </ref>]]
|}


==== Quellcode Data-Logging ====
=== Quellcode main() ===
{| class="wikitable"
|[[Datei:BallE Quellcode main.jpg | mini | links| Quellcode der main()Funktion <ref> Quellcode main() </ref>]]
|}


=== Quellcode ===
== Video ==
Video von Ball.E auf Youtube:[https://youtu.be/NzSUIUDzkh0 Link]
----
→ zurück zum Hauptartikel: [[RoboSoccer_WS_19/20|Informatikpraktikum WS 19/20]]

Aktuelle Version vom 28. Januar 2020, 14:22 Uhr

Autoren: Dominik Sumkötter, Lukas Mücke, Markus Belsch

Werbeplakat für Ball.E [1]

Einleitung

Im Informatikpraktikum I (WS 19/20) war das Ziel, einen Roboter aus Lego Mindstorms Bauteilen, aufgabengerecht zu konstruieren und zu programmieren, damit er am Ende des Semester autonom Fussball spielen kann und am RoboSoccer-Turnier teilnehmen kann. Der begleitende Professor dieses Praktikums war Prof. Dr. Ulrich Schneider.

Das Team

Markus Belsch

  • Programmierung des Robotes
  • Debugging
  • Erarbeitung der theoretischen Grundlagen

Lukas Mücke

  • Konstruktion des Roboters
  • Entwicklung der Spielstrategie

Dominik Sumkötter

  • Programmierung des Roboters
  • Entwicklung der Spielstrategie
  • Erstellung der Debugging-Funktionen

(Jedes Mitglied des Teams hat in jedem Bereich zur Fertigstellung des Roboters beigetragen. Die oben gennanten Punkte beziehen sich entsprechend auf die Hauptbereiche der Mitarbeit und sind nicht exklusiv zu verstehen.)

Roboter Profil

  • Name: BALL.E
  • Vorteile:
+ niedrieger Schwerpunkt
+ hohe Endgeschwindigkeit durch große Räder
+ hohe Schußkraft und Geschwindigkeit durch langen Hebelarm
  • Nachteile:
- Relativ langer Aufbau, vor dem Vorderrad; Manövrieren am Spielfeld Rand
- Ballaufnahme funktioniert nicht immer fehlerfrei

Konstruktion

Aufbau

Aufbau Ball.E Ansicht 1 [2]
Aufbau Ball.E Ansicht 2 [3]

Der Grundgedanke der Konstruktion war es, einen möglichst kompatken Roboter zu bauen, an dem relativ einfach Änderungen vorgenommen werden können. Daraus entwickelte sich der Ansatz, alle Bauteile direkt an dem NXT-Brick zu befestigen. Im nächsten Schritt wurden Gerüste um den Brick gebaut, um möglichst viele und flexible Möglichkeiten zu haben, Sensoren und Aktoren, sowie weitere Gerüste/Gestelle mit wiederum Sensoren und Aktoren anzubringen.

Sensoren

  • Tastsensor: Der Tastsensor dient zur Bestätigung, ob der Ball gefangen wurde.
  • Infrarotsensor: Der Infrarotsensor dient dazu, über die Postion des Balls einen Lenkwert zu bestimmen, der dann dazu dient, den Roboter zum Ball zu steuern. Außerdem wird über eine bestimmte Charakteristik im Verlauf der Sensorwerte bestimmt, wann der Ball sich in Reichweite befindet und aufgenommen werden kann
  • Kompasssensor: Der Kompasssensor dient zur Ausrichtung des Roboters zum Tor.

Programmierung

Die Programmierung wurde mit dem Tool BricxCC erstellt und kompiliert und dementsprechend in der Programmiersprache NXC verfasst.

PAP/Spielstrategie

Die im Programm umgesetzte Spielstrategie funktioniert nach dem folgenden System: Zuerst werden der Infrarotwert für die richtige Entfernung zum IR-Ball und der Kompasswert für die Richtung des Tors kalibriert. Danach beginnt auf Knopfdruck die Endlossschleife, indem das Verhalten des Roboters während des Spiels definiert ist. Der Roboter soll immer auf den Ball zufahren, bis der IR-Sensor meldet, dass der Ball in greifbarer Nähe ist. Dann soll der Ball gefangen werden. Das Unterprogramm "Ballfangen" wird ausgeführt, bis ein Timer abläuft (500ms), oder der Tastsensor ermittelt, dass der Ball tatsächlich gefangen ist. Wenn der Tastsensor gedrückt würde, richtet sich der Roboter in Richtung des Tors aus und schießt. Wenn der Ball nicht gefangen wurde, sucht der Roboter erneut den Ball und fährt darauf zu.

PAP des Programms von BALL.E [4]

Debugging

Um die Fehlersuche in der Programmierung zu vereinfachen haben wir zwei Ansätze zum Debugging verfolgt: Zum einen, werden während des Programmablaufs alle wichtigen Werte auf dem LCD des NXT-Bricks ausgegeben, zum anderen werden einmalig die kalibrierten Werte und alle 500ms fast alle Sensorwerte in einer Log-Datei auf dem Brick abgelegt. Als Zusatzinformation, wird das Unterprogramm, in dem sich der Roboter zum gegebenen Zeitpunkt befindet, mit in der Datei abgelegt.

Ausgabe Data-Logging in Tabelle

Beispielwerte aus dem Datalogging in einem Tabellenkalkulationsprogramm [5]

Quellcode main()

Quellcode der main()Funktion [6]

Video

Video von Ball.E auf Youtube:Link


→ zurück zum Hauptartikel: Informatikpraktikum WS 19/20

  1. Eigenes Bild
  2. Bild aus Lego Digital Designer
  3. Bild aus Lego Digital Designer
  4. BALL.E PAP
  5. Datalog in Tabelle
  6. Quellcode main()