AlphaBot: Geregelte Fahrt mit Linienverfolger: Unterschied zwischen den Versionen
(27 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 29: | Zeile 29: | ||
* 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. | |||
* Kapseln Sie die Kalibrierung in der Funktion <code>void KalibriereLinienVerfolger()</code>. | |||
* Beantworten Sie die Lernzielkontrollfragen. | * Beantworten Sie die Lernzielkontrollfragen. | ||
* Ohne umfangreiche Vorbereitung werden Sie nicht zum Praktikum zugelassen. | * Ohne umfangreiche Vorbereitung werden Sie nicht zum Praktikum zugelassen. | ||
'''Arbeitsergebnis:''' <code>void KalibriereLinienVerfolger()</code> | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 1 </strong> | |||
|- | |||
| | |||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | |||
void KalibriereLinienVerfolger() { | |||
Serial.println("Kalibrierung startet für 10s..."); | |||
for (int i = 0; i < 400; i++) // Die Kalibrierung kann 10s dauern. | |||
{ | |||
trs.calibrate(); // Die Sensoren werden 10x gelesen | |||
} | |||
Serial.println("Kalibrierung beendet"); | |||
/* Ausgabe der Minimalwerte während der Kalibrierung */ | |||
for (int i = 0; i < NUM_SENSORS; i++) | |||
{ | |||
Serial.print(trs.calibratedMin[i]); | |||
Serial.print(' '); | |||
} | |||
Serial.println(); | |||
/* Ausgabe der Maximalwerte während der Kalibrierung */ | |||
for (int i = 0; i < NUM_SENSORS; i++) | |||
{ | |||
Serial.print(trs.calibratedMax[i]); | |||
Serial.print(' '); | |||
} | |||
Serial.println(); | |||
delay(1000); // 1 Sekunde Pause | |||
} | |||
</syntaxhighlight> | |||
|- | |||
|} | |||
== Lernzielkontrollfragen == | == Lernzielkontrollfragen == | ||
Zeile 48: | Zeile 86: | ||
'''Arbeitsergebnissse:''' <code> ZweiPunktRegler.pap, ZweiPunktRegler.ino </code> | '''Arbeitsergebnissse:''' <code> ZweiPunktRegler.pap, ZweiPunktRegler.ino </code> | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 1 </strong> | |||
|- | |||
| [[Datei:Loop 2PunktRegler.png|left|450px|Abb. 3: Ablaufplan im Loop]]<br> Abb. 3: PAP des 2-Punkt-Reglers im void loop() | |||
|- | |||
|} | |||
=== Aufgabe 8.2: PD-Regler === | === Aufgabe 8.2: PD-Regler === | ||
[[Datei:Regelkreis PD.png|thumb|rigth|550px|Abb. | [[Datei:Regelkreis PD.png|thumb|rigth|550px|Abb. 4: Regelkreis für den Linienverfolgungs-Algorithmus]] | ||
Programmieren Sie einen PD-Regler gemäß Abb. | 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> | <math> u(t) = K_P \cdot e(t) + K_D \cdot \frac{d}{dt}e(t) </math> | ||
Zeile 59: | Zeile 105: | ||
# 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 | # Experimentieren Sie, welche Parameter <code>Kp, Kd</code> die besten Ergebnisse liefern. | ||
# Dokumentieren Sie Ihre Ergebnisse systematisch tabellarisch. | # Dokumentieren Sie Ihre Ergebnisse systematisch tabellarisch. | ||
'''Arbeitsergebnisse:''' <code> | '''Arbeitsergebnisse:''' <code>PDRegler.pap, PDRegler.ino, PD_Parametervariation.xslx</code> | ||
Nützliche Links: | {| role="presentation" class="wikitable mw-collapsible mw-collapsed" | ||
| <strong>Tipp 1 </strong> | |||
|- | |||
| Nützliche Links: | |||
* [https://www.youtube.com/watch?v=MSoLigzhbeM info8uniwue: Einführung PID Regler] | * [https://www.youtube.com/watch?v=MSoLigzhbeM info8uniwue: Einführung PID Regler] | ||
* [https://www.youtube.com/watch?v= | * [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://www.youtube.com/watch?v=l26IGS2RlM0 Studyfix: Regelkreis] | ||
* [[AlphaBot_Linienverfolgungsssensor |AlphaBot - Linienverfolgungssensor]] | * [[AlphaBot_Linienverfolgungsssensor |AlphaBot - Linienverfolgungssensor]] | ||
|- | |||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 2 </strong> | |||
|- | |||
| [[Datei:Loop PD Regler.png|left|450px|Abb. 6: Ablaufplan im Loop]]<br> Abb. 6: PAP des PID-Reglers im void loop() | |||
|- | |||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Tipp 3 </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]]. | |||
|- | |||
| 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. | |||
|- | |||
| Lassen Sie einen Motor (R) mit konstanter Leistung (z. B. 80) fahren und verändern sie relativ dazu den anderen Motor (z. B. <math>L= 80 \pm 20</math>). | |||
|- | |||
| Legen Sie den Regler für eine sanfte Geradenfahrt aus.<br> | |||
# Legen Sie mit <code>Kd = 0</code> zuerst <code>Kp</code> aus. | |||
# Gehen Sie wissenschaftlich vor. Schreiben Sie alle Beobachtungen in eine Tabelle. Sind Sie zufrieden, ändern Sie den <code>Kp</code>-Wert nicht mehr (z. B. <code>Kp = -0.01</code>). | |||
# Variieren Sie nun <code>Kd</code>, um die Schwingung des P-Reglers zu dämpfen. Bei mir ist <code>Kd = 0.5* Kp</code>. | |||
# Manche Gruppen haben mit einem reinen P-Regler bereits zufriedenstellende Ergebnisse erziehlt. | |||
|- | |||
|} | |||
=== Aufgabe 8.3: Geradeausfahrt mit Linienverfolger === | === Aufgabe 8.3: Geradeausfahrt mit Linienverfolger === | ||
Nun wollen wir gleichzeitig den Ultraschall und Linienverfolger nutzen. | Nun wollen wir gleichzeitig den Ultraschall und Linienverfolger nutzen. | ||
# Bereiten Sie sich vor, indem Sie die Funktion des Linienverfolgungssensors in der gängigen Fachliteratur (z.B. [ | # Bereiten Sie sich vor, indem Sie die Funktion des Linienverfolgungssensors in der gängigen Fachliteratur (z. B. [[AlphaBot_Linienverfolgungsssensor |AlphaBot - Linienverfolgungssensor]]) recherchieren und erläutern können. | ||
# Nutzen Sie schwarzes Klebeband auf einem hellen Untergrund (z. B. weißes Blatt Papier), um eine gerade Fahrstrecke von 2 m zu markieren. | # Nutzen Sie schwarzes Klebeband auf einem hellen Untergrund (z. B. weißes Blatt Papier), um eine gerade Fahrstrecke von 2 m zu markieren. | ||
# Drehen Sie den Ultraschall-Sensor auf 180° (Blick auf die Wand). | # Drehen Sie den Ultraschall-Sensor auf 180° (Blick auf die Wand). | ||
Zeile 78: | Zeile 153: | ||
# Messen Sie während der Fahrt den Abstand zur Wand (y) mit dem Ultraschall Sensor. | # Messen Sie während der Fahrt den Abstand zur Wand (y) mit dem Ultraschall Sensor. | ||
# Folgen Sie der schwarzen Linie möglichst geradlinig. | # Folgen Sie der schwarzen Linie möglichst geradlinig. | ||
# Experimentieren Sie, welche Parameter | # Experimentieren Sie, welche Parameter <code>Kp, Kd</code> die besten Ergebnisse liefern. | ||
# Dokumentieren Sie Ihre Ergebnisse systematisch tabellarisch. | # Dokumentieren Sie Ihre Ergebnisse systematisch tabellarisch. | ||
# Zeichnen Sie die Roboterpose (x,y,ψ) in MATLAB<sup>®</sup>. | # Zeichnen Sie die Roboterpose (x,y,ψ) in MATLAB<sup>®</sup>. | ||
Zeile 95: | Zeile 170: | ||
== Tutorials == | == Tutorials == | ||
*[[AlphaBot_Linienverfolgungsssensor]] | *[[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] | |||
== Demos == | == Demos == | ||
*<code>E28_IR_Line_Tracking_Sensor_Messung</code> | *<code>E28_IR_Line_Tracking_Sensor_Messung</code> | ||
*<code>E28b_IR_Line_Tracking_Sensor</code> | *<code>E28b_IR_Line_Tracking_Sensor</code> | ||
*<code>E08_Infrared_Line_Tracking</code> | |||
*<code>E08b_Infrared_Line_Tracking_PD</code> | |||
== Literatur == | == 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]] | → 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> | ||
→ zurück zum Hauptartikel: [[ | → zurück zum Hauptartikel: [[AlphaBot_SoSe24|Informatik Praktikum 2]] |
Aktuelle Version vom 17. Juni 2024, 15:02 Uhr
Autor: Prof. Dr.-Ing. Schneider
Modul: Praxismodul I
Lehrveranstaltung: Mechatronik, Informatik Praktikum 2, 2. Semester
Inhalt
- Inbetriebnahme des Linienverfolgungssensors
- Kalibrierung des Linienverfolgungssensors
- 2-Punkt-Regler
- 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/Hausaufgabe
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
undE28b_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()
Tipp 1 |
void KalibriereLinienVerfolger() {
Serial.println("Kalibrierung startet für 10s...");
for (int i = 0; i < 400; i++) // Die Kalibrierung kann 10s dauern.
{
trs.calibrate(); // Die Sensoren werden 10x gelesen
}
Serial.println("Kalibrierung beendet");
/* Ausgabe der Minimalwerte während der Kalibrierung */
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(trs.calibratedMin[i]);
Serial.print(' ');
}
Serial.println();
/* Ausgabe der Maximalwerte während der Kalibrierung */
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(trs.calibratedMax[i]);
Serial.print(' ');
}
Serial.println();
delay(1000); // 1 Sekunde Pause
}
|
Lernzielkontrollfragen
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?
Versuchsdurchführung
Aufgabe 8.1: 2-Punkt-Regler
Programmieren Sie einen 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.
Arbeitsergebnissse: ZweiPunktRegler.pap, ZweiPunktRegler.ino
Tipp 1 |
Abb. 3: PAP des 2-Punkt-Reglers im void loop() |
Aufgabe 8.2: PD-Regler
Programmieren Sie einen PD-Regler gemäß Abb. 4, damit der AlphaBot der schwarzen Linien folgt. Planen Sie zuvor das Programm als PAP.
- Wählen Sie den Sollwert als Konstante.
- In welchem Bereich bewegt sich der Istwert?
- Setzen Sie die Motorsteuerung mit dem Befehl
MotorRun(L,R)
um, wobei gilt . - Experimentieren Sie, welche Parameter
Kp, Kd
die besten Ergebnisse liefern. - Dokumentieren Sie Ihre Ergebnisse systematisch tabellarisch.
Arbeitsergebnisse: PDRegler.pap, PDRegler.ino, PD_Parametervariation.xslx
Tipp 1 |
Nützliche Links: |
Tipp 2 |
Abb. 6: PAP des PID-Reglers im void loop() |
Tipp 3 |
Studieren Sie das Beispiel [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 float() umwandeln.
|
Lassen Sie einen Motor (R) mit konstanter Leistung (z. B. 80) fahren und verändern sie relativ dazu den anderen Motor (z. B. ). |
Legen Sie den Regler für eine sanfte Geradenfahrt aus.
|
Aufgabe 8.3: Geradeausfahrt mit Linienverfolger
Nun wollen wir gleichzeitig den Ultraschall und Linienverfolger nutzen.
- Bereiten Sie sich vor, indem Sie die Funktion des Linienverfolgungssensors in der gängigen Fachliteratur (z. B. AlphaBot - Linienverfolgungssensor) recherchieren und erläutern können.
- Nutzen Sie schwarzes Klebeband auf einem hellen Untergrund (z. B. weißes Blatt Papier), um eine gerade Fahrstrecke von 2 m zu markieren.
- Drehen Sie den Ultraschall-Sensor auf 180° (Blick auf die Wand).
- 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
Kp, Kd
die besten Ergebnisse liefern. - Dokumentieren Sie Ihre Ergebnisse systematisch tabellarisch.
- Zeichnen Sie die Roboterpose (x,y,ψ) in MATLAB®.
Arbeitsergebnisse: PDReglerUltraschall.pap, PDReglerUltraschall.ino, zeigeRoboterpose.m
Aufgabe 8.4: Nachhaltige Doku
Sichern Sie alle Ergebnisse mit beschreibendem Text (message
) in SVN.
- Halten Sie die Regeln für den Umgang mit SVN ein.
- Halten Sie die Programmierrichtlinie für C und die Programmierrichtlinien für MATLAB® ein.
- Versehen Sie jedes Programm mit einem Header (Header Beispiel für MATLAB, Header Beispiel für C).
- Kommentiere Sie den Quelltext umfangreich.
Arbeitsergebnis in SVN: SVN Log
Tutorials
- AlphaBot_Linienverfolgungsssensor
- info8uniwue: Einführung PID Regler
- Loviscach, J.: P- und PI-Regler; Einstellung nach Ziegler-Nichols
- Studyfix: Regelkreis
Demos
E28_IR_Line_Tracking_Sensor_Messung
E28b_IR_Line_Tracking_Sensor
E08_Infrared_Line_Tracking
E08b_Infrared_Line_Tracking_PD
Literatur
→ Termine 1 2 3 4 5 6 7 8 9
→ zurück zum Hauptartikel: Informatik Praktikum 2