AlphaBot: Geregelte Fahrt mit Linienverfolger: Unterschied zwischen den Versionen
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 105: | 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. | ||
Zeile 135: | Zeile 135: | ||
| 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. | ||
|- | |- | ||
| Lassen Sie einen Motor mit konstanter Leistung (z. B. 80) fahren und verändern sie relativ dazu (z. B. <math> 80 \pm 20</math>). | | 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 den Regler für eine sanfte Geradenfahrt aus.<br> | ||
# Legen Sie mit <code>Kd = 0</code> zuerst <code>Kp</code> aus. | # Legen Sie mit <code>Kd = 0</code> zuerst <code>Kp</code> aus. | ||
# Gehen Sie wissenschaftlich vor. Schreiben Sie alle Beobachtungen in eine | # 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>. | # 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. | # Manche Gruppen haben mit einem reinen P-Regler bereits zufriedenstellende Ergebnisse erziehlt. | ||
Zeile 153: | 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 183: | Zeile 183: | ||
---- | ---- | ||
→ 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