Filtr Kalmana
Filtr Kalmana–Bucy jest obserwatorem stanu. Przy założeniu, że zakłócenia działające na obiekt są gaussowskie, zapewnia on optymalną estymatę. Teoretyczny opis filtru można znaleźć w [10]. My zaprojektujemy filtr, używając biblioteki PyControl [11]. Wszystkie obliczenia znajdują się w jupiter/LQG for 3D printed model.ipynb [12].
Jednak w pierwszej kolejności zdyskretyzujemy model, czyli przejdziemy z modelu z czasem ciągłym opisanym równaniem różniczkowym na model z czasem dyskretnym opisanym równaniem różnicowym. Skorzystamy z metody Eulera.
Aby wykonać obliczenia, najpierw musimy utworzyć obiekt sys. Definiujemy go poprzez cztery macierze – listing 1. Odpowiadają one naszym równaniom różniczkowym.
Listing 1. Obiekt sys zdefiniowany poprzez cztery macierze
A = [[0, 1, 0], [0, 0, 9.74], [0, 0, -1/0.051]]
B = [[0], [0], [1/0.051]]
C = [[1, 0, 0]]
D = [[0]]
Ts = 0.05
sys = control.ss(A, B, C, D)
I zawierają zidentyfikowane wcześniej parametry. Dyskretyzację wykonujemy za pomocą funkcji:
dsys = control.sample_system(sys, Ts, method=’euler’)
Zwraca ona nowy obiekt dsys, zawierający zdyskretyzowany model.