Ich habe drei Gyroskopwerte, Pitch, Roll und Gier. Ich würde gerne einen Kalman-Filter hinzufügen, um genauere Werte zu erhalten. Ich habe die opencv-Bibliothek gefunden, die einen Kalman-Filter implementiert, aber ich kann es nicht verstehen, wie es wirklich funktioniert.
Könnten Sie mir irgendeine Hilfe geben, die mir helfen kann? Ich habe keine verwandten Themen im Internet gefunden.
Ich habe versucht, es für eine Achse arbeiten zu lassen.
%Vor%in main
%Vor%Und ich rufe jedes Mal an, wenn ich Daten vom Kreisel empfange:
%Vor%Ich dachte in kalman_filter der erste Parameter ist der vorherige Wert und der zweite ist der richtige Wert. Ich bin nicht und dieser Code funktioniert nicht ... Ich weiß, ich habe eine Menge Arbeit damit, aber ich weiß nicht, wie ich weitermachen soll, was ich ändern soll ...
Es scheint, als ob Sie den Kovarianzmatrizen zu hohe Werte geben.
kalman->process_noise_cov
ist die Prozessrauschen Kovarianzmatrix und wird oft bezeichnet in der Kalman-Literatur als Q
. Das Ergebnis wird mit niedrigeren Werten glatter.
kalman->measurement_noise_cov
ist die 'Messrausch-Kovarianzmatrix' und wird in der Kalman-Literatur oft als R
bezeichnet. Das Ergebnis wird mit höheren Werten glatter.
Die Beziehung zwischen diesen beiden Matrizen definiert die Menge und Form der Filterung, die Sie ausführen.
Wenn der Wert von Q
hoch ist, bedeutet dies, dass das von Ihnen gemessene Signal schnell variiert und Sie den Filter anpassungsfähig machen müssen. Wenn es klein ist, werden große Abweichungen dem Rauschen in der Messung zugeschrieben.
Wenn der Wert von R
hoch ist (im Vergleich zu Q
), zeigt dies an, dass die Messung verrauscht ist und daher mehr gefiltert wird.
Versuchen Sie niedrigere Werte wie q = 1e-5
und r = 1e-1
anstelle von q = 2.0
und r = 3.0
.
Tags und Links c c++ opencv kalman-filter