AlphaBot: Geregelte Fahrt mit Linienverfolger: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(37 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:
[[Kategorie:AlphaBot]]
[[Kategorie:AlphaBot]]
[[Datei:AlphaBot 550px.gif|thumb|rigth|350px|Abb. 1:  Geregelte Fahrt mit Linienverfolger]]
[[Datei:AlphaBot 550px.gif|thumb|rigth|350px|Abb. 1:  Geregelte Fahrt mit Linienverfolger]]
[[Datei:Tracker-sensor.jpg|thumb|rigth|350px|Abb. 2:  AlphaBot Linienverfolger]]
{|class="wikitable"
|-
| '''Autor:'''  || [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]
|-
| '''Modul:''' || Praxismodul II
|-
| '''Lektion:''' || 9
|-


[[Datei:Tracker-sensor.jpg|thumb|rigth|350px|Abb. 2:  AlphaBot Linienverfolger]]
| '''Lehrveranstaltung:''' || Mechatronik, Informatik Praktikum 2, 2. Semester
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]<br>
|}
'''Modul:''' Praxismodul I<br>
'''Lehrveranstaltung:''' Mechatronik, Informatik Praktikum 2, 2. Semester<br>


== Inhalt ==
= Inhalt =
* Inbetriebnahme des Linienverfolgungssensors
* Inbetriebnahme des Linienverfolgungssensors
* Kalibrierung des Linienverfolgungssensors
* Kalibrierung des Linienverfolgungssensors
* 2-Punkt-Regler
* PD-Regler
* PD-Regler
* x-y-Plot der Roboterpose
* x-y-Plot der Roboterpose


== Lernziele==
= Lernziele=
Nach Durchführung dieser Lektion können Sie
Nach Durchführung dieser Lektion können Sie
* geregelt einer Linie folgen.
* geregelt einer Linie folgen.
Zeile 23: Zeile 29:
* die Auslegung systematisch dokumentieren
* die Auslegung systematisch dokumentieren


== Vorbereitung/Hausaufgabe ==
= Vorbereitung =
Bereiten Sie diese Aufgabe für den Praktikumstermin vor.
Bereiten Sie diese Aufgabe für den Praktikumstermin vor.
* Planen Sie jede Aufgabe als PAP.
* Planen Sie jede Aufgabe als PAP.
Zeile 29: Zeile 35:
* Nutzen Sie das Tutorial [[AlphaBot_Linienverfolgungsssensor]] zur Einarbeitung.
* Nutzen Sie das Tutorial [[AlphaBot_Linienverfolgungsssensor]] zur Einarbeitung.
* Kalibrieren Sie den Sensor.
* Kalibrieren Sie den Sensor.
* Zeigen Sie die Messwerte im Seriellen Monitor an.
* Zeigen Sie die Messwerte im seriellen Monitor an.
* Kapseln Sie die Kalibrierung in der Funktion <code>void KalibriereLinienVerfolger()</code>.
* Kapseln Sie die Kalibrierung in der Funktion <code>void KalibriereLinienVerfolger()</code>.
* Beantworten Sie die Lernzielkontrollfragen.
* Beantworten Sie die Lernzielkontrollfragen.
Zeile 40: Zeile 46:
|-
|-
|
|
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger">
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:small">
void KalibriereLinienVerfolger() {
void KalibriereLinienVerfolger() {
   Serial.println("Kalibrierung startet für 10s...");
   Serial.println("Kalibrierung startet für 10s...");
Zeile 70: Zeile 76:
|}
|}


== Lernzielkontrollfragen ==
= Lernzielkontrollfragen =
Lernzielkontrollfragen:
* Wie funktioniert der Linienverfolgungssensors technisch?
* Wie funktioniert der Linienverfolgungssensors technisch?
* Arbeitet der Sensor passiv?
* Arbeitet der Sensor passiv?
Zeile 81: Zeile 86:
* Welcher Wert dient als Sollwert?
* Welcher Wert dient als Sollwert?


== Versuchsdurchführung ==
== Tutorials ==
=== Aufgabe 8.1: 2-Punkt-Regler ===
*[[AlphaBot_Linienverfolgungsssensor]]
* [https://www.youtube.com/watch?v=MSoLigzhbeM info8uniwue: Einführung PID Regler]
* [https://www.youtube.com/watch?v=quqxyny5kBU Loviscach, J.: P- und PI-Regler; Einstellung nach Ziegler-Nichols]
* [https://www.youtube.com/watch?v=l26IGS2RlM0 Studyfix: Regelkreis]
* [https://spacehal.github.io/docs/category/linienfolger RuleTheBots: Linienverfolger]
* [[Bluetooth_Module_HC-05_-_AT-Modus#Sensoren_und_Passwörter|Wiki: Kennworte für die Bluetooth-Module]]
 
== Demos ==
*<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>
 
= Versuchsdurchführung =
<!--
== Aufgabe 9.1: 2-Punkt-Regler ==
Programmieren Sie einen [https://de.wikipedia.org/wiki/Zweipunktregler 2-Punkt-Regler], damit der AlphaBot der schwarzen Linien folgt. Der 2-Punkt-Regler fährt beispielsweise nach rechts, wenn er hell sieht und nach links, wenn er Schwarz sieht. So "hangelt" er sich zappelig an der Linie entlang.  
Programmieren Sie einen [https://de.wikipedia.org/wiki/Zweipunktregler 2-Punkt-Regler], damit der AlphaBot der schwarzen Linien folgt. Der 2-Punkt-Regler fährt beispielsweise nach rechts, wenn er hell sieht und nach links, wenn er Schwarz sieht. So "hangelt" er sich zappelig an der Linie entlang.  


Zeile 94: Zeile 114:
|-
|-
|}
|}
----
-->
== Aufgabe 9.1: PD-Regler ==
[[Datei:Regelkreis PD.png|thumb|rigth|550px|Abb. 3:  Regelkreis für den Linienverfolgungs-Algorithmus]]


=== Aufgabe 8.2: PD-Regler ===
# Programmieren Sie einen PD-Regler gemäß Abb. 3, damit der AlphaBot der schwarzen Linien folgt.<br><math> u(t) = K_P \cdot e(t) + K_D \cdot \frac{d}{dt}e(t) </math>  
[[Datei:Regelkreis PD.png|thumb|rigth|550px|Abb. 4:  Regelkreis für den Linienverfolgungs-Algorithmus]]
 
Programmieren Sie einen PD-Regler gemäß Abb. 4, damit der AlphaBot der schwarzen Linien folgt. Planen Sie zuvor das Programm als PAP.
 
<math> u(t) = K_P \cdot e(t) + K_D \cdot \frac{d}{dt}e(t) </math>
 
# Wählen Sie den Sollwert als Konstante.
# Wählen Sie den Sollwert als Konstante.
# In welchem Bereich bewegt sich der Istwert?
# In welchem Bereich bewegt sich der Istwert?
# Setzen Sie die Motorsteuerung mit dem Befehl <code>MotorRun(L,R)</code> um, wobei gilt <math>L,R \in [-250; 250]</math>.
# Setzen Sie die Motorsteuerung mit dem Befehl <code>MotorRun(L,R)</code> um, wobei gilt <math>L,R \in [-250; 250]</math>.
# Experimentieren Sie, welche Parameter <code>Kp, Kd</code> die besten Ergebnisse liefern.
# Dokumentieren Sie Ihre Ergebnisse systematisch tabellarisch.


'''Arbeitsergebnisse:''' <code>PDRegler.pap, PDRegler.ino, PD_Parametervariation.xslx</code>
'''Arbeitsergebnisse:''' <code>PDRegler.ino</code>


{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
Zeile 127: Zeile 143:
|-
|-
|}
|}
== Aufgabe 9.2: Geradeausfahrt mit Linienverfolger ==
Nun wollen wir gleichzeitig den Ultraschall und Linienverfolger nutzen.
# Nutzen Sie schwarzes Klebeband auf einem hellen Untergrund (z.&thinsp;B. weißes Blatt Papier), um eine gerade Fahrstrecke von 2&thinsp;m zu markieren.
# Drehen Sie den Ultraschall-Sensor auf 180° (Blick auf die Wand).
# Messen Sie während der Fahrt die Radumdrehungen des linken und rechten Rades (uL, uR).
# Messen Sie während der Fahrt den Abstand zur Wand (a) mit dem Ultraschall Sensor.
# Folgen Sie der schwarzen Linie möglichst geradlinig.
# Experimentieren Sie, welche Parameter <code>Kp, Kd</code> die besten Ergebnisse liefern.
# Dokumentieren Sie Ihre Ergebnisse systematisch tabellarisch.
'''Arbeitsergebnisse:''' <code>PDReglerUltraschall.ino, PD_Parametervariation.xslx</code>


{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 3&thinsp;</strong>
| <strong>Tipp 3&thinsp;</strong>
|-
|-
| Studieren Sie das Beispiel [[https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E08b_Infrared_Line_Tracking_PD  E08b_Infrared_Line_Tracking_PD]].
| Studieren Sie das Beispiel [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/AlphaBot/ArduinoLibOrdner/AlphaBot/examples/E08b_Infrared_Line_Tracking_PD  E08b_Infrared_Line_Tracking_PD].
|-
|-
| Achten Sie darauf, dass Sie in einer Gleichung dieselben Dateitypen verrechnen. Möchten Sie beispielsweise eine Fließkommazahl berechnen müssen Sie alle Variable mit <code>float()</code> umwandeln.
| Achten Sie darauf, dass Sie in einer Gleichung dieselben Dateitypen verrechnen. Möchten Sie beispielsweise eine Fließkommazahl berechnen müssen Sie alle Variable mit <code>float()</code> umwandeln.
Zeile 145: Zeile 174:
|}
|}


=== Aufgabe 8.3: Geradeausfahrt mit Linienverfolger ===
== Aufgabe 9.3: Umgebung als x-y-Plot ==
Nun wollen wir gleichzeitig den Ultraschall und Linienverfolger nutzen.
# Senden Sie die Messdaten (uL, uR, a) via Bluetooth an MATLAB<sup>®</sup>.
# Bereiten Sie sich vor, indem Sie die Funktion des Linienverfolgungssensors in der gängigen Fachliteratur (z.&thinsp;B. [[AlphaBot_Linienverfolgungsssensor |AlphaBot - Linienverfolgungssensor]]) recherchieren und erläutern können.
# Berechnen Sie die Roboterposition (x, y).
# Nutzen Sie schwarzes Klebeband auf einem hellen Untergrund (z.&thinsp;B. weißes Blatt Papier), um eine gerade Fahrstrecke von 2&thinsp;m zu markieren.
# Berechnen Sie den Kurswinkel <math>\psi = \frac{\Delta x}{\Delta y}</math>.  
# Drehen Sie den Ultraschall-Sensor auf 180° (Blick auf die Wand).
# Zeichnen Sie die Roboterpose (x, y, ψ) und den Abstand zur Wand (a) während der Fahrt in MATLAB<sup>®</sup>.
# Messen Sie während der Fahrt die gefahrene Strecke (x) mit der Odometrie.
# Messen Sie während der Fahrt den Abstand zur Wand (y) mit dem Ultraschall Sensor.
# Folgen Sie der schwarzen Linie möglichst geradlinig.
# Experimentieren Sie, welche Parameter <code>Kp, Kd</code> die besten Ergebnisse liefern.
# Dokumentieren Sie Ihre Ergebnisse systematisch tabellarisch.
# Zeichnen Sie die Roboterpose (x,y,ψ) in MATLAB<sup>®</sup>.


'''Arbeitsergebnisse:''' <code>PDReglerUltraschall.pap, PDReglerUltraschall.ino, zeigeRoboterpose.m</code>
'''Arbeitsergebnisse:''' <code>zeigeTrajektorie.m</code>


=== Aufgabe 8.4: Nachhaltige Doku ===
== Aufgabe 9.4: 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 168: Zeile 191:
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>


== Tutorials ==
= [[Datei:Lektionen.jpg|60px]] Ausblick zur nächsten Lektion =
*[[AlphaBot_Linienverfolgungsssensor]]
In der nächsten Lektion sucht der AlphaBot, während er geregelt einer schwarzen Linie folgt, mit dem Ultraschallsensor eine freie Parklücke.
* [https://www.youtube.com/watch?v=MSoLigzhbeM info8uniwue: Einführung PID Regler]
* [https://www.youtube.com/watch?v=quqxyny5kBU Loviscach, J.: P- und PI-Regler; Einstellung nach Ziegler-Nichols]
* [https://www.youtube.com/watch?v=l26IGS2RlM0 Studyfix: Regelkreis]
 
== Demos ==
*<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>


== 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:_Motoren_und_Inkrementalgeber|5]] [[AlphaBot: Programmier-Challenge I SoSe23|6]] [[AlphaBot:_Gesteuerte_Fahrt|7]] [[AlphaBot: Geregelte Fahrt mit Linienverfolger|8]] [[AlphaBot: Programmier-Challenge II SoSe24|9]]<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_SoSe24|Informatik Praktikum 2]]
→ zurück zum Hauptartikel: [[AlphaBot_SoSe26|Informatik Praktikum 2]]<br>
→ Haben Sie Fragen? [[Informatik Praktikum FAQ]]

Aktuelle Version vom 18. Juni 2026, 09:00 Uhr

Abb. 1: Geregelte Fahrt mit Linienverfolger
Abb. 2: AlphaBot Linienverfolger
Autor: Prof. Dr.-Ing. Schneider
Modul: Praxismodul II
Lektion: 9
Lehrveranstaltung: Mechatronik, Informatik Praktikum 2, 2. Semester

Inhalt

  • Inbetriebnahme des Linienverfolgungssensors
  • Kalibrierung des Linienverfolgungssensors
  • PD-Regler
  • x-y-Plot der Roboterpose

Lernziele

Nach Durchführung dieser Lektion können Sie

  • geregelt einer Linie folgen.
  • den Kurswinkel aus differenzieller Odometrie bestimmen und darstellen.
  • die Funktion eines PID-Reglers erläutern.
  • einen PD-Regler systematisch auslegen.
  • die Auslegung systematisch dokumentieren

Vorbereitung

Bereiten Sie diese Aufgabe für den Praktikumstermin vor.

  • Planen Sie jede Aufgabe als PAP.
  • Nehmen Sie den Linienverfolger anhand der Beispiel E28_IR_Line_Tracking_Sensor_Messung und E28b_IR_Line_Tracking_Sensor in Betrieb.
  • Nutzen Sie das Tutorial AlphaBot_Linienverfolgungsssensor zur Einarbeitung.
  • Kalibrieren Sie den Sensor.
  • Zeigen Sie die Messwerte im seriellen Monitor an.
  • Kapseln Sie die Kalibrierung in der Funktion void KalibriereLinienVerfolger().
  • Beantworten Sie die Lernzielkontrollfragen.
  • Ohne umfangreiche Vorbereitung werden Sie nicht zum Praktikum zugelassen.

Arbeitsergebnis: void KalibriereLinienVerfolger()

Lernzielkontrollfragen

  • Wie funktioniert der Linienverfolgungssensors technisch?
  • Arbeitet der Sensor passiv?
  • Welche Bauteile kommen in Sender und Empfänger zum Einsatz?
  • Welche Wellenlänge hat das ausgesendete Licht? Ist dieses sichtbar?
  • Wieso und wie wird der Sensor kalibriert?
  • Erläutern Sie wie und wieso ein gewichteter Mittelwert gebildet wird.
  • Welchen Messbereich hat das Sensorsystem?
  • Welcher Wert dient als Sollwert?

Tutorials

Demos

  • E28_IR_Line_Tracking_Sensor_Messung
  • E28b_IR_Line_Tracking_Sensor
  • E08_Infrared_Line_Tracking
  • E08b_Infrared_Line_Tracking_PD

Versuchsdurchführung

Aufgabe 9.1: PD-Regler

Abb. 3: Regelkreis für den Linienverfolgungs-Algorithmus
  1. Programmieren Sie einen PD-Regler gemäß Abb. 3, damit der AlphaBot der schwarzen Linien folgt.
    u(t)=KPe(t)+KDddte(t)
  2. Wählen Sie den Sollwert als Konstante.
  3. In welchem Bereich bewegt sich der Istwert?
  4. Setzen Sie die Motorsteuerung mit dem Befehl MotorRun(L,R) um, wobei gilt L,R[250;250].

Arbeitsergebnisse: PDRegler.ino

Aufgabe 9.2: Geradeausfahrt mit Linienverfolger

Nun wollen wir gleichzeitig den Ultraschall und Linienverfolger nutzen.

  1. Nutzen Sie schwarzes Klebeband auf einem hellen Untergrund (z. B. weißes Blatt Papier), um eine gerade Fahrstrecke von 2 m zu markieren.
  2. Drehen Sie den Ultraschall-Sensor auf 180° (Blick auf die Wand).
  3. Messen Sie während der Fahrt die Radumdrehungen des linken und rechten Rades (uL, uR).
  4. Messen Sie während der Fahrt den Abstand zur Wand (a) mit dem Ultraschall Sensor.
  5. Folgen Sie der schwarzen Linie möglichst geradlinig.
  6. Experimentieren Sie, welche Parameter Kp, Kd die besten Ergebnisse liefern.
  7. Dokumentieren Sie Ihre Ergebnisse systematisch tabellarisch.

Arbeitsergebnisse: PDReglerUltraschall.ino, PD_Parametervariation.xslx


Aufgabe 9.3: Umgebung als x-y-Plot

  1. Senden Sie die Messdaten (uL, uR, a) via Bluetooth an MATLAB®.
  2. Berechnen Sie die Roboterposition (x, y).
  3. Berechnen Sie den Kurswinkel ψ=ΔxΔy.
  4. Zeichnen Sie die Roboterpose (x, y, ψ) und den Abstand zur Wand (a) während der Fahrt in MATLAB®.

Arbeitsergebnisse: zeigeTrajektorie.m

Aufgabe 9.4: Nachhaltige Doku

Sichern Sie alle Ergebnisse mit beschreibendem Text (message) in SVN.

Arbeitsergebnis in SVN: SVN Log

Ausblick zur nächsten Lektion

In der nächsten Lektion sucht der AlphaBot, während er geregelt einer schwarzen Linie folgt, mit dem Ultraschallsensor eine freie Parklücke.



→ 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