AlphaBot Linienverfolgungsssensor: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 44: Zeile 44:
'''In diesem Beispiel ist ein Teil des Codes für den PID Regler dargestellt. Es fehlt die zeitliche Komponente der Regelung. Diese muss bei dem I und dem D Anteil hinzugefügt werden. <br>'''
'''In diesem Beispiel ist ein Teil des Codes für den PID Regler dargestellt. Es fehlt die zeitliche Komponente der Regelung. Diese muss bei dem I und dem D Anteil hinzugefügt werden. <br>'''
'''Tipp: millis()'''<br>
'''Tipp: millis()'''<br>
 
<div style="width:1200px; height:300px; overflow:auto; border: 2px solid #088">
<pre>
   SOLL_WERT = 2000;
   SOLL_WERT = 2000;
   e = SOLL_WERT - IstWert;              % Regelabweichung e
   e = SOLL_WERT - IstWert;              % Regelabweichung e
Zeile 54: Zeile 55:
   last_t = t;
   last_t = t;
   Stellgroesse = Kp* proportional + Ki* integral + Kd * derivative; % Ergebnis des Reglers
   Stellgroesse = Kp* proportional + Ki* integral + Kd * derivative; % Ergebnis des Reglers
 
</pre>
</div>


Im Idealfall ist der gewichtete Mittelwert 2000, d. h. die schwarze Linie wird in der Mitte gehalten. Der Proportionalwert ist das Ergebnis aus aktueller Position (Position) minus Zielposition (2000). Es ist der Positionsfehler, wobei eine positive Zahl bedeutet, dass sich der Fahrkorb rechts von der schwarzen Linie befindet, und eine negative Zahl bedeutet, dass sich der Fahrkorb links von der schwarzen Linie befindet.<br>
Im Idealfall ist der gewichtete Mittelwert 2000, d. h. die schwarze Linie wird in der Mitte gehalten. Der Proportionalwert ist das Ergebnis aus aktueller Position (Position) minus Zielposition (2000). Es ist der Positionsfehler, wobei eine positive Zahl bedeutet, dass sich der Fahrkorb rechts von der schwarzen Linie befindet, und eine negative Zahl bedeutet, dass sich der Fahrkorb links von der schwarzen Linie befindet.<br>

Version vom 1. Mai 2023, 17:41 Uhr

Abb. 1: Infrarot Linienverfolgungsssensor

Autoren: Prof. Dr.-Ing. Schneider, Hendrik Steffen, Sven Posner

Einleitung

Infrarot Linienverfolgungssensor für den AlphaBot
Dieser Artikel ist eine Übersetzung aus dem Originalartikel https://www.waveshare.com/wiki/Tracker_Sensor

Getting Started

Prinzip des Linienverfolgers

Der Linienverfolgungssensor besteht aus 5 Analogsensoren. Die Messdaten hängen von der Distanz und der Farbe des detektierten Objektes ab. Ein Objekt mit höherer Infrarotreflektanz (z. B. Weiß) wird einen höheren Ausgangswert liefern. Ein Objekt mit geringer IR.reflektanz (z. B. Schwarz) wird eine geringe Analogausgabe liefern. Nähert sich ein Sensor der Farbe Schwarz, wird der Messwert kleiner und kleiner. Aus diesem Verhalten lässt sich auf die Distanz zur schwarzen Linie schließen. Je näher der Sensor der schwarzen Linie ist, desto kleiner ist der Ausgabewert. Im Vergleich zu anderen Modulen, die nur logische Signale (HIGH/LOW) ausgeben, ist so eine präzisere Regelung möglich. nachfolgend wird der Algorithmus in 3 Teilen präsentiert.

Teil 1: Kalibrierung

Verschiedene Sensoren können verschiedene Werte für dieselbe Farbe und Distanz ausgeben. Zusätzlich kann das Umgebunggslicht den Analogwert beeinflussen. Wird ein Analogwert mit 10 Bit A/D gewandelt, ist ein theoretischer Wertebereich von 0 bis 1023 möglich. In Realität wird der minimal messbare Wert über Null und der maximal messbare Wert unter 1023 liegen. Eine Kalibrierung bzw. Normalisierung wird durchgefüht, um die verschiedenen Sensor- und Umweltfaktoren zu reduzieren. Beim Normalisierungsprozess handelt es sich um eine lineare Transformation indem der Messbereich Min-Max mit der nachfolgenden Formel auf 0-1 transformiert wird.

Dabei ist x der ursprüngliche Ausgangswert vom Sensor, y ist der transformierte Wert und Max und Min sind der maximale bzw. der minimale Ausgangswert.

Nach der Umwandlung liegt der Ausgangswert im Bereich von 0-1000, wobei 0 bedeutet, dass der Sensor weit von der schwarzen Linie entfernt ist und weiß misst und 1000 bedeutet, dass der Sensor über der schwarzen Linie liegt.

Das Programm tastet die Werte der Sensoren 10x ab, um den richtigen Wert von Min und Max zu erhalten. Um die genauen Min- und Max-Werte zu erhalten, sollte das Fahrzeug während der Abtastung immer fahren.

Teil 2: Gewichteter Mittelwert

Durch die Verwendung des Normalisierungsprozesses, um mit fünf Sätzen von Ausgabedaten umzugehen, erhalten wir fünf Sätze von Daten über die Abstände zwischen den Sensoren und der schwarzen Linie. Dann sollten wir den gewichteten Durchschnitt verwenden, um diese Daten in einen Wert umzuwandeln, um die Mittellinie der Route mit der folgenden Formel zu bestimmen:

Dabei sind 0, 1000, 2000, 3000, 4000 die Gewichte für die fünf Detektoren, jeweils von links nach rechts. Und Wert0-Wert4 sind die Daten mit Normalisierungsprozess.

Jetzt können wir die Daten im Bereich von 0-4000 erhalten, die Ihnen die Position der schwarzen Linie angeben können. Zum Beispiel bedeutet 2000, dass sich die schwarze Linie in der Mitte des Moduls befindet, 0 bedeutet, dass sich die schwarze Linie auf der linken Seite des Moduls befindet, und 4000 bedeutet, dass sich die schwarze Linie auf der rechten Seite des Moduls befindet.

Für eine genauere Erkennung haben wir einige Anforderungen an die Höhe des Moduls und die Breite der schwarzen Linie. Die Breite der schwarzen Linie sollte gleich oder kleiner sein als der Abstand zweier Sensoren (16 mm). Die richtige Höhe des Moduls ist so, dass, wenn sich die schwarze Linie in der Mitte von zwei Sensoren befindet, beide Sensoren die schwarze Linie erkennen können.

Teil 3: PID Regelung

Aus Teil 2 können wir die Position der schwarzen Linie ablesen. Sie sollten sicherstellen, dass sich die schwarze Linie immer unter dem Auto befindet, so dass das Auto entlang der schwarzen Linie fahren kann. Der Ausgangswert nach dem Gewichtsmittelungsprozess sollte also bei 2000 gehalten werden. Hier setzen wir die PID-Regelung ein, damit der Fahrkorb gleichmäßig fährt. Über den PID-Algorithmus können Sie im Internet leicht eine Menge Informationen erhalten. Hier haben wir nur eine kurze Beschreibung dazu.

Die PID-Regelung kann den Fehler mit drei Faktoren rückkoppeln und regeln: Proportional (P), Integral (I), Differenzial (D). Im Folgenden wird der PID-Algorithmus beschrieben.

In diesem Beispiel ist ein Teil des Codes für den PID Regler dargestellt. Es fehlt die zeitliche Komponente der Regelung. Diese muss bei dem I und dem D Anteil hinzugefügt werden.
Tipp: millis()

  SOLL_WERT = 2000;
  e = SOLL_WERT - IstWert;              % Regelabweichung e
  dt=(t-last_t);                        % Zykluszeit
  proportional = e;                     % Proportionalanteil
  derivative = (e - last_e)/dt;         % Ableitung
  integral += e * dt;                   % Integration
  last_e = e;
  last_t = t;
  Stellgroesse = Kp* proportional + Ki* integral + Kd * derivative; % Ergebnis des Reglers

Im Idealfall ist der gewichtete Mittelwert 2000, d. h. die schwarze Linie wird in der Mitte gehalten. Der Proportionalwert ist das Ergebnis aus aktueller Position (Position) minus Zielposition (2000). Es ist der Positionsfehler, wobei eine positive Zahl bedeutet, dass sich der Fahrkorb rechts von der schwarzen Linie befindet, und eine negative Zahl bedeutet, dass sich der Fahrkorb links von der schwarzen Linie befindet.

Das Integral ist die Summe aller Fehler. Wenn der Absolutwert groß ist, ist auch die Fehlerakkumulation groß, was bedeutet, dass sich das Fahrzeug weit von der Route entfernt.

Das Differenzial ist die Differenz zwischen dem aktuellen Proportionalwert und dem letzten Proportionalwert und spiegelt die Reaktionsgeschwindigkeit des Roboters wider. Ein großer Wert der Ableitung bedeutet eine schnelle Reaktionsgeschwindigkeit.

Sie können die Parameter Kp, Ki und Kd einstellen, um eine bessere Leistung zu erzielen. Zuerst stellen wir Kp ein; setzen Sie Ki und Kd auf 0, und stellen Sie den Wert von Kp so ein, dass der Roboter entlang der schwarzen Linie fährt. Dann passen Sie Ki und Kd an; setzen Sie die Parameter auf einen kleinen Wert oder 0.


Einfache Erklärung des PID Reglers

AlphaBot Tracker Beispiel

In diesem Abschnitt stellen wir das Tracker-Sensor-Programm des AlphaBot vor. Hier nehmen wir das Arduino-Programm als Beispiel. Es gibt zwei Hauptdateien in der Tracker-Sensor-Bibliothek, TRSensors.cpp und TRSensors.h.
TRSensors.cpp enthält die folgenden Funktionen:

  • TRSensors();
  • void AnalogRead(unsigned int *sensor_values);
  • void calibrate();
  • void readCalibrated(unsigned int *sensor_values);
  • int readLine(unsigned int *sensor_values, unsigned char white_line = 0);

wobei TRSensors() die Anfangsfunktion für die Initialisierung der Stifte ist. Und es wurde für den Speicherplatz angewendet, um die Max- und Min-Werte der Sensoren zu speichern.

Die Funktion AnalogRead() kann den Analogwert von 5 Kanälen der Sensoren lesen. Und AlphaBot führt die AD-Konversation über den AD-Chip des TLC1543 durch, aber nicht über die AD-Pins auf dem Arduino-Chip. Wenn Sie den Trackr-Sensor an die Pins A0 ~A4 des Arduino-Chips anschließen, sollten Sie diese Funktion modifizieren.

Die Funktion calibrate() wird für die Kalibrierung verwendet, wobei die Werte von Max und Min durch mehrmaliges Abtasten der Daten bestimmt werden. Bei der Kalibrierung sollte das Auto entlang der schwarzen Linie fahren und von Seite zu Seite schwingen, um den genauen Wert von Max und Min zu erhalten

readCalibrated() ist für den Normalisierungsprozess. Aus Teil 1 wissen wir, dass sie die Ausgabedaten durch lineare Transformation in den Bereich von 0~1000 transformieren kann, wobei 1000 bedeutet, dass der Sensor weit von der schwarzen Linie entfernt ist, und 0 bedeutet, dass der Sensor über der schwarzen Linie liegt.

readLine() kann die Position der schwarzen Linie auslesen. Nähere Informationen finden Sie in Teil 2. Diese Funktion wendet den Gewichtsmittelwert an, um die Position der schwarzen Linie zu berechnen. Dann können Sie die Daten im Bereich von 0~4000 erhalten, wobei 0 bedeutet, dass sich die schwarze Linie auf der linken Seite des Moduls befindet, und 4000 bedeutet, dass sich die schwarze Linie auf der rechten Seite des Moduls befindet.

Die PID-Regelung ist in der Hauptfunktion Infrared_Line_Tracking.ino implementiert. Im Folgenden wird der entsprechende Demo-Code gezeigt.

In diesem Demo-Code verwenden wir die Funktion readline(), um die Position der schwarzen Linie zu lesen und die Proportionalität und die Ableitung zu berechnen. Hier handelt es sich um einen PD-Algorithmus und nicht um einen PID-Algorithmus, daher gibt es kein Integral. Wenn Sie eine bessere Leistung wünschen, können Sie die Parameter im PD-Algorithmus ändern.

Zuletzt verwenden wir den PID-Algorithmus, um den iterm power_error zu berechnen, um die PWM der rechten und linken Räder so anzupassen, dass das Auto entlang der schwarzen Linie fährt.

Betrieb

In diesem Abschnitt stellen wir nur das einfache Testprogramm des Moduls vor. Für weitere Informationen über die Anwendung von AlphaBot zur Verwendung des Tracker-Sensors zur Implementierung des Tracking-Betriebs und der relativen Demo, lesen Sie bitte die entsprechenden Dokumente von AlphaBot.

Hier wird gezeigt, wie man die Peripherie mit dem Entwicklungsboard XNUCLEO-F103RB (STM32F103RB) und UNO PLUS verwendet.

① Laden Sie das entsprechende Programm auf das Entwicklungsboard.

② Schließen Sie das Modul an das Entwicklungsboard an und verbinden Sie Ihren PC über ein serielles Kabel mit dem Board. Starten Sie dann die serielle Debugging-Software.

Tabelle 1 zeigt die Verbindung zwischen dem Modul und dem Arduino Uno Plus. Die Daten der 5 Sensoren werden über I²C übertragen.

Port Pin Arduino
CLK D13
ADDR D12
DOUT D11
CS D10
GND GND
VCC max. 0.5 mA


Einstellungen Serielle Schnitttstelle:

Baud Rate 9600
Data bits 8
Stop Bits 1
Parity Bits None


③ Auf dem Bildschirm werden 5 Datenreihen für die Sensoren IR1 bis IR 5 angezeigt. Alle diese Daten ändern sich mit dem Reflexionsabstand. Wenn sich kein Hindernis vor dem Modul befindet, beträgt die Ausgabe wahrscheinlich ein paar Dutzend, aber wenn sich das Modul in der Nähe des Tisches befindet, steigt die Ausgabe auf etwa 800~900.

Hinweis

Beachten Sie die Kalibrierung! Zuerst auf einen hellen und dann einem dunklen Untergrund stellen. Anschließend folgt der Roboter dem dunklen Wert.

Video der Inbetriebnahme


Robotics Alpha-Bot Course by TESR(Line Tracking)

Gleichzeitige Verwendung von Ultraschallsensor und Linetracker

Bei gleichzeitiger Verwendung des Ultraschallsensors und des Linienverfolgers wie z.B. für Aufgabe 3.4 im Praktikum müssen die Pins mit Jumper Kabeln neu verbunden werden. In der Folgenden Abbildung ist diese Verkabelung einmal abgebildet.

Jumper Kabel bei gleichzeitiger Verwendung von Ultraschallsensor und Linetracker




Dabei ergibt sich für die Pins des Ultraschallsensors folgende Belegung:

#define TRIG_PIN A5
#define ECHO_PIN 7

Weiterführende Links



→ zurück zum Hauptartikel: AlphaBot Bauanleitung