Filtr Kalmana dla pozycji i prędkości: wprowadzenie szacunków prędkości

24

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(xkxk1)/dtHH=[1   0]xkxkx˙k

xk=(xkx˙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 - 1kx^kk1xk1x˙k1ak1xkx^a

x^k=xk1+x˙k1dt+12adt2

Oznacza to, że w chwili k podaje się pomiar x˙^k prędkości

x˙^k=x˙k1+adt=2x^kxk1dtx˙k1

Wszystkie wielkości po prawej stronie tego równania (tj. x^k , xk1 i x˙k1 ) są zwykle rozkładowymi zmiennymi losowymi o znanych średnich i odchyleniach standardowych , więc macierz R dla wektora pomiarowego

x^k=(x^kx˙^k)

można obliczyć. Czy jest to prawidłowy sposób wprowadzania szacunków prędkości do procesu?

Stochastycznie
źródło
2
Nie przejrzałem wszystkich twoich obliczeń. Jednak mówiąc o przykładzie z Wikipedii, wydajesz się być nieco zdezorientowany co do jego struktury. Masz rację, że tylko pozycja jest mierzona. Jednak stosuje się tak zwany model „stałej prędkości”. Oznacza to, że prędkość jest uważana za stałą w macierzy przejścia stanu.
Jason R
3
Zmiany prędkości modeluje się za pomocą macierzy szumów procesowych. Dlatego z założenia zakładasz, że prędkość zmieni się losowo z pewną określoną kowariancją. Zaskakujące jest to, że często działa dobrze. W ten sposób często stosuje się szum procesowy o jedną pochodną powyżej najwyższej pochodnej o zmiennej zmiennej stanu. Na przykład, jeśli włączyłeś przyspieszenie do swojego modelu, możesz mieć losowy komponent szarpnięcia zawarty w hałasie procesu.
Jason R
@JasonR z modelem wikipedii (zakładając zerową kowariancję początkową między pozycją a prędkością), oszacowanie prędkości jest zawsze jej wartością początkową (jak mówisz, modelem „stałej prędkości”). Jednak wariancja prędkości rośnie monotonicznie przez hałas procesowy i nie ma żadnych pomiarów, które mogłyby ją zmniejszyć. Jaka jest przewaga tego nad modelem, który modeluje tylko pozycję i przyjmuje stałą prędkość?
Stochastycznie
2
Wariancja oszacowania prędkości nie powinna wzrastać monotonicznie. Szum procesowy po prostu wprowadza składową stochastyczną do równania przejścia stanu, pozwalając wyrazić pewną niepewność co do tego, w jaki sposób stan systemu będzie ewoluował od czasu do czasu. Jeśli nie uwzględnisz szumu procesowego, twój filtr naprawdę będzie generował stałą prędkość. Prawdopodobnie nie tego chcesz.
Jason R
Cóż, @JasonR, jeśli spojrzysz na model wikipedii, zobaczysz, że to monotynicznie rosnąca wariancja prędkości jest tym, co ci daje!
Stochastycznie,

Odpowiedzi:

24

Czy jest to prawidłowy sposób wprowadzania szacunków prędkości do procesu?

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

xk+1=xk+x˙kΔt+12a(Δt)2x˙k+1=x˙k+aΔt

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

xk=(xkx˙k)
ak
xk+1=(1  Δt0  1)xk+((Δt)22Δt)ak
ak

To daje inną od poprzedniej wersji, ale macierze i powinny być takie same.F HGFH


Jeśli zaimplementuję to w scilab(przepraszam, brak dostępu do Matlaba), wygląda to tak:

// Signal Model
DeltaT = 0.1;
F = [1 DeltaT; 0 1];
G = [DeltaT^2/2; DeltaT];
H = [1 0];

x0 = [0;0];
sigma_a = 0.1;

Q = sigma_a^2;
R = 0.1;

N = 1000;

a = rand(1,N,"normal")*sigma_a;

x_truth(:,1) = x0;
for t=1:N,
    x_truth(:,t+1) = F*x_truth(:,t) + G*a(t);
    y(t) = H*x_truth(:,t) + rand(1,1,"normal")*sqrt(R);
end

Następnie można zastosować równań filtru Kalmana do tego (hałaśliwe pomiarów).y

// Kalman Filter
p0 = 100*eye(2,2);

xx(:,1) = x0;
pp = p0;
pp_norm(1) = norm(pp);
for t=1:N,
    [x1,p1,x,p] = kalm(y(t),xx(:,t),pp,F,G,H,Q,R);
    xx(:,t+1) = x1;
    pp = p1;
    pp_norm(t+1) = norm(pp);
end

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!).yyy

Następnie kolejne wykresy pokazują wynik.

Działka 1 : i w funkcji czasu.x kyxk

wprowadź opis zdjęcia tutaj

Wykres 2 : Powiększony widok pierwszych kilku próbek:

wprowadź opis zdjęcia tutaj

Fabuła 3 : Coś, czego nigdy nie dostaniesz w prawdziwym życiu, prawdziwa pozycja w porównaniu z oceną stanu pozycji.

wprowadź opis zdjęcia tutaj

Fabuła 4 : Coś, czego nigdy nie uzyskasz w prawdziwym życiu, prawdziwa prędkość w porównaniu z estymacją stanu prędkości.

wprowadź opis zdjęcia tutaj

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.

wprowadź opis zdjęcia tutaj

Wykres 6 : Wykresy błędu między prawdziwą pozycją a prędkością oraz ich oszacowania.

wprowadź opis zdjęcia tutaj

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+1Pk=0Pk+1=QKk+1

Kk+1=(12/dt)

Oznacza to, że powstaje procedura aktualizacji Kalmana

x^k+1=Fk+1xk+Kk+1(zk+1Hk+1Fk+1xk)=(xk+x˙kdtx˙k)+(12/dt)(xk+1(xk+x˙kdt))=(xk+12(xk+1xk)/dtx˙k)

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.(xkxk1)/dt

Peter K.
źródło
Dzięki za dotychczasową pomoc. Moje pierwotne pytanie zawierało pewne nieporozumienia, więc próbowałem je ponownie ukierunkować i próbowałem odpowiedzieć na twoje pytanie dotyczące z_k.
Stochastycznie
1
dzięki vm za wszystkie twoje wysiłki :-). Twoja praca zachęciła mnie do zrobienia trochę matematyki, którą podjąłem do twojej odpowiedzi, mam nadzieję, że nie masz nic przeciwko. W każdym razie jestem teraz w 100% przekonany, że standardowa metoda jest dobra, ponieważ widzę tam formuły prędkości. Jeszcze raz dziękuję
Stochastically
Cieszę się, że mogę pomóc! Nie ma problemu z dodaniem do odpowiedzi.
Peter K.