Offset-Kompensation Gyro Sensor: Unterschied zwischen den Versionen
Zeile 15: | Zeile 15: | ||
function SabGier_Offset = Offsetberechnung(Last_Offset, Schalter_offline, Taster, SenGier_psip_roh_K_f64) | function SabGier_Offset = Offsetberechnung(Last_Offset, Schalter_offline, Taster, SenGier_psip_roh_K_f64) | ||
if Taster == 1 && Schalter_offline == 0 | Anzahl_Werte=1000; | ||
SabGier_psi_reset_bit = double(SenGier_psi_reset_bit); | |||
if Taster == 1 && Schalter_offline == 0 | |||
Offset = 0; | |||
for i=1:Anzahl_Werte | |||
Offset= (Offset+SenGier_psip_roh_K_f64); % summe aller Werte | |||
%Offset= (Offset+SenGier_psip_roh_K_f64)/2; vorher | |||
end | |||
Offset = Offset/Anzahl_Werte; % Mittel aus aller Werte | |||
SabGier_psi_reset_bit = 1; % Reset des Integrators | |||
elseif Schalter_offline == 1 | elseif Schalter_offline == 1 | ||
Offset = 0; | |||
else | else | ||
Offset = Last_Offset; | |||
end | end | ||
SabGier_Offset = Offset; | SabGier_Offset = Offset; | ||
Sobald der rote Taster gedrückt wird und sich die Simulation im Onlinebetrieb befindet, wird mit der Offset-Berechnung begonnen. Das Offset wird berechnet, indem der Mittelwert über 1000 Werte bestimmt wird. | Sobald der rote Taster gedrückt wird und sich die Simulation im Onlinebetrieb befindet, wird mit der Offset-Berechnung begonnen. Das Offset wird berechnet, indem der Mittelwert über 1000 Werte bestimmt wird. Über 1000 Schleifendurchgänge wird der aus den Messwerten des Gyro Sensors ''SenGier_psip_roh_K_f64'' der durchschnittswert ermittelt. Im ersten Schleifendurchlauf wird das Offset zunächst auf 0 gesetzt. | ||
Befindet sich die Simulation im Offline-Modus, d.h. ''Schalter_offline''=1, muss kein Offset berechnet werden. Das Offset wird gleich 0 gesetzt. | Befindet sich die Simulation im Offline-Modus, d.h. ''Schalter_offline''=1, muss kein Offset berechnet werden. Das Offset wird gleich 0 gesetzt. | ||
In allen anderen Fälle, d.h. zum Beispiel wenn der Taster nicht mehr betätigt ist, soll das zuletzt berechnete Offset übergeben werden. | In allen anderen Fälle, d.h. zum Beispiel wenn der Taster nicht mehr betätigt ist, soll das zuletzt berechnete Offset übergeben werden. | ||
Zeile 36: | Zeile 42: | ||
Autor: [[Benutzer:Julia Mueller|Julia Müller]] ([[Benutzer Diskussion:Julia Mueller|Diskussion]]) 15:04, 4. Feb. 2014 (CET) | Autor: [[Benutzer:Julia Mueller|Julia Müller]] ([[Benutzer Diskussion:Julia Mueller|Diskussion]]) 15:04, 4. Feb. 2014 (CET) | ||
Autor: [[Benutzer:Martin_Berysztak|Martin Berysztak]] ([[Benutzer Diskussion:Martin Berysztak|Diskussion]]) & [[Benutzer:Adem_Hadziric|Adem Hadziric]] ([[Benutzer Diskussion:Adem Hadziric|Diskussion]]) 15:17, 22. Jan. 2015 (CET) | |||
== '''Test der automatischen Offset-Kompensation''' == | == '''Test der automatischen Offset-Kompensation''' == |
Version vom 22. Januar 2015, 18:55 Uhr
Automatische Offset-Kompensation
Die Offset-Kompensation des Gyro Sensors ist in dem Block Signalaufbereitung implementiert. Die Kompensation ist notwendig, da das Signal des Gyro Sensors ein großes Offset besitzt. Außerdem rauscht der Sensor sehr stark um das Offset.
Die Berechnung des Offsets erfolgt über einen Matlab-Funktions-Block. Dem Block werden das Rohsignal SenGier_psip_roh_K_f64, die Tasterbetätigung des roten Taster für den Start des AEP SenTast_AEP_bit (=Taster), die Schalterstellung für Online- oder Offline-Betrieb der Simulation Schalter_offline und das zuletzt berechnete Offset LastOffset übergeben. Ausgegeben wird das berechnete Offset SabGier_offset.
Das Signal bei Betätigung des roten Tasters wird über ein Transport Delay verzögert. Die Verzögerung soll sicherstellen, dass das Fahrzeug ruhig steht. Durch die Betätigung des Tasters wird das Fahrzeug angestoßen und schwingt etwas. Würde man direkt das Offset bestimmen, besteht die Möglichkeit, dass die Schwingung des Fahrzeugs das Offset verfälscht. Durch ein Transport Delay von 5 Sekunden kann garantiert werden, dass das Fahrzeug wieder ruhig steht.
Der erste "Data Type Conversion"-Block ist notwendig, da das Transport Delay im Online-Modus nur mit einem double-Wert arbeiten kann. Im Offlinebetrieb muss der Converter entfernt werden. Anschließend muss für die Matlab-Funktion das Signal jedoch unabhängig vom Betrieb in einen boolean-Wert umgewandelt werden.
Die Matlab-Funktion enthält folgende Befehle:
function SabGier_Offset = Offsetberechnung(Last_Offset, Schalter_offline, Taster, SenGier_psip_roh_K_f64) Anzahl_Werte=1000;
SabGier_psi_reset_bit = double(SenGier_psi_reset_bit); if Taster == 1 && Schalter_offline == 0 Offset = 0; for i=1:Anzahl_Werte Offset= (Offset+SenGier_psip_roh_K_f64); % summe aller Werte %Offset= (Offset+SenGier_psip_roh_K_f64)/2; vorher end Offset = Offset/Anzahl_Werte; % Mittel aus aller Werte SabGier_psi_reset_bit = 1; % Reset des Integrators elseif Schalter_offline == 1 Offset = 0; else Offset = Last_Offset; end SabGier_Offset = Offset;
Sobald der rote Taster gedrückt wird und sich die Simulation im Onlinebetrieb befindet, wird mit der Offset-Berechnung begonnen. Das Offset wird berechnet, indem der Mittelwert über 1000 Werte bestimmt wird. Über 1000 Schleifendurchgänge wird der aus den Messwerten des Gyro Sensors SenGier_psip_roh_K_f64 der durchschnittswert ermittelt. Im ersten Schleifendurchlauf wird das Offset zunächst auf 0 gesetzt. Befindet sich die Simulation im Offline-Modus, d.h. Schalter_offline=1, muss kein Offset berechnet werden. Das Offset wird gleich 0 gesetzt. In allen anderen Fälle, d.h. zum Beispiel wenn der Taster nicht mehr betätigt ist, soll das zuletzt berechnete Offset übergeben werden.
Je nach Bedingung wird ein Wert für das Offset bestimmt und abschließend an die Variable SabGier_Offset übergeben. Dieser Ausgabewert wird über den Block Last State wieder in den Eingang hereingeführt und gilt dort als Last_Offset.
Nach der Offsetberechnung wird das berechnete Offset vom Rohsignal abgezogen. Das offset-kompensierte Signal awird anschließend noch über einen PT1-Filter tiefpass-gefiltert, um das Rauschen zu unterdrücken.
Autor: Julia Müller (Diskussion) 15:04, 4. Feb. 2014 (CET)
Autor: Martin Berysztak (Diskussion) & Adem Hadziric (Diskussion) 15:17, 22. Jan. 2015 (CET)
Test der automatischen Offset-Kompensation
Test 1
- Testdurchführung
In diesem Test wurden über 15 Minuten 50 Offsetwerte bestimmt. Dazu wurde der rote Taster zum Start der Offset-Kompensation betätigt. Anschließend wurde der berechnete Offset-Wert abgelesen.
Die abgelesenen Werte befinden sich in folgender Tabelle:
Messung | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
Offset in | 10,834 | 10,514 | 10,738 | 10,258 | 10,546 | 10,930 | 10,450 | 10,738 | 10,227 | 10,386 | 10,770 | 11,089 | 10,738 | 10,578 | 10,610 | 10,578 | 10,770 | 10,514 | 10,610 | 10,770 |
Messung | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
Offset in | 10,290 | 10,706 | 10,099 | 10,610 | 10,866 | 10,482 | 10,322 | 10,195 | 10,578 | 10,610 | 10,738 | 10,258 | 10,610 | 10,834 | 10,386 | 10,345 | 11,121 | 10,610 | 10,546 | 11,214 |
Messung | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 |
Offset in | 11,185 | 10,578 | 10,131 | 10,546 | 10,354 | 10,482 | 10,770 | 10,674 | 10,514 | 10,258 |
- Auswertung
Minimum in | 10,099 |
Maximum in | 11,217 |
Mittelwert in | 10,59144 |
Der Mittelwert des berechneten Offsets von 50 Messungen liegt bei 10,591444 . Dies entspricht einem Wert von 606,85°/s. Betrachtet man nun die Differenzen zwischen Minimum, Maximum und Mittelwert ergeben sich folgende Werte:
Maximum-Mittelwert = 0,6256 = 35,84°/s
Mittelwert-Minimum = 0,492 = 28,214°/s
Maximum-Minimum = 1,118 = 64,057°/s
Die Differenzen zwischen den verschiedenen berechneten Mittelwerten ist sehr groß. Wird ein Mittelwert im oberen oder unteren Bereich der Mittelwerte berechnet, so kann es sein, dass der Gierwinkel, der aus der offset-kompensierten Gierrate berechnet wird, trotz Kompensation der Gierrate wegläuft.
Die Offset-Kompensation erfüllt zwar ihren Zweck, jedoch bleibt das Risiko, dass der Gierwinkel dennoch wegläuft. Je länger das Fahrzeug fährt, desto weiter könnte sich der Gierwinkel vom wahren Wert entfernen. Da für den Einparkalgorithmus der Gierwinkel benötigt wird und dabei ein Winkel von max. 45°, d.h. 0,7854 rad, betrachtet werden muss, muss der Gierwinkel genullt werden, bevor der eigentliche Einparkalgorithmus beginnt. Das heißt, dass sobald das Fahrzeug neben der passenden Parklücke steht, der Gierwinkel zu Null gesetzt werden muss. Für die kurze Fahrt des Einparkens ist die Kompensation ausreichend.
Autor: Julia Müller (Diskussion) 08:49, 6. Feb. 2014 (CET)
Test 2
- Testdurchführung
In diesem Test wurden 10 Messungen mit ControlDesk aufgenommen. Die Messungen wurden hintereinander aufgenommen.
Gemessen wurde:
- Das Offset SenGier_Offset_K_f64
- Der Gierwinkel SenGier_psi_filt_K_f64
- Das Gierraten-Rohsignal SenGier_psip_roh_K_f64
- Das Tastersignal AEP SenTast_AEP_bit
Nach der Messung wurden die Messwerte unter ...\SVN-Unterlagen\Software\CaroloCupFahrzeug\dSPACE\Inbetriebnahme\Measurement Data\Messungen_Gyrosensor gespeichert und in Matlab ausgewertet.
- Auswertung
Für die Auswertung wurde ein Script in Matlab angelegt und unter ...\SVN-Unterlagen\Software\CaroloCupFahrzeug\dSPACE\Inbetriebnahme\Measurement Data\Messungen_Gyrosensor gespeichert.
Für jede Messungen wurden vier Figuren erstellt (Die Bilder sind exemplarisch für die erste Messung):
1. Alle 4 gemessenen Signale in einem Plot
2. Jedes Signal einer Messung jeweils in einem einzelnen Subplot
3. Das Offset-Signal während der Berechnung
4. Das Gierwinkel-Signal ab der Kalibierung bis zum Ende der Messung
Die Figuren aller Messungen sind unter ...\SVN-Unterlagen\Software\CaroloCupFahrzeug\dSPACE\Inbetriebnahme\Measurement Data\Messungen_Gyrosensor\Bilder_Auswertung als *.jpg abgelegt.
Bei der Auswertung des Offset-Signals fiel auf, dass das Offset der vergangenen Messung zu Beginn anliegt. Startet man ControlDesk nach Hochfahren des Rechners erstmals, sind noch keine Werte für die Variablen vorhanden. Hat man jedoch einmal ein Offset berechnet, ist es gespeichert. Auch wenn man ControlDesk schließt und wieder öffnet, ist der alte Wert des Offsets noch vorhanden. Daher ist nur in der ersten Messung das Offset zu Beginn gleich null. Bei allen anderen Messungen ist das Offset zu Beginn gleich dem Offset der vorherigen Messungen. Außerdem ist aufgefallen, dass die Berechnung des Offsets immer wieder von neuem gestartet wird, solange der Taster gedrückt ist. Daher entsteht das Zappeln in der Kurve des Offsets.
Des Weiteren wurden noch folgende Faktoren betrachtet: - erste neu berechneter Offsetwert und Zeitpunkt - letzter berechneter Offsetwert und Zeitpunkt - Verhalten Gierwinkel SenGier_psi_filt_K_f64 zu Beginn - Verhalten Gierwinkel SenGier_psi_filt_K_f64 nach neuer Offsetberechnung - Zeitpunkt Tasterbetätigung und Zeitpunkt, wenn der Taster wieder losgelassen wird
Messung | erster neu berechneter Offsetwert | Zeitpunkt der Berechnung | letzter berechneter Offsetwert | Zeitpunkt der Berechnung | Verhalten Gierwinkel zu Beginn | Verhalten Gierwinkel nach Offsetberechnung | letzter Gierwinkelwert (Zeit) | Zeitpunkt roten Taster betätigen | Zeitpunkt roten Taster loslassen |
1 | 10,6420 rad/s | 9,0542 s | 11,6007 rad/s | 9,6192 s | läuft stark weg ins Positive | hält sich ganz gut im Bereich der Null, läuft jedoch leicht ins Negative | (-1,6191) rad (13,5988 s) | 4,0546 s | 4,6196 s |
2 | 11,2492 rad/s | 8,2493 s | 11,2812 rad/s | 8,4943 s | läuft weg ins Negative | läuft ins Negative | (-3,8950) rad (14,9987 s) | 3,2497 s | 3,4947 s |
3 | 10,8337 rad/s | 9,4242 s | 10,4822 rad/s | 9,8341 s | läuft weg ins Negative | hält sich ganz gut, läuft leicht ins Positive | 0,3491 rad ((12,2539 s) |
4,4246 s | 4,8346 s |
4 | 10,7379 rad/s | 7,8843 s | 10,5142 rad/s | 8,2793 s | läuft weg ins Positive | hält sich ganz gut, läuft leicht ins Positive | 0,3544 rad (10,4491 s) |
2,8847 s | 3,2797 s |
5 | 10,6739 rad/s | 8,2493 s | 10,4183 rad/s | 8,6392 s | läuft leicht weg ins Positive | läuft weg ins Positive | 2,3137 rad ((16,8485 s) |
3,2497 s | 3,6097 s |
6 | 10,6739 rad/s | 7,6343 s | 10,6739 rad/s | 7,9093 s | läuft weg ins Positive | hält sich gut | 0,3270 rad ((36,8527 s) |
2,6348 s | 2,9097 s |
7 | 11,4409 rad/s | 7,2044 s | 10,7379 rad/s | 7,4543 s | läuft langsam ins Positive | läuft langsam ins Negative | (-0,6719) rad (18,9983 s) | 2,1898 s | 2,3198 s |
8 | 10,8657 rad/s | 8,9592 s | 10,7698 rad/s | 9,2892 s | läuft ins Negative | läuft langsam ins Negative | (-0,6354) rad (17,9984 s) | 3,9597 s | 4,2896 s |
9 | 10,8657 rad/s | 7,0394 s | 11,4409 rad/s | 7,2294 s | läuft ins Negative | läuft ins Negative | (-8,511) rad (18,6534 s) | 2,0398 s | 2,2298 s |
10 | 11,3131 rad/s | 6,8244 s | 10,1946 rad/s | 7,0744 s | läuft ins Negative | läuft ins Positive | 2,6631 rad (12,9589s) | 1,8248 s | 2,0748 s |
In der Tabelle ist der Nachweis erbracht, dass das Time Delay korrekt funktioniert. Zwischen dem Zeitpunkt der ersten Offset-Berechnung und dem Zeitpunkt zu dem der rote Knopf gedrückt wird, liegen immer 5 Sekunden. Ebenso wie zwischen dem Zeitpunkt der letzten Offset-Berechnung und dem Zeitpunkt zu dem der rote Knopf losgelassen wird. Wobei der Zeitpunkt, der Zeitpunkt ist, wenn die letzte 1 gespeichert wurde.
Des Weiteren fällt wie im Test 1 auf, dass der Offsetwert sehr stark streut. Dies zeigt sich auch im Verhalten des Gierwinkels nach der Offsetberechnung. Trifft man einen Offsetwert, der nahe dem Mittelwert der Offsetberechnungen (Test 1: 10,59144 rad/s) liegt, hält der Gierwinkel sich lange im Bereich der Null und driftet nur minimal weg. Sehr gut getroffen wurde das Offset in Messung 6. Hier ist der Gierwinkel nach ca. 29 Sekunden(37 Sekunden Messung-8Sekunden Offsetberechnung) erst um 0,3 rad weggedriftet. Die Gierwinkel aller Messungen sehen wie folgt aus:
Da die Messwerte der Gierwinkel von der ersten Messung und der zweiten Messung sehr stark weggedriftet sind, kann man den Verlauf de Gierwinkels nach der neuen Offsetberechnung nicht mehr so deutlich erkennen. Daher sind in der folgenden Graphik nochmal die Gierwinkel ohne die erste und zweite Messung dargestellt:
Ausblick
nächste Schritte:
- Es sollte ein neuer Sensor verbaut werden, der nicht so stark rauscht und ein so großes Offset besitzt.
- bei der Offsetberechnung sollte eine Entprellung des Tasters eingebaut werden. Aktuell wird solange der der Taster gedrückt ist, permanent mit der Berechnung neu begonnen. In Zukunft sollte sobald der Taster gedrückt wird mit der Berechnung begonnen werden, die Schleife sollte jedoch nur einmal aufgerufen werden.
- Eventuell sollte man über eine erneute Offsetberechnung, wenn das Fahrzeug neben der Parklücke steht nachdenken, um das wegdriften für den kurzen Zeitraum des Einparkalgorithmus möglichst gering zu halten.
Autor: Julia Müller (Diskussion) 17:18, 6. Feb. 2014 (CET)