AlphaBot: Parklücke suchen: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(39 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
[[Kategorie:AlphaBot]]
[[Kategorie:AlphaBot]]
[[ Datei:EPA Algo.jpg|thumb|rigth|450px|Abb. 1:  Schritte eines Einparkvorgangs]]
[[ Datei:EPA Algo.jpg|thumb|rigth|450px|Abb. 1:  Schritte eines Einparkvorgangs]]
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
{|class="wikitable"
'''Modul:''' Praxismodul I<br>
|-
'''Lehrveranstaltung:''' Mechatronik, Informatik Praktikum 2, 2. Semester<br>
| '''Autor:''' || [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]
|-
| '''Modul:''' || Praxismodul II
|-
| '''Lektion:''' || 10
|-
| '''Lehrveranstaltung:''' || Mechatronik, Informatik Praktikum 2, 2. Semester
|}


== Inhalt ==
= Inhalt =
*
In diesem Termin wird der Einparkalgorithmus geplant und teilweise umgesetzt. Der AlphaBot folgt geregelt einer schwarzen Linie und sucht dabei eine passende Parklücke.
== Lernziele==
== Lernziele==
Nach Durchführung dieser Lektion können Sie
Nach Durchführung dieser Lektion können Sie
Zeile 13: Zeile 20:
* Parklücken während der Fahrt vermessen.
* Parklücken während der Fahrt vermessen.
* eine geeignete Parklücke suchen und auswählen.
* eine geeignete Parklücke suchen und auswählen.
* Messdaten speichern und via MATLAB<sup>®</sup> auswerten und visualisieren.
* Messdaten via MATLAB<sup>®</sup> auswerten und visualisieren.
* mittels <code>subplot</code> Messdaten vergleichen, ein x-y-Diagramme erstellen und analysieren.
* mittels <code>subplot</code> Messdaten vergleichen, ein x-y-Diagramme erstellen und analysieren.


== Vorbereitung/Hausaufgabe ==
= Vorbereitung =
In diesem Praktikum soll Ihr AlphaBot autonom einparken. Als Algorithmus dient der in der
In diesem Praktikum soll Ihr AlphaBot autonom einparken. Als Algorithmus dient der in der
Fahrschule vermittelte Ablauf (siehe Abb. 1). Planen Sie hierzu den Algorithmus als PAP und legen Sie die Programmrümpfe als <code>switch..case</code> im Programm an. Gehen Sie in den nachfolgenden
Fahrschule vermittelte Ablauf (siehe Abb. 1). Planen Sie hierzu den Algorithmus als PAP und legen Sie die Programmrümpfe als <code>switch..case</code> im Programm an. Gehen Sie in den nachfolgenden
Phasen vor:
Phasen vor:
# Fahren Sie auf der schwarzen Linie geregelt geradeaus. Vermessen Sie dabei die Parklücke mit Ultraschall und bestimmen Sie die Länge mit dem Inkrementalgeber.
# Phase: Passende Parklücke suchen
# Phase: Einparken.
 
In diesem Termin wird Phase 1 systematisch geplant, umgesetzt und getestet.
# Fahren Sie auf der schwarzen Linie geregelt geradeaus. Nutzen Sie Ihre Quellcode <code>PDRegler.ino</code> aus Lektion 9.
# Vermessen Sie während der Fahrt die Parklücke mit Ultraschall und bestimmen Sie die Länge mit dem Inkrementalgeber. Nutzen Sie Ihren Quelltext aus den vorherigen Lektionen.
# Wenn die Lücke dem 1,5-fachen der Fahrzeuglänge entspricht, halten Sie an, um optimal einparken zu können.
# Wenn die Lücke dem 1,5-fachen der Fahrzeuglänge entspricht, halten Sie an, um optimal einparken zu können.
# Voller Rechtseinschlag
# Rückwärtsfahrt starten
# Rückwärtsfahrt bis das Auto 45° in der Parklücke steht
# Steht das Auto 45° in der Parklücke Volleinschlag links
# Gerade lenken
# Korrekturzug vorwärts


'''Arbeitsergebnisse:''' <code>AEP.pap, AEP.ino</code>
== Hausaufgabe ==
# Planen Sie das Programm mit der Unterfunktion <code>FindeParkluecke()</code> als PAP.
# Setzen Sie das PAP 1:1 als Rahmenprogramm <code>sucheParkluecke.ino</code>(nur Struktur/Rahmenprogramm)  um.


# Planen Sie die Programm mit der Unterfunktion <code>findeParklücke()</code> als PAP.
'''Arbeitsergebnisse:'''  <code>sucheParkluecke.pap, sucheParkluecke.ino</code>
# Setzen Sie das PAP 1:1 als Rahmenprogramm <code>sucheParkluecke.ino</code> um.


'''Tipp''': Sie brauchen die Programmierung noch nicht umsetzen. Legen Sie die Struktur (Header, Anweisungen, Verweigungen, Schleifen, Kommentaren..) an.
'''Tipp''': Sie brauchen die Programmierung noch nicht umsetzen. Legen Sie die Struktur (Header, Anweisungen, Verzweigungen, Schleifen, Kommentaren..) an.


Arbeitsergebnisse: <code>sucheParkluecke.pap, sucheParkluecke.ino</code>
== Tutorial ==
* [https://mathematikistueberall.de/ Mathematik im Alltag: Einparkalgorithmus]
* [[PAP-Designer:_Tutorial_Verzweigung| Wiki: PAP-Designer: Tutorial Verzweigung <code>switch..case</code>]]
* [[Bluetooth_Module_HC-05|Wiki: Bluetooth Module HC-05]]
* [[Bluetooth_Module_HC-05_-_AT-Modus#Sensoren_und_Passwörter|Wiki: Kennworte für die Bluetooth-Module]]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoBluetoothModulHC05 SVN: DemoBluetoothModulHC05]


== Versuchsdurchführung ==
= Versuchsdurchführung =
=== Aufgabe 9.1: Parklücke suchen ===
'''Start:''' Aktualisieren Sie Ihre Arduino-Bibliothek unter <code>c:\Users\HSHL-User\Documents\Arduino\libraries\</code>.
F¨ullen Sie den Funktion FindeParkluecke() gem¨aß Ihres Konzepts mit Inhalt.
== Aufgabe 10.1: Parklücke suchen ==
1. Stellen Sie mit Kartons eine Parkl¨uckensituation dar.
Füllen Sie den Unterfunktion <code>FindeParkluecke()</code> gemäß Ihres Konzepts mit Inhalt.
2. Fahren Sie mit dem Linienverfolger geregelt an den L¨ucken vorbei.
# Stellen Sie mit Kartons eine Parklückensituation dar.
3. Vermessen Sie w¨ahrend der Fahrt diese L¨ucken.
# Fahren Sie mit dem Linienverfolger geregelt an den Lücken vorbei.
4. Das Fahrzeug soll sanft anfahren (lineare Rampe bis vmax).
# Vermessen Sie während der Fahrt diese Lücken.
5. Stoppen Sie Ihr Fahrzeug, wenn Sie eine passende L¨ucke gefunden haben.
# Das Fahrzeug soll sanft anfahren (lineare Rampe bis vmax).
Arbeitsergebnisse: <code>sucheParkluecke.ino</code>
# Stoppen Sie Ihr Fahrzeug, wenn Sie eine passende Lücke gefunden haben.


=== Aufgabe 9.2 Speicherung und Visualisierung ===
'''Arbeitsergebnisse:''' <code>sucheParkluecke.ino</code>
Speichern Sie während der Fahrt Daten im [[Arduino:_Daten_im_EEPROM_speichern|EEPROM]]. Visualisieren Sie in MATLAB<sup>®</sup> die Werte
 
* Längsabweichung (Fahrstrecke, x-t-Diagramm)
'''Hinweis:'''
* Querabweichung (Ultraschallmesswerte, y-t-Diagramm)
* Der Tracker nutzt die Brücken F (<code>D4, D10, D11, D12, D13</code>) für die I2C-Kommunikation der 5 Sensoren.
* Längs- und Querabweichung (x-y-Diagramm)
* Nutzen Sie zwei Drahtbrücken, um den Ultraschallsensor über E (<code>D7 TRIG, D8 ECHO</code>) einzulesen.
 
== Aufgabe 10.2 Visualisierung ==
* Senden Sie während der Fahrt Daten via Bluetooth an MATLAB<sup>®</sup>.
* Visualisieren Sie in MATLAB<sup>®</sup> die Werte
** Längsabweichung (Fahrstrecke, x-t-Diagramm)
** Querabweichung (Ultraschallmesswerte, y-t-Diagramm)
** Längs- und Querabweichung (x-y-Diagramm)
über der Fahrzeit.
über der Fahrzeit.


'''Arbeitsergebnis:''' <code>zeigeMesswerte.m</code>
'''Arbeitsergebnis:''' <code>zeigeMesswerte.m</code>


'''Hinweis:''' Achten Sie auf die maximalen Schreib- und Lesezyklen für ein EEPROM.
== Aufgabe 10.3: Nachhaltige Doku ==
 
=== Aufgabe 9.3: Nachhaltige Doku ===
* Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN.
* Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN.
* Halten Sie die Regeln für den [[Software_Versionsverwaltung_mit_SVN|Umgang mit SVN]] ein.
* Halten Sie die Regeln für den [[Software_Versionsverwaltung_mit_SVN|Umgang mit SVN]] ein.
Zeile 66: Zeile 83:
* Kommentiere Sie den Quelltext umfangreich.
* Kommentiere Sie den Quelltext umfangreich.


== Tutorials ==
= Demos =
* [[Arduino:_Daten_im_EEPROM_speichern|Daten im EEPROM speichern]]
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoSwitchCase/DemoSwitchCase.ino <code>DemoSwitchCase.ino</code>]
*<code>E28_IR_Line_Tracking_Sensor_Messung</code>
*<code>E28b_IR_Line_Tracking_Sensor</code>
*<code>E08_Infrared_Line_Tracking</code>
*<code>E08b_Infrared_Line_Tracking_PD</code>
*<code>PDRegler.ino</code>
*<code>BluetoothDatenlogger.ino</code>
*<code>E38_sendeByteViaBT.ino</code>
*<code>empfangeByteViaBT.m</code>
 


== Demos ==
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Musterlösung Hausaufgabe&thinsp;</strong>
|-
| [[Datei:FindeParkluecke.jpg|500px]]
|}
== [[Datei:Lektionen.jpg|60px]] Ausblick zur nächsten Lektion ==
In der nächsten Lektion parkt der AlphaBot zwischen zwei Kartons in eine Längsparklücke autonom ein (Einparkassistent).


== Literatur ==


----
----
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2023|1]] [[AlphaBot:_Messdatenverarbeitung_mit_MATLAB|2]] [[AlphaBot:_MATLAB_als_serieller_Monitor|3]] [[AlphaBot: Servo ansteuern|4]] [[AlphaBot: AlphaBot:_Motoren_und_Inkrementalgeber|5]] [[AlphaBot: Programmier-Challenge I SoSe23|6]] [[AlphaBot:_Gesteuerte_Fahrt|7]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|8]] [[AlphaBot: Parklücke suchen|9]] [[AlphaBot: Autonomes Einparken|10]] [[AlphaBot: Programmier-Challenge II SoSe23|11]]<br>
→ Termine [[Einführungsveranstaltung_Informatikpraktikum_2_im_SoSe_2026|1]] [[AlphaBot:_Messdatenverarbeitung_mit_MATLAB|2]] [[AlphaBot:_Hardware_Support_Package_für_MATLAB|3]] [[AlphaBot: Servo_mit_MATLAB_ansteuern|4]] [[AlphaBot:_Motoren_und_Inkrementalgeber|5]] [[AlphaBot: Programmier-Challenge I SoSe26|6]] [[AlphaBot:_Roboternavigation_SoSe26|7]] [[AlphaBot:_Bluetooth_Datenlogger|8]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|9]] [[AlphaBot: Parklücke suchen|10]] [[AlphaBot: Autonomes Einparken|11]] [[AlphaBot: Programmier-Challenge II SoSe26|12]]<br>
→ zurück zum Hauptartikel: [[AlphaBot_SoSe23|Informatik Praktikum 2]]
→ zurück zum Hauptartikel: [[AlphaBot_SoSe26|Informatik Praktikum 2]]<br>
→ Haben Sie Fragen? [[Informatik Praktikum FAQ]]

Aktuelle Version vom 25. Juni 2026, 08:59 Uhr

Abb. 1: Schritte eines Einparkvorgangs
Autor: Prof. Dr.-Ing. Schneider
Modul: Praxismodul II
Lektion: 10
Lehrveranstaltung: Mechatronik, Informatik Praktikum 2, 2. Semester

Inhalt

In diesem Termin wird der Einparkalgorithmus geplant und teilweise umgesetzt. Der AlphaBot folgt geregelt einer schwarzen Linie und sucht dabei eine passende Parklücke.

Lernziele

Nach Durchführung dieser Lektion können Sie

  • einen Einparkalgorithmus planen
  • Parklücken während der Fahrt vermessen.
  • eine geeignete Parklücke suchen und auswählen.
  • Messdaten via MATLAB® auswerten und visualisieren.
  • mittels subplot Messdaten vergleichen, ein x-y-Diagramme erstellen und analysieren.

Vorbereitung

In diesem Praktikum soll Ihr AlphaBot autonom einparken. Als Algorithmus dient der in der Fahrschule vermittelte Ablauf (siehe Abb. 1). Planen Sie hierzu den Algorithmus als PAP und legen Sie die Programmrümpfe als switch..case im Programm an. Gehen Sie in den nachfolgenden Phasen vor:

  1. Phase: Passende Parklücke suchen
  2. Phase: Einparken.

In diesem Termin wird Phase 1 systematisch geplant, umgesetzt und getestet.

  1. Fahren Sie auf der schwarzen Linie geregelt geradeaus. Nutzen Sie Ihre Quellcode PDRegler.ino aus Lektion 9.
  2. Vermessen Sie während der Fahrt die Parklücke mit Ultraschall und bestimmen Sie die Länge mit dem Inkrementalgeber. Nutzen Sie Ihren Quelltext aus den vorherigen Lektionen.
  3. Wenn die Lücke dem 1,5-fachen der Fahrzeuglänge entspricht, halten Sie an, um optimal einparken zu können.

Hausaufgabe

  1. Planen Sie das Programm mit der Unterfunktion FindeParkluecke() als PAP.
  2. Setzen Sie das PAP 1:1 als Rahmenprogramm sucheParkluecke.ino(nur Struktur/Rahmenprogramm) um.

Arbeitsergebnisse: sucheParkluecke.pap, sucheParkluecke.ino

Tipp: Sie brauchen die Programmierung noch nicht umsetzen. Legen Sie die Struktur (Header, Anweisungen, Verzweigungen, Schleifen, Kommentaren..) an.

Tutorial

Versuchsdurchführung

Start: Aktualisieren Sie Ihre Arduino-Bibliothek unter c:\Users\HSHL-User\Documents\Arduino\libraries\.

Aufgabe 10.1: Parklücke suchen

Füllen Sie den Unterfunktion FindeParkluecke() gemäß Ihres Konzepts mit Inhalt.

  1. Stellen Sie mit Kartons eine Parklückensituation dar.
  2. Fahren Sie mit dem Linienverfolger geregelt an den Lücken vorbei.
  3. Vermessen Sie während der Fahrt diese Lücken.
  4. Das Fahrzeug soll sanft anfahren (lineare Rampe bis vmax).
  5. Stoppen Sie Ihr Fahrzeug, wenn Sie eine passende Lücke gefunden haben.

Arbeitsergebnisse: sucheParkluecke.ino

Hinweis:

  • Der Tracker nutzt die Brücken F (D4, D10, D11, D12, D13) für die I2C-Kommunikation der 5 Sensoren.
  • Nutzen Sie zwei Drahtbrücken, um den Ultraschallsensor über E (D7 TRIG, D8 ECHO) einzulesen.

Aufgabe 10.2 Visualisierung

  • Senden Sie während der Fahrt Daten via Bluetooth an MATLAB®.
  • Visualisieren Sie in MATLAB® die Werte
    • Längsabweichung (Fahrstrecke, x-t-Diagramm)
    • Querabweichung (Ultraschallmesswerte, y-t-Diagramm)
    • Längs- und Querabweichung (x-y-Diagramm)

über der Fahrzeit.

Arbeitsergebnis: zeigeMesswerte.m

Aufgabe 10.3: Nachhaltige Doku

Demos

  • DemoSwitchCase.ino
  • E28_IR_Line_Tracking_Sensor_Messung
  • E28b_IR_Line_Tracking_Sensor
  • E08_Infrared_Line_Tracking
  • E08b_Infrared_Line_Tracking_PD
  • PDRegler.ino
  • BluetoothDatenlogger.ino
  • E38_sendeByteViaBT.ino
  • empfangeByteViaBT.m


Ausblick zur nächsten Lektion

In der nächsten Lektion parkt der AlphaBot zwischen zwei Kartons in eine Längsparklücke autonom ein (Einparkassistent).



→ Termine 1 2 3 4 5 6 7 8 9 10 11 12
→ zurück zum Hauptartikel: Informatik Praktikum 2
→ Haben Sie Fragen? Informatik Praktikum FAQ