Strona głównaArtykułyOszczacalność Stanu

Filtrowanie Kalmana

GPS ulega dryfom, IMU gromadzą błędy – filtr Kalmana to matematyka, która cicho łączy je w jedną, niezawodną wycenę.

mysimulator teamZaktualizowano — czerwiec 2026≈ 10 min czytania▶ Otwórz symulację

Dwa niedoskonałe źródła, jedno lepsze rozwiązanie

Załóżmy, że chcesz poznać dokładną pozycję i prędkość drona. Masz dwie metody odgadywania, ani jedna z nich nie jest niezawodna sama w sobie. Twój model może powiedzieć Ci, na podstawie ostatniego znanego stanu i wprowadzonych przez Ciebie sterowań, gdzie dron powinien się teraz znajdować – dokładne na krótkich dystansach, ale powoli dryfuje w miarę kumulowania się nieujętych prądów wiatru i niedoskonałości silników. Twój czujnik – GPS, np. – mierzy pozycję bezpośrednio, ale jest szumowy (zwykle ±3 m) i aktualizuje się wolno (1-10 Hz). Żadne z tych źródeł samo w sobie nie jest wystarczające. Filtr Kalmana, opracowany przez Rudolfa Kálmana w 1960 roku i słynnie wykorzystywany do nawigacji Apolla na Księżyc, to matematycznie optymalny sposób na połączenie obu: wycenia go w odwrotnej proporcji do aktualnego stopnia niepewności, ufając czujnikowi bardziej, gdy model się przesunął, i modelowi bardziej, gdy czujnik jest szumowy.

demo na żywo · powiązana symulacja● LIVE

Podstawy modelu stanowego

Liniowy układ dynamiczny opisuje się dwoma równaniami – jednym definiującym ewolucję stanu i drugim określającym, jak ten stan jest obserwowany:

x_k = A · x_(k-1) + B · u_k + w_k    // process model
y_k = C · x_k + v_k                   // measurement model

x  state vector (position, velocity, ...)     A  state-transition matrix
B  control-input matrix; u  control input     C  observation matrix
w ~ N(0, Q)  process noise                    v ~ N(0, R)  measurement noise

1D constant-velocity example (state = [position, velocity]):
  A = [[1, dt], [0, 1]]      C = [1, 0]   // we only measure position

Cykl predykcji-aktualizacji

W każdym kroku czasu wykonuje się dwie fazy sekwencyjnie. Predykcja projektuje stan z góry, wykorzystując model sam w sobie, i pozwala jej niepewności rosnąć: x̂⁻ₖ = A·x̂ₖ₋₁ + B·uₖ, a macierz błędu rozkładu P⁻ₖ = A·Pₖ₋₁·Aᵀ + Q rośnie dzięki szumowi procesowemu Q. Aktualizacja następnie uwzględnia nową pomiarową i oblicza wygranej współczynnik Kalmana K = P⁻·Cᵀ·(C·P⁻·Cᵀ + R)⁻¹, koryguje oszacowanie stanu używając reszty pomiędzy pomiarem a predykcją, x̂ₖ = x̂⁻ₖ + K·(yₖ − C·x̂⁻ₖ), i skraca macierz rozkładu odpowiednio, Pₖ = (I − K·C)·P⁻ₖ. Termin (yₖ − C·x̂⁻ₖ) nazywany jest innowacją – czyli tym, jak bardzo filtr zaskoczony jest nowym odczytem – a K decyduje, ile tej niespodzianki w ogóle uwierzyć.

Odczyt wygranej

W przypadku skalarnym wygrana upada do pojedynczego, bardzo czytelnego stosunku:

K = P⁻ / (P⁻ + R)

K → 1 wraz z wzrostem P⁻/R do nieskończoności (model bardzo niepewny, pomiar dokładny) → ufaj czujnikowi

K → 0 wraz ze spadkiem P⁻/R do zera (model dokładny, czujnik szumowy) → ufaj modelowi

Przykład: niepewność modelu P⁻ = 9 m², wariancja GPS R = 4 m²

K = 9 / (9 + 4) ≈ 0.69 → skłony się głównie do odczytu z GPS

Przydatne uproszczenie praktyczne: gdy A, C, Q i R pozostają stałe w czasie, kowariancja P konwerguje do ustalonej wartości bezwzględnej po jedynie kilku iteracjach, a można ją obliczyć offline – istotna oszczędność dla systemów wbudowanych, które nie mogą sobie pozwolić na wykonywanie odwrotności macierzy w każdym cyklu.

K = P⁻ / (P⁻ + R)

K → 1   as P⁻/R → ∞   (model very uncertain, sensor accurate)  → trust sensor
K → 0   as P⁻/R → 0   (model accurate, sensor noisy)           → trust model

Example: model uncertainty P⁻ = 9 m², GPS variance R = 4 m²
K = 9 / (9 + 4) ≈ 0.69  →  lean mostly toward the GPS reading

Kiedy świat nie jest liniowy: EKF i UKF

Standardowy filtr zakłada, że zarówno A jak i C są macierzami stałymi, co powoduje naruszenie, gdy dynamika staje się naprawdę nieliniowa – robot, którego kierunek zmiany zmienia jego prędkość sinusoidalnie, lub czujnik opartego na kącie. Rozszerzony Filtr Kalmana (EKF) zachowuje tę samą strukturę predykcji-aktualizacji, ale w każdym kroku wykorzystuje ich macierze Jacobiego F = ∂f/∂x i H = ∂h/∂x, aby zrelinearizować funkcje nieliniowe f i h, obliczone przy aktualnej szacowanej wartości – jest to domyślny wybór w większości systemów robotyki, w tym pakietu robot_localization ROS oraz typowych magistral SLAM. Gdy nieliniowość jest wystarczająco poważna, aby pierwszorzędne przybliżenie Jacobiego zaczęło się rozbiegać, Filtr Kalmana Nieprzeskalowany (UKF) propaguje mały deterministyczny zestaw punktów próbnych – punkty sigma – bezpośrednio przez prawdziwą funkcję nieliniową, przechwytując dystrybucję z dokładnością trzeciego rzędu bez konieczności obliczania Jacobiego.

Gdzie faktycznie działa

Oprócz sterowania statkami kosmicznymi, ten sam pętla predykcji-aktualizacji pojawia się niemal wszędzie tam, gdzie potrzebne jest łączenie danych z czujników generujących szum z modelem: fuzja GPS i IMU w smartfonach i dronach, śledzenie celów radarowych, wieloobiektowe śledzenie w kanałach przetwarzania obrazu takich jak SORT i DeepSORT (gdzie filtr Kalmana przewiduje ruch każdej ramki ogranicznika), szacowanie ukrytej zmienności z szumów finansowych szeregów czasowych oraz nawet usuwanie szumów z sygnału mowy z mikrofonu. Jego trwały urok polega na tym, że nie wymaga danych treningowych, działa w zamknięciu poprzez kilka operacji macierzowych na krok i jest dowodem optymalnego estymatora liniowego pod warunkiem szumu gaussowskiego – właściwości, które sprawiają, że trudno go przebić w zastosowaniach wbudowanych i w czasie rzeczywistym, nawet w erze alternatyw opartych na uczeniu maszynowym.

Frequently asked questions

Co w rzeczywistości kontroluje wygrzbieżanie Kalmana?

Wygrzbieżanie Kalmana (K) określa, jak dużą część reszty pomiędzy prognozą a nowym pomiarem jest wprowadzana do zaktualizowanej estymacji. W przypadku estymacji skalarnej K = P/(P+R): gdy niepewność modelu (P) jest duża w stosunku do szumu pomiarowego (R), K zbliża się do 1 i filtr ufa czujnikowi; gdy czujnik jest bardziej szumny niż model jest niepewny, K zbliża się do 0 i filtr ufa prognozie.

Dlaczego standardowy filtr Kalmana nie może obsłużyć obracającego się robota lub nieliniowego modelu czujnika?

Standardowy filtr Kalmana zakłada, że zarówno funkcje przejścia stanu, jak i funkcje pomiarowe są macierzami liniowymi. Obracający się robot, czujnik opartego na kącie lub jakiekolwiek relacje trygonometryczne naruszają to założenie. Rozszerzony Filtr Kalmana liniaryzuje funkcje nieliniowe za pomocą macierzy Jacobiego w każdym kroku; Unscented Kalman Filter zamiast tego propaguje małą, deterministyczną zbiór punktów próbki przez prawdziwą funkcję nieliniową, unikając macierzy Jakobowych i utrzymując dokładność na wyższym poziomie.

Czy filtr Kalmana nadal jest istotny w świetle nowoczesnych metod uczenia maszynowego?

Tak — pozostaje standardowym narzędziem, gdziekolwiek potrzebujesz szybkiego, udowodnionelnie optymalnego (dla systemów liniowo-gausańskich) i interpretowalnego estymatora o minimalnym śladzie obliczeniowym, od fuzji GPS/IMU w urządzeniach brzegowych po śledzenie wieloobiektów w potokach przetwarzania obrazu, takich jak SORT. Modele uczenia maszynowego mogą przewyższać go, gdy dynamika jest bardzo nieliniowa i dostępna jest duża ilość danych treningowych, ale filtr Kalmana nie wymaga danych treningowych i komfortowo działa na mikrokontrolerach.

Wypróbuj na żywo

Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz the simulation i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.

▶ Otwórz symulację the simulation

Co znalazłeś?

Dodaj kroki odtworzenia (opcjonalnie)