mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Gyroskop Drift schätzen mit Kalman


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Marcel (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

an diversen Stellen im Netz findet man das gleiche Modell für ein 
Kalmanfilter, das den Drift des Gyros schätzen soll (zb hier 
http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-filter-and-how-to-implement-it/).

Ich habe das Filter in matlab nachgebaut und "drehe" mein virtuelles 
Objekt. Dabei wird zwar der Winkel ganz gut geschätzt, jedoch liegt die 
Schätzung des Drifts meilenweit daneben.

Ich habe im Code den Drift konstant auf 0.01 gesetzt, das KF kann jedoch 
den Drift und die Winkelgeschwindigkeit nicht auseinanderhalten.

Habe ich beim Abtippen irgend etwas übersehen? Oder ist das Modell 
grundsätzlich falsch?

Weiterhin ist mir noch nicht ganz klar, wie ich das Prozessrauschen des 
Drifts modelliere. Was kommt richtigerweise bei q22 rein und warum? 
Bisher habe ich das so verstanden, dass dort die Unsicherheit des 
Modells reinkommt. Beim vorhandenen Modell gibt es aber keine Gleichung 
für den Drift, daher bin ich etwas ratlos.

von Detlef _. (detlef_a)


Angehängte Dateien:
  • TTT.M (3,63 KB, 307 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Hallo Marcel,

die Schätzung der Gyrodrift klappt schon, siehe anhängendes Bild. Dein 
Modell paßte nicht zu der Berechnung der Ausgangsgröße. Ich habe Dir nen 
File angehängt, das funzt, vergleich das mit Deinen Berechnungen. Dein 
Modell ist nen Integrierer, der ist instabil, das mag Kalman oft nicht 
so gerne.

math rulez!
Cheers
Detlef

von Detlef _. (detlef_a)


Angehängte Dateien:
  • TTT.M (3,58 KB, 216 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Muß mich korrigieren, Bild bleibt.

Cheers
Detlef

von Marcel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ach, ich hatte noch ein dt vergessen an die Gyro-Werte heran zu 
multiplizieren. Jetzt sieht es gut aus.

Noch ne prinzipielle Frage: Ich finde verschiedene Kalmangleichungen, 
worin bestehen die Unterschiede?

A:

K = A*P*C'*inv(S);
P = A*P*A' + Q - A*P*C'*inv(R)*C*P*A';

B:

K = P*C'*inv(S);
P = A*P*A' + Q;


Und was hat es bei Matrizenrechnung allgemein mit A*B*A' auf sich? So 
etwas sieht man ziemlich oft, dass eine Matrix B von links mit A und von 
rechts mit A' multipliziert wird. (Das Hochkomma ist die 
Matlabschreibweise der Transponierten)

von Detlef _. (detlef_a)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

>>Ich finde verschiedene Kalmangleichungen, worin bestehen die Unterschiede?

Ich hatte in Deinem Code rumgefuscht, weiß nicht mehr genau, was wie und 
wo klemmte, kann das nicht mehr nachvollziehen. Unten hab ich funzenden 
Kalman Code angehängt, den hatte ich in
Beitrag "Amplitude und Phase einer festen Frequenz bestimmen."
mal gepostet. Der orientiert sich an 'Anwendungen der Kalman Filter 
Technik, Schrick Herausgeber, Oldenburg Verlag 1977'

>>Und was hat es bei Matrizenrechnung allgemein mit A*B*A' auf sich?
Das heißt bei Mathematikern 'quadratische Form' afaik. Auf jeden Fall 
macht Dir A*B*A' eine Matrix aus (gemischt-)quadratischen Polynomen der 
Elemente von A mit den Elementen von B als Koeffizienten. Sowas taucht 
immer dann auf, wenn man einen Fehler minimieren will z.B. bei Kalman.

hth
Cheers
Detlef

for k = 1:n,
 PS = A*P*A'+Q;
 K = PS*C'*inv(C*PS*C'+R);
 P = (eye(2)-K*C);
 P = P*PS*P'+K*R*K';
 xds=A*xd;
 xd = xds+K*(y(k) -C*xds);
end;

von Matthias (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Es gibt verschiedene Darstellungsformen. ZB Joseph's Form
Bedeuten aber das gleiche.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.