AlphaBot Linienverfolgungsssensor: Unterschied zwischen den Versionen
Zeile 54: | Zeile 54: | ||
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.<br> | 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.<br> | ||
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.<br> | |||
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 | 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.<br> | ||
===AlphaBot Tracker Beispiel=== | ===AlphaBot Tracker Beispiel=== |
Version vom 18. Mai 2021, 16:23 Uhr
Autoren: Prof. Dr.-Ing. Schneider
Einleitung
Infrarot Linienverfolgungssensor für den AlphaBot
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. Wid 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 um die verschiedenen Sensor- und Umweldfaktoren 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.
y = (x - Min) * 1000 / (Max - Min)
Nach der Umwandlung liegt der Ausgangswert im Bereich von 0~1000, wobei 1000 bedeutet, dass der Sensor weit von der schwarzen Linie entfernt ist, und 0 bedeutet, dass der Sensor über der schwarzen Linie liegt.
Das Programm tastet die Werte der Sensoren viele Male 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:
y = (0 * value0 + 1000 * value1 + 2000 * value2 + 3000 * value3 +4000 * value4) / (value0 + value1 + value2 + value3 + value4)
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()
proportional = position - 2000; derivative = proportional - last_proportional; integral += proportional; last_proportional = proportional; power_error = proportional * Kp + integral * Ki + derivative * Kd;
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.
AlphaBot Tracker Beispiel
In this section, we will present the Tracker Sensor program of the AlphaBot smart car. Here, we will take the Arduino program as example. There are two main files in the Tracker Sensor library, TRSensors.cpp and TRSensors.h.
TRSensors.cpp contains the following functions:
- 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);
in which, TRSensors() is the initial function for pins initialization. And it has been applied for the memory space to store the Max and Min values of the sensors.
AnalogRead() function can read the analog value from 5 channel of sensors. And AlphaBot performs AD conversation via the AD chip of TLC1543, but not the AD pins on the Arduino chip. When you connect the Trackr Sensor to the Pins A0 ~A4 of the Arduino chip, you should modify this function.
calibrate() function is used for calibration, determining the values of Max and Min by sampling the data for many times. In calibration, the car should run along the black line and swing from side to side, to get the precise value of Max and Min
readCalibrated() is for normalization process. From Part 1, we can know that it can transform the output data to the range of 0~1000 by linear transformation, in which 1000 means the sensor is far away from the black line, and 0 means the sensor is above the black line.
readLine() can read the position of the black line. For more detailed information, please refer to Part 2. This function applies weight average to calculate the position of the black line. Then you can get the data in the range of 0~4000, in which 0 means the black line is on the leftmost side of the module, and 4000 means the black line is on the rightmost side of the module.
PID control is implemented in the main function Infrared_Line_Tracking.ino. The following is the relative Demo code.
In this Demo code, we use the function readline() to read the position of the black line, and calculate the proportional and the derivative. Here is PD algorithm not PID algorithm, so there is no integral. If you want a better performance, you can modify the parameters in the PD algorithm.
At last, we use PID algorithm to calculate the iterm power_error, so as to adjust the PWM of the right and the left wheels to make the car run along the black line. Operation and phenomena
In this section, we only introduce the simple test program of the module. For more information about how to apply AlphaBot to use Tracker Sensor to implement tracking operation and relative Demo, please refer to the corresponding documents of AlphaBot.
Here we will illustrate how to use the peripherals with the development board XNUCLEO-F103RB (STM32F103RB) and UNO PLUS.
① Download the corresponding program into the development board.
② Connect the module to the development board, and connect your PC to the board via a serial cable. Then, start the serial debugging software.
Table 1 and Table 2 show the connection between the module and the development boards. Port Pins of XNUCLEO-F103RB IR1~IR5 A0~A4 GND GND VCC 3.3V
Table 1 Connection between the module and STM32 Port Pins of Arduino IIR1~IR5 A0~A4 IGND GND IVCC 5V
Table 2 Connection between the module and Arduino
Table 3 shows the serial port configuration. Baud rate 9600 Data bits 8 Stop bit 1 Parity bit None
Table 3 Serial port configuration
③ The screen will display 5 serial of data for IR1 to IR 5 sensors. All this data will change with the reflective distance. When there is no obstacle in front of the module, the output is probably a few dozen, but when the module is close to the table, its output will go up to about 800~900. Resources
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
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.
Weiterführende Links
→ zurück zum Hauptartikel: AlphaBot Bauanleitung