AlphaBot Linienverfolgungsssensor: Unterschied zwischen den Versionen
Zeile 147: | Zeile 147: | ||
Dabei ergibt sich für die Pins des Ultraschallsensors folgende Belegung: | Dabei ergibt sich für die Pins des Ultraschallsensors folgende Belegung: | ||
<div style="width:950px; height: | <div style="width:950px; height:80px; overflow:auto; border: 1px solid #000"> | ||
<pre> | <pre> | ||
#define TRIG_PIN A5 | #define TRIG_PIN A5 |
Version vom 18. Mai 2021, 16:48 Uhr
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. 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 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.
Port | Pin Arduino |
---|---|
IIR1~IR5 | A0~A4 |
IGND | GND |
IVCC | max. 0.5 mA |
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.
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