Kalman-Filter – Kalman-Filter

Kalman-Filter – Kalman-Filter

Einführung

Lernen Sie hier aus der Baidu-Enzyklopädie

Die Kalman-Filterung ist ein Algorithmus, der lineare Systemzustandsgleichungen verwendet, um den Systemzustand anhand von Systemeingabe- und -ausgabebeobachtungsdaten optimal abzuschätzen . Da die Beobachtungsdaten den Einfluss von Rauschen und Störungen im System beinhalten, kann die optimale Schätzung auch als Filterprozess betrachtet werden .

Datenfilterung ist eine Datenverarbeitungstechnologie , die Rauschen entfernt und echte Daten wiederherstellt . Mit der Kalman-Filterung kann der Zustand eines dynamischen Systems aus einer Reihe von Daten mit Messrauschen geschätzt werden, wenn die Messvarianz bekannt ist. Da die Computerprogrammierung einfach zu implementieren ist und die vor Ort gesammelten Daten in Echtzeit aktualisiert und verarbeitet werden können, ist die Kalman-Filterung derzeit die am weitesten verbreitete Filtermethode und wird in vielen Bereichen wie Kommunikation, Navigation, Führung und Steuerung gut eingesetzt.

Beispielanalyse

Die Position des Flugzeugs im letzten Moment ist bekannt, und die Position des Flugzeugs, die in diesem Moment vom empfangenen Radar gemessen wird, ist bekannt. Verwenden Sie die beiden vorherigen Daten, um die Position des Flugzeugs zu diesem Zeitpunkt abzuschätzen . Vereinfacht ausgedrückt bedeutet dies, den Zustand im letzten Moment und die Messdaten zu kennen und diese beiden Daten zu fusionieren, um den aktuellen Zustand zu ermitteln.

Da zwischen den vom Radar empfangenen Daten und den Echtzeit-Positionsdaten des Flugzeugs ein Verzögerungsfehler besteht, ist die Position des Flugzeugs auch dann noch ungewiss, wenn die Messdaten empfangen werden . Ich muss also die Flugzeugposition zum aktuellen Zeitpunkt basierend auf der Position zum vorherigen Zeitpunkt schätzen und diese mit den Messdaten kombinieren , um die aktuelle Flugzeugposition abzuschätzen . Genau das macht die Kalman-Filterung.

Kalman glaubte, dass alle Zustandsänderungen (Positionsänderungen) linear sind. Was ist Linearität ? Das heißt, das Flugzeug bewegt sich geradlinig mit konstanter Geschwindigkeit. Was passiert, wenn die Zustands- und Positionsänderung nicht linear ist, wie etwa bei einem Flugzeug, das Bewegungen mit variabler Geschwindigkeit durchführt? Tatsächlich wurde für diese Situation ein neuer Algorithmus erfunden: die erweiterte Kalman-Filterung. Hier untersuchen wir nur die Kalman-Filterung.

Einführung in Filteralgorithmen

Der Filteralgorithmus verwendet im Wesentlichen mehrere Daten, um den wahren Zustand zusammenzuführen und abzuschätzen.

Fügen Sie hier eine Bildbeschreibung ein

Es gibt ein Flugzeug, das nur horizontal fliegen kann. Es ist bekannt, dass das letzte Mal t 1 t_1 istT1Die Position des Flugzeugs x 1 x_1X1und Geschwindigkeit v 1 v_1v1. Radar erkennt t 2 t_2T2Die Position bei x 2 ∗ x_2^*X2. Es gibt zwei Möglichkeiten, die Flugzeugposition zu ermitteln:

1: Das Flugzeug bewegt sich mit konstanter Geschwindigkeit ( v 2 = v 1 v_2 = v_1v2=v1​), aktuelle Position: x 1 + v 2 ( t 2 − t 1 ) x_1 + v_2(t_2-t_1)X1+v2( T2T1)

2: Die Position ist x 2 ∗ x_2^*X2

Da die Geschwindigkeit des Flugzeugs variabel ist und die Radarmessung ungenau ist, gehen wir davon aus, dass sich das Flugzeug zum Zeitpunkt t 2 t_2 befindetT2Die Position von ​ ist:
x 2 real = ( x 1 + v 2 ( t 2 − t 1 ) ) + α [ x 2 ∗ − ( x 1 + v 2 ( t 2 − t 1 ) ) ] x^{real } _2 =(x_1 + v_2(t_2-t_1)) + \alpha[x^*_2-(x_1 + v_2(t_2-t_1))]X2echt _ _ _=( X1+v2( T2T1) )+ein [ x2( X1+v2( T2T1) ) ]
a \alphaα ist das Konfidenzniveau der Radarmessung. Wenn das Radar ungenau ist, stellen Sie α auf einen sehr niedrigen Wert ein, z. B. 0,1. Wenn das Radar sehr genau ist, stellen Sie α auf einen Wert sehr nahe bei 1 ein, z. B. 0,9. Sie werden feststellen, dass je näher α an 0 liegt, desto näher kommt die geschätzte Position der Vorstellung, dass sich das Flugzeug mit konstanter Geschwindigkeit bewegt. Je näher α an 1 liegt, desto näher liegt die geschätzte Position am Radarmesswert (entspricht der Berücksichtigung, dass die Position des Flugzeugs zum Zeitpunkt $t_2$​ der Radarmesswert ist).
——————————————
Der Filteralgorithmusist eine Berechnungsmethode zur Bestimmung des spezifischen Werts von α.

Bei der Kalman-Filterung wird α verwendet, um den Anteil des anhand der vorherigen Position geschätzten aktuellen Positionswerts und des gemessenen Werts am Endergebnis anzupassen. Dies wird bei der Kalman-Filterung als Kalman-Verstärkung bezeichnet, die K n K_{n} ist.Kn​。

Fügen Sie hier eine Bildbeschreibung ein

K n K_nKn​Das heißt, das Endergebnis anzupassen xrealx^{real}XWelcher der geschätzten und gemessenen Werte liegt näher am tatsächlichen Wert ?

Jetzt erhalten wir die neue Positionsschätzung und schätzen dann darauf basierend die Varianz der nächsten Position pn − 1 p_{n-1}Pn 1Wie viel kostet das? Da der Anteil des aktuellen Zustands am Endergebnis auf der Grundlage des vorherigen Zustands berechnet wird, beträgt er 1 − K n 1 -K_n1Kn. Also Varianz pn = ( 1 − kn ) pn − 1 p_{n}=(1-k_n)p_{n-1}Pn=( 1kn) Pn 1

Das Wichtigste an der Kalman-Filterung ist die Notwendigkeit, zwei Varianzen zu finden. Einer davon ist die Varianz dieser Methode, die ausschließlich auf Schätzungen beruht. Der zweite ist die Varianz des Messgeräts. Solange Sie diese beiden Werte kennen, können Sie den Anteil des geschätzten Werts und des gemessenen Werts am Endergebnis ermitteln. Die Methode zur Berechnung der Varianz ist in verschiedenen Anwendungsszenarien unterschiedlich und muss entsprechend der tatsächlichen Situation bestimmt werden.

Python-Programmierung übt Kalman-Filterung


import numpy as np

# 模拟数据
t = np.linspace(1, 100, 100)
a = 0.5
position = (a * t ** 2) / 2

position_noise = position + np.random.normal(0, 120, size=(t.shape[0]))
import matplotlib.pyplot as plt

plt.plot(t, position, label='truth position')
plt.plot(t, position_noise, label='only use measured position')

# 初试的估计飞机的位置就直接用雷达测量的位置
predicts = [position_noise[0]]
position_predict = predicts[0]

predict_var = 0
odo_var = 120 ** 2  # 这是我们自己设定的位置测量仪器的方差,越大则测量值占比越低
v_std = 50  # 测量仪器的方差
for i in range(1, t.shape[0]):
    dv = (position[i] - position[i - 1]) + np.random.normal(0, 50)  # 模拟从IMU读取出的速度
    position_predict = position_predict + dv  # 利用上个时刻的位置和速度预测当前位置
    predict_var += v_std ** 2  # 更新预测数据的方差
    # 下面是Kalman滤波
    position_predict = position_predict * odo_var / (predict_var + odo_var) + position_noise[i] * predict_var / (
                predict_var + odo_var)
    predict_var = (predict_var * odo_var) / (predict_var + odo_var) ** 2
    predicts.append(position_predict)

plt.plot(t, predicts, label='kalman filtered position')

plt.legend()
plt.show()

Fügen Sie hier eine Bildbeschreibung ein

Referenz: Wenn Sie Ihr Studium fortsetzen möchten, wechseln Sie bitte hierher

Guess you like

Origin blog.csdn.net/perfectzxiny/article/details/119464027