RegistrierenRegistrieren   LoginLogin   FAQFAQ    SuchenSuchen   
nicht-linearer Kalmanfilter; Jacobische; Linearisierung
 
Neue Frage »
Antworten »
    Foren-Übersicht -> Sonstiges
Autor Nachricht
mzenzes



Anmeldungsdatum: 11.10.2006
Beiträge: 8

Beitrag mzenzes Verfasst am: 23. Mai 2008 12:02    Titel: nicht-linearer Kalmanfilter; Jacobische; Linearisierung Antworten mit Zitat

Hallo Leute,

wiedermal schlage ich mich erfolglos mit dem rum was ich eigentlich können sollte ;-)

Es dreht sich um die Anwendung eines nicht-linearen Kalmanfilters mit der OpenCv-Library.

Dort habe ich mich eingearbeitet, und stehe nun vor dem Problem, das ich meine Messgleichung linearisieren muss, um sie im Filter verwenden zu können. Dazu schreibt die Wikipedia das ich die Linearisierung mittels der Jacobischen Matrix vornehmen kann. Gut, kein Problem. Oder...?

(Im Kalman-Filter wird aus dem aktuellen Systemzustand unter anderem der zu erwartende Messvektor geschätzt, um ihn dann mit dem echten im Nachhinein zu vergleichen. Dann kann man etwas über die Güte der Filterung und Messung aussagen. Diese vorhersage wird entweder mit der Systemmatrix C gemacht, oder aber mit der linearisierung des Gleichungssystems. In dem Fall muss sie jeden Durchlauf neu linearisiert werden; Gleichungnen in Octave-Schreibweise)

Meine 3x1 Messgleichung h(X), mit dem 3x1 Systemzustandsvektor X (Messvektor in [m/s²], Zustand in [rad]):
Code:
g = 9.81;
h = [ -sin(X(2)) ;
       cos(X(2))*sin(X(1)) ;
       cos(X(2))*cos(X(1)) ]*g;

Dieses Gleichungssystem muss ich nun mittels der Jacobischen Matrix zur Matrix H linearisieren.
Hierbei ist dh1/dX(1) die Ableitung der ersten Gleichung nach der ersten Unbekannten usw:
Code:
H = [ dh1/dX(1), dh1/dX(2), dh1/dX(3) ;
      dh2/dX(1), dh2/dX(2), dh2/dX(3) ;
      dh3/dX(1), dh3/dX(2), dh3/dX(3) ];

Oder, ausgeschrieben:
Code:
H = [  0 ,                   -cos(X(2)),           0 ;
       cos(X(1))*cos(X(2)) , -sin(X(2))*sin(X(1)), 0 ;
      -sin(X(1))*cos(X(2)) , -sin(X(2))*cos(X(1)), 0 ]*g;

Nach meinem Verständniss muss ich nun, um mittels dieser Matrix wiederrum den Messvektor zu erhalten (quasi nur zur Probe Rückwärts rechnen), den Zustandsvektor numerisch verrechnen (einsetzen), und dann die Matrix mit X malnehmen.
Also H(X)*X. Klappt natürlich nciht...

Als Beispiel:
Code:
X = [0.1;0;0];
H = [  0,     -1, 0 ;
       0.995,  0, 0 ;
      -0.0998, 0, 0 ]*g;
H*X = [ 0 ; 0.976 ; -0.0979 ];

Anhand der echten Messgleichung h ermittele ich aber den zu erwartenden Messvektor folgendermaßen:
Code:
h = [ -0 ; 0.979 ; 9.760 ];

Was auch gemessen wird...

Tja, wo hab ich den Bock eingebaut? Was mache ich falsch?

-Die Jacobische ist meiner Meinung nach richtig, die Rechenvorschrift ja ziemlich eindeutig. Und ein bisschen sin/cos Ableiten...
-Ist das Verfahren (Jacobische) ansich schon ungeeignet? Findet sich aber in vielen Beispiel Kalman-Applikationen...
-Reihenfolge der Matrizenmultiplikation durcheinander? Eigentlich nicht, ausserdem muss ich ja auf die Dimensionen achten...
-Die numerische ausgerechnete H-Matrix sieht ja Zahlentechnisch ganz schön aus, alles was ich brauche kommt drin vor
-Da X in [rad] angegeben ist, wird wahrscheinlich selten sowas wie 1 als Element dabei sein, und durch dieses multiplizieren (H*X) erhalte ich dann immer sehr kleine Ergebnisse. Also ist irgendwo ein prinzipieller Fehler?
dermarkus
Administrator


Anmeldungsdatum: 12.01.2006
Beiträge: 14788

Beitrag dermarkus Verfasst am: 02. Jun 2008 02:44    Titel: Antworten mit Zitat

An welcher Stelle hast du die Ableitungen ausgerechnet? Muss diese Stelle nicht als Konstante noch mitberücksichtigt werden?

Vergleich mit einem eindimensionalen Fall: Die linearisierte Annäherung einer Kurve in der Nähe der Stelle ist die Tangente an die Kurve in diesem Punkt:



Müsste dann nicht dementsprechend deine linearisierte Näherung



sein, wenn du deine Matrix aus den Ableitungen an der Stelle bildest?
mzenzes



Anmeldungsdatum: 11.10.2006
Beiträge: 8

Beitrag mzenzes Verfasst am: 02. Jun 2008 10:20    Titel: Antworten mit Zitat

Hallo Markus

Ja, du hast recht. Das habe ich die Tage schon herausgefunden - eigentlich auch logisch, wenn man dich das durchließt ;-)

In meinem Fall (Kalmanfilterung mit OpenCv) ist die Jacobische bei der Matrizenrechnung durchaus nötig. Für die Vorhersage des nächsten Systemzustandes nehme ich dann entweder die linearsisierung (ungenau). Oder einfach direkt das echte Gleichungssystem (das ich ja kenne).

Aber danke nochmal für eine Antwort.
mit besten Grüßen
mzenzes
Neue Frage »
Antworten »
    Foren-Übersicht -> Sonstiges