AlphaBot Linienverfolgungsssensor: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(48 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:AlphaBot]]
[[Kategorie:AlphaBot]]
[[Datei:Tracker-Sensor-1.jpg|thumb|rigth|400px|Abb. 1: Infrarot Linienverfolgungsssensor]]
[[Datei:Tracker-Sensor-1.jpg|thumb|rigth|400px|Abb. 1: Infrarot Linienverfolgungsssensor]]
'''Autoren:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]]
'''Autoren:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]], [[Benutzer:Hendrik_Steffen|Hendrik Steffen]], [[Benutzer:Sven_Posner|Sven Posner]]
== Einleitung ==
== Einleitung ==
Infrarot Linienverfolgungssensor für den AlphaBot
Infrarot Linienverfolgungssensor für den AlphaBot<br>
Dieser Artikel ist eine Übersetzung aus dem Originalartikel https://www.waveshare.com/wiki/Tracker_Sensor


== Getting Started ==
== Getting Started ==
Zeile 11: Zeile 12:


=== Teil 1: Kalibrierung ===
=== 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.
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.


<math>y = \frac{(x - Min)}{(Max - Min)}</math>
<math>y = \frac{(x - Min)}{(Max - Min)}</math>
 
Dabei ist x der orginale Ausgabewert des Sensors und y der transformierte Wert. Max und Min sind die maximalen und
(In which, x is the original output value from sensor, y is the transformed value, and Max and Min are the maximum output value and the minimum output value, respectively.


  y = (x - Min) * 1000 / (Max - Min)
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 1000 bedeutet, dass der Sensor weit von der schwarzen Linie entfernt ist, und 0 bedeutet, dass der Sensor über der schwarzen Linie liegt.
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 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.
<math>  y = \frac{(x - Min) \cdot 1000}{(Max - Min)}</math>
 
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===
===Teil 2: Gewichteter Mittelwert===
Zeile 28: Zeile 28:
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:
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)
<math> y = (0 \cdot value0 + 1000 \cdot  value1 + 2000 \cdot  value2 + 3000 \cdot  value3 +4000 \cdot  value4) / (value0 + value1 + value2 + value3 + value4)</math>


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.
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.
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.
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===
===Teil 3: PD 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. <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>'''
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 PD-Regelung ein, damit der Fahrkorb gleichmäßig fährt. Über den PD-Algorithmus können Sie im Internet leicht eine Menge Informationen erhalten. Hier haben wir nur eine kurze Beschreibung dazu.
'''Tipp: millis()'''<br>


  proportional = position - 2000;
Die PID-Regelung kann den Fehler mit drei Faktoren rückkoppeln und regeln: Proportional (P), Differenzial (D). Im Folgenden wird der PD-Algorithmus beschrieben. <br>
  derivative = proportional - last_proportional;
  integral += proportional;
  last_proportional = proportional;
  power_error = proportional * Kp + integral * Ki + derivative * Kd;


Quelltext 1:  Beispiel für einen zeitdiskreten PD-Regler
<code type="C">
  SOLL_WERT = 2000;
  e = SOLL_WERT - IstWert;              % Regelabweichung e
  dt=(t-last_t);                        % Zykluszeit
  proportional = e;                    % Proportionalanteil
  derivative = (e - last_e)/dt;        % Ableitung
  last_e = e;
  last_t = t;
  Stellgroesse = Kp* proportional + Kd * derivative; % Ergebnis des Reglers
</code>


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>
Zeile 56: Zeile 58:
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>


Derivative ist die Differenz zwischen dem aktuellen Proportionalwert und dem letzten Proportionalwert und spiegelt die Reaktionsgeschwindigkeit des Fahrkorbs wider. Ein großer Wert der Ableitung bedeutet eine schnelle Reaktionsgeschwindigkeit.<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 Fahrkorb entlang der schwarzen Linie fährt. Dann passen Sie Ki und Kd an; setzen Sie die Parameter auf einen kleinen Wert oder 0.<br>
Sie können die Parameter <code>Kp</code>, <code>Ki</code> und <code>Kd</code> 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===


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.
[https://rn-wissen.de/wiki/index.php/Regelungstechnik Einfache Erklärung des PID Reglers]


TRSensors.cpp contains the following functions:
===AlphaBot Tracker Beispiel===


*TRSensors();
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, <code>TRSensors.cpp</code> und <code>TRSensors.h</code>.<br>
*void AnalogRead(unsigned int *sensor_values);
<code>TRSensors.cpp</code>  enthält die folgenden Funktionen:<br>
*void calibrate();
*<code>TRSensors();</code>
*void readCalibrated(unsigned int *sensor_values);
*<code>void AnalogRead(unsigned int *sensor_values);</code>
*int readLine(unsigned int *sensor_values, unsigned char white_line = 0);
*<code>void calibrate();</code>
*<code>void readCalibrated(unsigned int *sensor_values);</code>
*<code>int readLine(unsigned int *sensor_values, unsigned char white_line = 0);</code>


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.
wobei <code> TRSensors()</code>  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.<br>


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


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


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


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


PID control is implemented in the main function Infrared_Line_Tracking.ino. The following is the relative Demo code.
Die PID-Regelung ist in der Hauptfunktion Infrared_Line_Tracking.ino implementiert. Im Folgenden wird der entsprechende Demo-Code gezeigt.<br>


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


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.
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.<br>
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.
===Betrieb===


Here we will illustrate how to use the peripherals with the development board XNUCLEO-F103RB (STM32F103RB) and UNO PLUS.
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.<br>


① Download the corresponding program into the development board.
Hier wird gezeigt, wie man die Peripherie mit dem Entwicklungsboard XNUCLEO-F103RB (STM32F103RB) und UNO PLUS verwendet.<br>


② Connect the module to the development board, and connect your PC to the board via a serial cable. Then, start the serial debugging software.
① Laden Sie das entsprechende Programm auf das Entwicklungsboard.<br>


Table 1 and Table 2 show the connection between the module and the development boards.
② 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.<br>
Port Pins of XNUCLEO-F103RB
IR1~IR5 A0~A4
GND GND
VCC 3.3V


Table 1 Connection between the module and STM32
Tabelle 1 zeigt die Verbindung zwischen dem Modul und dem Arduino Uno Plus. Die Daten der 5 Sensoren werden über I²C übertragen.<br>
Port Pins of Arduino
IIR1~IR5 A0~A4
IGND GND
IVCC 5V


Table 2 Connection between the module and Arduino
{| class="mw-datatable"
! style="font-weight: bold;" | Port
! style="font-weight: bold;" | Pin Arduino
|-align="left"
|CLK|| D13
|-align="left"
|ADDR|| D12
|-align="left"
|DOUT|| D11
|-align="left"
|CS|| D10
|-align="left"
| GND|| GND
|-align="left"
| VCC || max. 0.5 mA
|-align="left"
|}
<br/>


Table 3 shows the serial port configuration.
Einstellungen Serielle Schnitttstelle: <br>
Baud rate 9600
{| class="mw-datatable"
Data bits 8
|Baud Rate|| 9600
Stop bit 1
|-align="left"
Parity bit None
| Data bits|| 8
|-align="left"
| Stop Bits|| 1
|-align="left"
| Parity Bits|| None
|-align="left"
|}
<br/>


Table 3 Serial port configuration
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.
 
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 ==
== Hinweis ==
Zeile 139: Zeile 154:




Dabei ergibt sich für die Pins des Ultraschallsensors folgende Belegung:
<div style="width:950px; height:80px; overflow:auto; border: 1px solid #000">
<pre>
#define TRIG_PIN A5
#define ECHO_PIN 7
</pre>
</div>
== Weiterführende Links ==
== Weiterführende Links ==
* [https://www.waveshare.com/wiki/Tracker_Sensor Waveshare Wiki: Tracker Sensor]
* [https://www.waveshare.com/wiki/Tracker_Sensor Waveshare Wiki: Tracker Sensor]
* [https://www.waveshare.com/wiki/File:Tracker-Sensor-Schematic.pdf Schaltplan]
* [https://www.waveshare.com/wiki/File:Tracker-Sensor-Schematic.pdf Schaltplan]
* [https://www.waveshare.com/wiki/File:Tracker_Sensor_Demo.7z Demoprogramm]
* [https://www.waveshare.com/wiki/File:Tracker_Sensor_Demo.7z Demoprogramm]
* [http://www.npnec.com/en_pdf/ST188-EN.pdf Datenblatt der Infrarot Lichtschranke Sensor ST188 (Link)]
* [[Medium: ST188-EN.pdf|Datenblatt der Infrarot Lichtschranke Sensor ST188 (lokal)]]





Aktuelle Version vom 1. Mai 2023, 17:45 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: PD 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 PD-Regelung ein, damit der Fahrkorb gleichmäßig fährt. Über den PD-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), Differenzial (D). Im Folgenden wird der PD-Algorithmus beschrieben.

Quelltext 1: Beispiel für einen zeitdiskreten PD-Regler

 SOLL_WERT = 2000;
 e = SOLL_WERT - IstWert;              % Regelabweichung e
 dt=(t-last_t);                        % Zykluszeit
 proportional = e;                     % Proportionalanteil
 derivative = (e - last_e)/dt;         % Ableitung
 last_e = e;
 last_t = t;
 Stellgroesse = Kp* proportional + 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