Forum: Digitale Signalverarbeitung / DSP / Machine Learning Q ung R Bestimmung von KalmanFilter


von Andy R. (johanneslqq)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Ich mache jetzt eine kleine Projekt,mithilfe von 
Handy-Sensorik(Beschleunigungssensor und Gyroskope) um die Steigung der 
Straße zu bestimmen.hab ich KalmanFilter verwendet.
http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-filter-and-how-to-implement-it/
das problem ist, ich habe keine Ahnung, wie ich Q und R einstellen soll 
und welche Größe sind richtig. Meine Einstellung war Q  [0.001 0 ; 0 
1e-6] , R=0.2. Das Ergebnis ist in Abbildung dargestellt. Ist mein 
Ergebnis gut? oder wie soll ich mein Ergebnis beurteilen.
Vielen Dank vorab!

Grüße
Andy

von max (Gast)


Lesenswert?

Also die Messrauschmatrix R kannst du aus dem Sensorrauschen bestimmen, 
da das Diagonalmatrix mit den Varianzen der Sensoren hast. Das könntest 
du messen indem du in Ruhelage der Sensoren Messungen vornimmst 
(korrigiert um Drifts).

Q ist für das Systemrauschen, sprich wie sehr du dem System vertraust. 
Das wird häufig durch probieren ermittelt. Grundsätzlich gilt, dass 
kleine Werte für Q mehr Vertrauen bedeuten...

von Andy R. (johanneslqq)


Lesenswert?

Danke für deine Antwort. Das problem ist, weiss ich nicht, wie klein die 
Q ich einstellen soll. Ich habe ein paar werte versucht. z.B.Q= [0.01 0; 
0 1e-6]. Das Ergibnis hat große Unterschied vergleich mit Q = [0.001 0; 
0 1e-6].so jetzt weiß ich nicht, welche Q soll ich vertrauen.
Grüße

: Bearbeitet durch User
von max (Gast)


Lesenswert?

Ich würde einfach die Sensorplatine ausgehend von der Ruhelage in 
bestimmte Lagen drehen bei denen ich weiß was der ideale Wert darstellen 
soll. Wenn du die Sensordaten irgendwie auf den PC bringst, könnte man 
das in Matlab oä sich plotten lassen und dann einfach vergleichen.

Außerdem: Wenn du die Winkelmessung nur aus Beschleunigungsmessungen 
über trigonometrische Funktionen berechnest, ist das im Grunde auch nur 
eine Näherung. Das wird aber meist verschwiegen. Die Messung ist 
zusätzlich nur gültig, wenn man keine externen Beschleunigungen hat, 
außer den g-Vector.

von Jan K. (jan_k)


Lesenswert?

max schrieb:
> Außerdem: Wenn du die Winkelmessung nur aus Beschleunigungsmessungen
> über trigonometrische Funktionen berechnest, ist das im Grunde auch nur
> eine Näherung. Das wird aber meist verschwiegen. Die Messung ist
> zusätzlich nur gültig, wenn man keine externen Beschleunigungen hat,
> außer den g-Vector.

Wo ist denn das eine Näherung? Man kann doch aus der Rotationsmatrix 
seiner beliebigen Winkel Parametrierung (Euler zyx, xyx, was auch immer) 
multipliziert mit [0 0 -g] zumindest zwei der drei Raumwinkeln 
analytisch berechnen.
Dass beim Rechnen Genauigkeitsprobleme auftreten können - ok. Und ja, 
das gilt natürlich nur, wenn du keine Zusatzbeschleunigungen hast, da 
hast du recht.

Schöne Grüße,
Jan


edit: hab' ganz vergessen was zu der Frage des OT zu schreiben :-/
Dein R ist das Rauschen der Zustände, die du in deinem Messmodell 
verwendest. Z.B. ist das der Beschleunigungssensor. Das Rauschen 
(besser: die Kovarianzmatrix des Rauschprozesses) kannst du wie erwähnt 
in erster Näherung aus einem Stillstand-Versuch ermitteln. Die Elemente 
auf der Hauptdiagonalen sind deine Varianzen, also die quadrierte 
Standardabweichung des dazugehörigen Zustands. Die Einträge auf den 
Nebendiagonalen geben die (Kreuz-)Kovarianzen an. Also wie stark die 
einzelnen Zustände voneinander abhängen. Das ist unter Umständen 
schwierig zu ermitteln. Häufig wird daher erstmal eine Diagonalmatrix 
für R verwendet.

Q ist das Systemrauschen. Dein Bias z.B. wird üblicherweise durch einen 
random walk oder durch einen komplizierteren Prozess beschrieben. Die 
Varianz ist ein Maß für die "Ausprägung", also wie stark der Prozess 
rauscht. Schwankt der Bias extrem stark, müsstest du einen höheren Wert 
wählen. Such mal nach "allan variance plot" oder "gyro bias estimation". 
Der Wert ist bestimmbar.
Schwieriger wirds für die Varianz deines Winkels. Dein Kalman nimmt an, 
das der Winkel oder besser die DGL deines Winkels mit additiven, weißen 
Rauschen überlagert ist. Bin mir nicht sicher, ob der überhaupt 
vernünftig bestimmt werden kann.
Für den Anfang wähle den Wert mal 1-3 Zehnerpotenzen niedriger, als den 
des Beschleunigungssensors. Damit sagst du im Prinzip aus, dass das 
Filter dem Gyro mehr vertrauen soll, da das Rauschen geringer ist. 
Wählst du den Wert zu klein, wird der Sensor driften oder z.B. in 
Anfangssituationen, in denen die Orientierung noch nicht feststeht nur 
sehr langsam bestimmen können, weil der Beschleunigungssensor kaum noch 
beachtet wird.

Hmm war mehr Text als gedacht. Hoffe du verstehst ein bisschen was.

Mfg,
Jan

: Bearbeitet durch User
von Matthias (Gast)


Lesenswert?

>
> Wo ist denn das eine Näherung? Man kann doch aus der Rotationsmatrix
> seiner beliebigen Winkel Parametrierung (Euler zyx, xyx, was auch immer)
> multipliziert mit [0 0 -g] zumindest zwei der drei Raumwinkeln
> analytisch berechnen.

Wie genau berechnest du es analytisch?

von Jan K. (jan_k)


Lesenswert?

Habe keine Lust, die Matrizen hier aufzuschreiben. Hier 
http://de.wikipedia.org/wiki/Eulersche_Winkel#Beispiel_f.C3.BCr_Gier-Nick-Roll 
gibts die parametrierung. Da ist das die Kraft, du kannst aber einfach 
durch m teilen, dann hast du die Beschleunigung in m/s^2. Oder durch 
m*g, wenn dein Sensor g liefert. Davon gehe ich jetzt aus

Nicht wundern über das [0 0 +mg], glaube die haben da die z Achse anders 
herum gelegt.

Jedenfalls kommt heraus:

Eventuell musst du noch die Vorzeichen bei den sin(theta) tauschen, wenn 
dein Gewichtsvektor in die andere Richtung zeigt.

Jedenfalls kannst du sehen, dass du Zeile 2 und 3 durcheinander teilen 
kannst, dann steht da in Komponenten

für den zweiten Winkel
 kannst du z.B. die letzte Zeile nehmen und einfach einsetzen. Kannst 
aber auch noch etwas rumrechnen, um von dem arccos zu einem arctan zu 
kommen.

Schöne Grüße,
Jan

: Bearbeitet durch User
von Matthias (Gast)


Lesenswert?

Ja, stimmt... Cool! Danke.
Da habe ich mich wohl geirrt ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.