AlphaBot: Geregelte Fahrt mit Linienverfolger: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(15 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 30: Zeile 30:
* 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>.
* 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>kalibriereLinienverfolger.ino</code>
'''Arbeitsergebnis:''' <code>void KalibriereLinienVerfolger()</code>
 
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 1&thinsp;</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 70: 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 PID die besten Ergebnisse liefern.
# 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 87: Zeile 122:


{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Tipp 1&thinsp;</strong>
| <strong>Tipp 2&thinsp;</strong>
|-
|-
| [[Datei:Loop PD Regler.png|left|450px|Abb. 6: Ablaufplan im Loop]]<br> Abb. 6: PAP des PID-Reglers im void loop()
| [[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&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]].
|-
| 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.&thinsp;B. 80) fahren und verändern sie relativ dazu den anderen Motor (z.&thinsp;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.&thinsp;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.
|-
|-
|}
|}
Zeile 101: 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 PID die besten Ergebnisse liefern.
# 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 119: Zeile 171:
*[[AlphaBot_Linienverfolgungsssensor]]
*[[AlphaBot_Linienverfolgungsssensor]]
* [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=MSoLigzhbeM Loviscach, J.: P- und PI-Regler; Einstellung nach Ziegler-Nichols]
* [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]


Zeile 125: Zeile 177:
*<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 ==

Aktuelle Version vom 25. Mai 2023, 12:11 Uhr

Abb. 1: Geregelte Fahrt mit Linienverfolger
Abb. 2: AlphaBot Linienverfolger

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 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

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


Aufgabe 8.2: PD-Regler

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.

  1. Wählen Sie den Sollwert als Konstante.
  2. In welchem Bereich bewegt sich der Istwert?
  3. Setzen Sie die Motorsteuerung mit dem Befehl MotorRun(L,R) um, wobei gilt .
  4. Experimentieren Sie, welche Parameter Kp, Kd die besten Ergebnisse liefern.
  5. Dokumentieren Sie Ihre Ergebnisse systematisch tabellarisch.

Arbeitsergebnisse: PDRegler.pap, PDRegler.ino, PD_Parametervariation.xslx

Aufgabe 8.3: Geradeausfahrt mit Linienverfolger

Nun wollen wir gleichzeitig den Ultraschall und Linienverfolger nutzen.

  1. 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.
  2. Nutzen Sie schwarzes Klebeband auf einem hellen Untergrund (z. B. weißes Blatt Papier), um eine gerade Fahrstrecke von 2 m zu markieren.
  3. Drehen Sie den Ultraschall-Sensor auf 180° (Blick auf die Wand).
  4. Messen Sie während der Fahrt die gefahrene Strecke (x) mit der Odometrie.
  5. Messen Sie während der Fahrt den Abstand zur Wand (y) mit dem Ultraschall Sensor.
  6. Folgen Sie der schwarzen Linie möglichst geradlinig.
  7. Experimentieren Sie, welche Parameter Kp, Kd die besten Ergebnisse liefern.
  8. Dokumentieren Sie Ihre Ergebnisse systematisch tabellarisch.
  9. 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.

Arbeitsergebnis in SVN: SVN Log

Tutorials

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 10 11
→ zurück zum Hauptartikel: Informatik Praktikum 2