Dziękuję wszystkim, którzy opublikowali wczoraj komentarze / odpowiedzi na moje zapytanie ( Wdrożenie filtru Kalmana dla pozycji, prędkości, przyspieszenia ). Patrzyłem na to, co było zalecane, a w szczególności na (a) przykład Wikipedii na temat jednowymiarowej pozycji i prędkości, a także na innej stronie internetowej, która rozważa podobną rzecz .
Aktualizacja 26 kwietnia 2013 r . : pierwotne pytanie zawierało pewne błędy związane z faktem, że nie zrozumiałem poprawnie przykładu wikipedii na temat jednowymiarowej pozycji i prędkości . Dzięki mojemu lepszemu zrozumieniu tego, co się dzieje, teraz przeredagowałem pytanie i skoncentrowałem je bardziej precyzyjnie.
Oba przykłady, o których mowa w powyższym akapicie wstępnym, zakładają, że mierzona jest tylko pozycja. Jednak żaden przykład nie ma żadnego rodzaju obliczeń dla prędkości. Na przykład w Wikipedii podano macierz jako , co oznacza, że wprowadzana jest tylko pozycja. Koncentrując się na przykładzie Wikipedii, wektor stanu filtru Kalmana zawiera pozycję i prędkość , tj.H H = [ 1 0 ] x k x k ˙ x k
Załóżmy, że miarą pozycji w czasie jest \ hat {x} _k . Zatem jeśli pozycja i prędkość w czasie k-1 wynosiły x_ {k-1} i \ dot {x} _ {k-1} , a jeśli a jest stałym przyspieszeniem, które stosuje się w przedziale czasu od k-1 do k , z pomiaru \ hat {X} możliwe jest wywnioskowanie wartość stosując wzórx k k - 1 x k - 1 ˙ x k - 1 k - 1x
Oznacza to, że w chwili podaje się pomiar prędkości
Wszystkie wielkości po prawej stronie tego równania (tj. , i ) są zwykle rozkładowymi zmiennymi losowymi o znanych średnich i odchyleniach standardowych , więc macierz dla wektora pomiarowego
można obliczyć. Czy jest to prawidłowy sposób wprowadzania szacunków prędkości do procesu?
źródło
Odpowiedzi:
Jeśli odpowiednio wybierzesz swój stan, prognozy prędkości będą dostępne „za darmo”. Zobacz wyprowadzenie modelu sygnału poniżej (dla prostego przypadku 1-D, na który patrzyliśmy).
Model sygnału, weź 2
Tak więc naprawdę musimy uzgodnić model sygnału, zanim będziemy mogli przejść do przodu. Z twojej edycji wygląda na to, że twój model pozycji, , to:xk
Jeśli nasz stan jest taki jak przedtem: to równanie aktualizacji stanu jest po prostu: gdzie teraz jest normalnie rozproszonym przyspieszeniem. xk+1=( 1 Δ t 0 1 )xk+( ( Δ t ) 2
To daje inną od poprzedniej wersji, ale macierze i powinny być takie same.F HG F H
Jeśli zaimplementuję to w
scilab
(przepraszam, brak dostępu do Matlaba), wygląda to tak:Następnie można zastosować równań filtru Kalmana do tego (hałaśliwe pomiarów).y
Mamy więc nasze głośne pomiary i zastosowaliśmy do nich filtr Kalmana i użyliśmy tego samego modelu sygnału do wygenerowania tak jak robimy to, aby zastosować filtr Kalmana (czasami całkiem duże założenie!).yy y
Następnie kolejne wykresy pokazują wynik.
Działka 1 : i w funkcji czasu.x ky xk
Wykres 2 : Powiększony widok pierwszych kilku próbek:
Fabuła 3 : Coś, czego nigdy nie dostaniesz w prawdziwym życiu, prawdziwa pozycja w porównaniu z oceną stanu pozycji.
Fabuła 4 : Coś, czego nigdy nie uzyskasz w prawdziwym życiu, prawdziwa prędkość w porównaniu z estymacją stanu prędkości.
Wykres 5 : Norma macierzy kowariancji stanu (coś, co zawsze należy monitorować w prawdziwym życiu!). Zauważ, że bardzo szybko zmienia swoją początkową bardzo dużą wartość na coś bardzo małego, więc pokazałem tylko kilka pierwszych próbek.
Wykres 6 : Wykresy błędu między prawdziwą pozycją a prędkością oraz ich oszacowania.
Jeśli przestudiujesz przypadek, w którym pomiary pozycji są dokładne, okaże się, że równania udman Kalmana dają dokładne wyniki ZARÓWNO pozycji i prędkości. Matematycznie łatwo jest zrozumieć, dlaczego. Używając tego samego zapisu co w artykule na Wikipedii , dokładne pomiary oznaczają, że . Jeśli przyjmiesz, że początkowa pozycja i prędkość są znane, więc , to i macierz wzmocnienia Kalmana podajeP k =0 P - k + 1 = Q K k + 1zk+1=xk+1 Pk=0 P−k+1=Q Kk+1
Oznacza to, że powstaje procedura aktualizacji Kalmana
Jak widać, wartość prędkości jest podana dokładnie przez formułę, którą proponujesz zastosować do oszacowania prędkości. Więc chociaż nie widziałeś żadnego rodzaju obliczeń dla prędkości, w rzeczywistości jest tam ukryty.(xk−xk−1)/dt
źródło