Filtro di Kalman: come stimare da misure imprecise dove si trova un’auto e a che velocità va
Combinazione di due misure e guadagno di Kalman, il filtro come media progressiva, modello di stato, previsione e correzione, inseguimento di un’auto con il GPS e stima della velocità non misurata, taratura dei rumori Q e R, ottimalità ed estensioni non lineari.
Serie Basi di IA Parte 41 di 52
- Mappa dell’intelligenza artificiale: che cos’è ciascuna cosa e come si incastra tutto
- Breve storia dell’intelligenza artificiale: da Turing ai modelli linguistici
- Dati, modello, addestramento, inferenza: i concetti di base su un unico esempio
- Come leggere la notazione matematica: simboli, indici, sommatorie e quantificatori
- Insiemi e relazioni: i mattoncini con cui si costruiscono le definizioni nell’IA
- Funzioni e applicazioni: perché ogni modello di IA è una funzione
- Logica e dimostrazioni: le regole con cui si ragiona nell’IA
- Grafi e alberi: la struttura su cui poggiano la ricerca e le reti neurali
- Algebra lineare per l’apprendimento automatico: vettori, matrici e perché l’IA soprattutto moltiplica
- Derivate, gradiente e regola della catena: come un modello capisce in quale direzione imparare
- Discesa del gradiente: come impara un modello
- Che cos’è la probabilità: dal lancio di un dado agli assiomi di Kolmogorov
- Probabilità condizionata e teorema di Bayes: come cambiare una stima quando scopri qualcosa di nuovo
- Variabile aleatoria e funzione di ripartizione: una sola funzione che dice tutto sulla distribuzione
- Funzione di densità e funzione di massa: perché una variabile continua ha probabilità zero in un punto
- Valore atteso, varianza e covarianza: dove si trova una distribuzione, quanto è larga e che cosa è legato a che cosa
- Panoramica delle distribuzioni di probabilità: Bernoulli, binomiale, Poisson, uniforme, normale ed esponenziale
- Legge dei grandi numeri e teorema del limite centrale: perché le medie si comportano in modo così prevedibile
- Statistica e stima dei parametri: massima verosimiglianza, MAP e intervalli di confidenza
- Teoria dell’informazione: entropia, entropia incrociata e divergenza KL — da dove vengono le funzioni di perdita
- Ricerca nello spazio degli stati: BFS, DFS, UCS e A* con animazioni
- Giochi e avversari: minimax, potatura alfa-beta e Monte Carlo tree search
- Soddisfacimento di vincoli: backtracking, propagazione dei vincoli e AC-3 su un sudoku e una mappa delle regioni ceche
- Logica e sistemi basati sulla conoscenza: concatenazione in avanti e all’indietro, risoluzione e sistemi esperti
- Pianificazione: STRIPS, il mondo dei blocchi, euristiche dal rilassamento e pianificazione negli agenti IA
- Ricerca locale e ricottura simulata: un commesso viaggiatore tra i capoluoghi di regione cechi
- Algoritmi genetici: popolazione, incrocio, mutazione e selezione su uno zaino per l’escursione
- Strategie evolutive e programmazione genetica: dalla regola di un quinto alla legge di Keplero
- Ottimizzazione con colonie di formiche: come una traccia di feromone trova un percorso breve
- Ottimizzazione a sciame di particelle: inerzia, esperienza propria ed esperienza dello sciame
- Neuroevoluzione: evoluzione dei pesi e della forma delle reti neurali e l’algoritmo NEAT
- Insiemi fuzzy e funzioni di appartenenza: come scrivere «un po’ caldo»
- Logica fuzzy e probabilità: perché «un po’ caldo» non significa «probabilmente caldo»
- Logica fuzzy: t-norme, implicazioni e regole SE–ALLORA
- Controllo fuzzy: Mamdani e Sugeno, dal ventilatore al pendolo inverso su un carrello
- Clustering fuzzy: l’algoritmo fuzzy c-means e i punti tra i cluster
- Sistemi neuro-fuzzy (ANFIS): regole fuzzy che imparano dai dati
- Catene di Markov: matrice di transizione, distribuzione stazionaria e PageRank
- Modelli di Markov nascosti: l’algoritmo di Viterbi e il casinò disonesto
- Reti bayesiane: perché l’erba è bagnata e che cosa significa per l’irrigatore
- Filtro di Kalman: come stimare da misure imprecise dove si trova un’auto e a che velocità va
- Tipi di apprendimento automatico: supervisionato, non supervisionato, semi-supervisionato e altri
- Prompt, contesto e RAG: come dare a un modello le informazioni giuste
- Autoencoder variazionali (VAE): immagini nuove da uno spazio latente continuo
- Reti generative avversarie (GAN): il falsario contro il detective
- Modelli di diffusione: come il rumore puro diventa un’immagine
- Processi decisionali di Markov: stati, azioni, ricompense ed equazioni di Bellman
- Q-learning e DQN: imparare il valore delle azioni, dalla tabella alla rete neurale
- Policy gradient e PPO: imparare direttamente la politica
- Come funziona un agente IA: un modello linguistico in un ciclo con strumenti
- Programmare con agenti IA: incarico, test e controllo
- Valutazione e sicurezza dei sistemi di IA: come misurare e come sorvegliare
Programma completo della serie 52 di 83 argomenti pubblicati
- Come si combinano due misure imprecise e che cos’è il guadagno di Kalman.
- Come il filtro alterna la previsione secondo il modello e la correzione secondo la misura — e stima anche ciò che nessuno misura.
- Perché la scelta dei rumori Q e R conta così tanto e come se la cava il filtro con un mondo non lineare.
Utile sapere prima: Modelli di Markov nascosti: l’algoritmo di Viterbi e il casinò disonesto, Panoramica delle distribuzioni di probabilità: Bernoulli, binomiale, Poisson, uniforme, normale ed esponenziale
L’Apollo 11 volò verso la Luna con un computer di bordo che aveva meno memoria di una calcolatrice grafica di oggi. Eppure la navigazione doveva stimare di continuo, a partire da misure imprecise delle stelle, del radar e dei sensori inerziali, dove si trovava la navicella e a che velocità viaggiava. La aiutò un metodo che Rudolf Kálmán pubblicò nel 1960 e che Stanley Schmidt portò nella pratica per la NASA. Oggi il filtro di Kalman è in ogni cellulare che combina il GPS con l’accelerometro, in ogni drone e in ogni auto che mantiene da sola la corsia. Con questa parte si chiude il modulo sui modelli probabilistici.
Riprende le parti Modelli di Markov nascosti e Panoramica delle distribuzioni di probabilità.
1. Due misure imprecise valgono più di una
Cominciamo in modo semplice. Misuriamo due volte la distanza da un faro: una volta con uno strumento preciso — 100 m con un’incertezza (deviazione standard) di 5 m — e una volta con uno grossolano — 110 m con un’incertezza di 10 m. Qual è la stima migliore?
Teorema — combinazione di due stime normali
Se due stime indipendenti sono N(m1, σ12) e N(m2, σ22), la stima combinata è normale con
m = m1 + K (m2 − m1), σ2 = (1 − K) σ12, dove K = σ12 / (σ12 + σ22).
In modo equivalente 1/σ2 = 1/σ12 + 1/σ22: le precisioni si sommano.
Dimostrazione. La stima combinata ha una densità proporzionale al prodotto delle due densità (teorema di Bayes con la prima stima come distribuzione a priori e la seconda come verosimiglianza). Nell’esponente si sommano due funzioni quadratiche:
−(x − m1)2 / (2σ12) − (x − m2)2 / (2σ22) = −½ (1/σ12 + 1/σ22) x2 + (m1/σ12 + m2/σ22) x + cost.
Una densità con esponente −½ ax2 + bx è, dopo il completamento del quadrato, normale con varianza 1/a e valore atteso b/a. Da qui 1/σ2 = 1/σ12 + 1/σ22, cioè σ2 = σ12σ22 / (σ12 + σ22) = (1 − K) σ12, e m = σ2 (m1/σ12 + m2/σ22) = (1 − K) m1 + K m2 = m1 + K (m2 − m1). ∎
Prendi la prima stima e spostala verso la seconda — tanto più quanto più ti fidi della seconda. Il numero K ti dice quale fetta della differenza adottare. Il risultato è più preciso di ciascuna misura da sola; anche una misura grossolana aggiunge informazione.
m = m1 + K (m2 − m1), K = σ12 / (σ12 + σ22), σ2 = (1 − K) σ12
- m1, σ12
- la prima stima (blu nella figura) è il punto di partenza — da lì ci spostiamo; la sua varianza al numeratore di K dice: meno ci fidiamo della prima stima, più lontano da essa possiamo muoverci
- m2, σ22
- la seconda stima (ambra); entra nella formula solo attraverso la differenza m2 − m1 — se le due coincidessero, non ci sarebbe nulla da correggere. La sua varianza al denominatore di K riduce il guadagno: di una misura grossolana ci fidiamo poco
- K
- il guadagno di Kalman, un numero tra 0 e 1 — quale parte della differenza adottare. È la quota dell’incertezza della prima stima sull’incertezza totale, quindi la stima più precisa «tira» il risultato verso di sé
- m, σ2
- la stima combinata (verde); il fattore 1 − K < 1 garantisce che la nuova incertezza sia minore della prima — ogni misura, anche grossolana, aggiunge qualcosa
Qui K = 25 / (25 + 100) = 0,2: adottiamo un quinto della differenza e otteniamo 102 m con un’incertezza di √20 ≈ 4,5 m — meno dei 5 m dello strumento preciso. Questo numero K è il guadagno di Kalman, e il filtro intero non è altro che questo passo, ripetuto nel tempo.
Esempio — combinazione delle misure 100 ± 5 m e 110 ± 10 m passo per passo
Varianze: σ12 = 52 = 25, σ22 = 102 = 100.
Guadagno: K = 25 / (25 + 100) = 0,2.
Valore atteso: m = 100 + 0,2 · (110 − 100) = 102 m — lo stesso della media ponderata 0,8 · 100 + 0,2 · 110.
Varianza: σ2 = (1 − 0,2) · 25 = 20, σ = √20 ≈ 4,47 m.
Verifica tramite le precisioni: 1/25 + 1/100 = 0,04 + 0,01 = 0,05 = 1/20. ✓
2. Misurare più volte la stessa grandezza
Misuriamo la temperatura di una stanza con un termometro con incertezza di 2 °C, cinquanta volte di fila, e dopo ogni misura combiniamo il nuovo dato con la stima che abbiamo finora. Dopo cinquanta misure la stima è 19,895 °C — esattamente la media aritmetica di tutte le misure — e l’incertezza è 0,283 °C = 2/√50. Il filtro di Kalman per una grandezza che non cambia è quindi una semplice media progressiva. Diventa interessante quando la grandezza cambia nel tempo.
Teorema — il filtro per una grandezza costante è una media progressiva
Misuriamo una costante con uno strumento di varianza σ2 e partiamo da una stima così incerta che la prima misura la annulla del tutto (v0 → ∞). Allora dopo k misure vale
Kk = 1/k, mk = mk−1 + (1/k) (zk − mk−1) = (z1 + … + zk) / k, vk = σ2/k.
Dimostrazione per induzione. Per k = 1 si ha K1 = v0 / (v0 + σ2) → 1, quindi m1 = z1 e v1 = σ2. Se vale vk−1 = σ2/(k − 1), allora Kk = vk−1 / (vk−1 + σ2) = (1/(k − 1)) / (1/(k − 1) + 1) = 1/k e vk = (1 − 1/k) · σ2/(k − 1) = σ2/k. Se mk−1 è la media delle prime k − 1 misure, allora mk = ((k − 1) mk−1 + zk) / k è la media di tutte le k. ∎
Nella media di dieci numeri la decima misura pesa un decimo — ed è esattamente il peso che le dà anche il filtro. Più cose sai già, meno ti sposta una singola misura nuova. L’incertezza cala come 1/√k: per dimezzare l’errore ti servono quattro volte più misure.
Esempio — le prime tre misure di temperatura
Il nostro filtro parte da una stima di 0 °C con varianza 106 (incertezza di 1 000 °C — «non so niente»); la varianza della misura è 22 = 4.
1ª misura 23,098 °C: K1 = 106 / (106 + 4) ≈ 1, stima 23,098 °C, varianza 4,00.
2ª misura 21,967 °C: K2 = 4 / (4 + 4) = 1/2, stima 23,098 + ½ · (21,967 − 23,098) = 22,533 °C, varianza 2,00.
3ª misura 16,630 °C: K3 = 2 / (2 + 4) = 1/3, stima 22,533 + ⅓ · (16,630 − 22,533) = 20,565 °C, varianza 1,33 = 4/3.
Verifica: (23,098 + 21,967 + 16,630) / 3 = 20,565 °C — una semplice media. Dopo cinquanta misure la varianza è 4/50 = 0,08 e l’incertezza √0,08 ≈ 0,283 °C.
3. Il modello di stato
Definizione — modello di stato lineare
Uno stato nascosto xk ∈ ℝn evolve e una misura zk lo rileva con rumore:
xk = F xk−1 + wk, wk ~ N(0, Q), zk = H xk + vk, vk ~ N(0, R).
F è la matrice di transizione, H la matrice di misura, Q la covarianza del rumore di processo e R la covarianza del rumore di misura.
È il modello di Markov nascosto della parte precedente, solo che lo stato non è «dado onesto o dado truccato», ma un vettore di numeri — per esempio posizione e velocità. La fisica dice come evolve lo stato, più o meno (F); gli urti casuali e l’imprecisione del modello li riassume Q. Lo strumento vede solo una parte dello stato (H) e sbaglia di R.
Il nostro esempio: un’auto percorre una strada a una velocità più o meno costante di 15 m/s, ma ogni tanto il conducente frena un po’ o accelera — un’accelerazione casuale con deviazione standard di 0,5 m/s². Lo stato è (posizione, velocità), il passo è 1 s, quindi F = [[1, 1], [0, 1]]: la nuova posizione è la vecchia più la velocità. Il GPS misura solo la posizione, con un’incertezza di 8 m: H = [1, 0], R = 64.
Definizione — matrice di covarianza e distribuzione normale multivariata
Per un vettore aleatorio X ∈ ℝn con valore atteso μ = E[X] la matrice di covarianza è Σ = E[(X − μ)(X − μ)T], cioè Σij = cov(Xi, Xj). Sulla diagonale ci sono le varianze delle componenti, fuori dalla diagonale le covarianze; la matrice è simmetrica e semidefinita positiva.
La notazione X ~ N(μ, Σ) indica la distribuzione normale multivariata con densità proporzionale a exp(−½ (x − μ)T Σ−1 (x − μ)). Per una trasformazione lineare vale AX + c ~ N(Aμ + c, A Σ AT), e la somma di vettori normali indipendenti è normale con la somma delle covarianze.
La matrice di covarianza è «l’incertezza per più numeri insieme». Sulla diagonale c’è quanto siamo incerti sulla posizione e quanto sulla velocità. Fuori dalla diagonale c’è se gli errori vanno di pari passo: una covarianza positiva tra posizione e velocità significa «se abbiamo stimato l’auto troppo avanti, probabilmente le abbiamo attribuito anche una velocità troppo alta».
Esempio — da dove viene la matrice Q
Durante un passo di durata Δt sull’auto agisce un’accelerazione casuale costante a ~ N(0, q2). Dalle formule del moto uniformemente accelerato:
pk = pk−1 + Δt · vk−1 + ½ Δt2 a, vk = vk−1 + Δt · a.
Senza rumore è F = [[1, Δt], [0, 1]]. Il rumore è w = g a con il vettore g = (½ Δt2, Δt), e secondo la regola AΣAT vista sopra
Q = q2 g gT = q2 [[Δt4/4, Δt3/2], [Δt3/2, Δt2]].
Per Δt = 1 s e q = 0,5 m/s²: Q = 0,25 · [[0,25; 0,5], [0,5; 1]] = [[0,0625; 0,125], [0,125; 0,25]]. In un secondo, quindi, l’accelerazione casuale aggiunge un’incertezza di √0,0625 = 0,25 m nella posizione e di 0,5 m/s nella velocità — ed entrambi gli errori hanno lo stesso segno, per questo la covarianza è positiva. È esattamente questa la matrice nel codice più sotto.
4. Previsione e correzione
Algoritmo — filtro di Kalman
La stima è una distribuzione normale con valore atteso x̂ e covarianza P. A ogni passo:
Previsione: x̂− = F x̂, P− = F P FT + Q.
Correzione: K = P− HT (H P− HT + R)−1, x̂ = x̂− + K (z − H x̂−), P = (I − K H) P−.
Previsione: «secondo la fisica l’auto adesso dovrebbe essere qui» — e siccome la fisica non è perfetta, l’incertezza cresce un po’. Correzione: arriva la misura; la differenza tra misura e previsione (l’innovazione) viene adottata solo nella proporzione K, a seconda di chi ti ispira più fiducia. È la combinazione di due misure del primo capitolo — una «misura» è la previsione dal passo precedente, l’altra è il GPS. In più la covarianza P si ricorda come sono legati l’errore di posizione e quello di velocità, e grazie a questo il filtro corregge anche la velocità, che nessuno misura.
I colori nelle scomposizioni qui sotto corrispondono alle figure: la previsione (prima la «prima stima») in blu, la misura in ambra, il risultato in verde, il guadagno in viola.
x̂− = F x̂, P− = F P FT + Q
- x̂−, P−
- la previsione per questo passo, prima che arrivi la misura — fa la parte della «prima stima» nella combinazione di due misure
- F … FT
- il modello porta avanti la stima; l’incertezza si propaga con la regola AΣAT (per l’auto: una velocità incerta si traduce in un secondo in incertezza sulla posizione). Non basta FP, perché la covarianza è una grandezza quadratica — si moltiplica a sinistra e a destra
- Q
- il modello non è perfetto (il conducente frena un po’), quindi l’incertezza si aggiunge a ogni passo — senza Q, P scenderebbe a zero e il filtro smetterebbe di dare ascolto alle misure
K = P− HT (H P− HT + R)−1
- H P− HT
- l’incertezza della previsione tradotta nel linguaggio dello strumento (per l’auto solo la varianza della posizione) — corrisponde a σ12
- R
- la varianza della misura, corrisponde a σ22; la somma tra parentesi è la varianza dell’innovazione S — di quanto misura e previsione possono divergere per puro caso
- P− HT
- la covarianza dell’intero stato con la grandezza misurata; grazie a essa riceve un guadagno non nullo anche la velocità, che nessuno misura — l’errore di posizione e quello di velocità sono legati
- K
- il guadagno di Kalman, un numero per ogni componente dello stato; l’inversa al posto della divisione solo perché la misura può essere un vettore
x̂ = x̂− + K (z − H x̂−), P = (I − K H) P−
- x̂−, P−
- la previsione — il punto di partenza da cui ci spostiamo
- z
- la nuova misura (nella figura i punti ambra del GPS); l’unico punto da cui i dati entrano nella stima
- H
- converte la previsione dello stato in ciò che lo strumento dovrebbe mostrare; misura e stato non si possono sottrarre direttamente, perché il GPS vede solo la posizione, non la velocità
- K
- quale parte dell’innovazione z − Hx̂− adottare in ogni componente dello stato
- x̂, P
- la stima corretta (verde nella figura); il fattore I − KH riduce l’incertezza — tanto più quanto maggiore è la parte della misura che abbiamo adottato
import numpy as np
F = np.array([[1, 1], [0, 1]]) # posizione += velocità
H = np.array([[1, 0]]) # misuriamo solo la posizione
Q = 0.5**2 * np.array([[1/4, 1/2], [1/2, 1]]) # accelerazione casuale
R = np.array([[8**2]]) # GPS ± 8 m
def kalman(mereni, x, P):
for z in mereni:
x, P = F @ x, F @ P @ F.T + Q # previsione
K = P @ H.T @ np.linalg.inv(H @ P @ H.T + R)
x = x + K @ (z - H @ x) # correzione secondo l’innovazione
P = (np.eye(2) - K @ H) @ P
yield x, P
Esempio — i primi due passi del filtro sui dati dell’auto
Avvio. La prima misura del GPS è z1 = 8,44 m. Il filtro parte dalla posizione 8,44 m, velocità 0 e una grande incertezza P0 = [[100; 0], [0; 100]] (10 m e 10 m/s). La correzione con la stessa misura non cambia la posizione (l’innovazione è 0), ne riduce solo la varianza: K = 100 / (100 + 64) = 0,610, P11 = (1 − 0,610) · 100 = 39,02.
Previsione per il 2° secondo. x̂− = (8,44 + 0; 0) = (8,44; 0,00). La covarianza FPFT aggiunge alla varianza della posizione la varianza della velocità (posizione += velocità):
P− = [[39,02 + 100 + 0,0625; 100 + 0,125], [100 + 0,125; 100 + 0,25]] = [[139,09; 100,13], [100,13; 100,25]].
Correzione. Misura z2 = 23,23 m, innovazione y = 23,23 − 8,44 = 14,78 m, la sua varianza S = 139,09 + 64 = 203,09.
K = (139,09; 100,13) / 203,09 = (0,685; 0,493),
x̂ = (8,44 + 0,685 · 14,78; 0 + 0,493 · 14,78) = (18,57 m; 7,29 m/s).
Dopo due misure il filtro «sa» che l’auto si muove, anche se nessuno ha misurato la velocità: l’ha stimata in 7,3 m/s (quella reale è 13,9 m/s). Il guadagno per la velocità è non nullo solo grazie alla covarianza 100,13 fuori dalla diagonale. Perché solo la metà? Le misure hanno un rumore di 8 m, quindi il filtro non prende ancora del tutto sul serio una differenza di 15 m — nei secondi successivi la velocità si assesta.
5. Il filtro segue l’auto
Un minuto di guida, una misura del GPS al secondo. In questo tempo l’auto percorre poco meno di un chilometro, quindi in un grafico della posizione il rumore si perderebbe. Disegniamo perciò di quanto l’auto è avanti o indietro rispetto a una marcia a esattamente 15 m/s:
Le misure del GPS si discostano dalla posizione reale in media di 8,3 m (dal decimo secondo, quando il filtro è ormai avviato). La stima del filtro solo di 4,9 m — il 41 % in meno. E la velocità, che nessun sensore misura, la stima con un errore di 0,8 m/s: il filtro la ricava da come cambia la posizione. All’inizio non conosce la velocità (parte da zero), ma in pochi secondi la aggancia. La fascia ±2σ è l’incertezza onesta del filtro — la posizione reale ci sta dentro nel 95 % dei passi, esattamente come deve.
Definizione — errore medio (RMSE) e fascia ±2σ
L’«errore medio» in questa parte è la radice dell’errore quadratico medio (RMSE) sui passi k = 10, …, 59 (N = 50):
RMSE = √( (1/N) ∑k (x̂k − xk)2 ),
dove xk è la posizione reale e x̂k la stima (o la misura stessa). I quadrati penalizzano gli errori grandi più di quelli piccoli e la radice riporta il risultato in metri. Per il solo GPS l’RMSE dovrebbe venire intorno a σ = 8 m — ed è venuto 8,3 m.
La fascia ±2σ è l’intervallo x̂k ± 2√Pk,11. Per una distribuzione normale l’intervallo μ ± 2σ contiene una probabilità di 0,9545; se il filtro ha calcolato correttamente l’incertezza P, la realtà deve cadere nella fascia in circa il 95 % dei passi.
Dopo pochi passi il guadagno di Kalman si stabilizza su K ≈ (0,30; 0,05): di ogni innovazione il filtro adotta il 30 % nella posizione e il 5 % (0,05 m/s per metro di innovazione) nella velocità. Su 50 guide simulate l’errore del filtro è in media il 55 % dell’errore del solo GPS.
Teorema — guadagno stazionario
Nelle formule per P−, K e P non compaiono le misure z — covarianza e guadagno si possono calcolare in anticipo. Unendo previsione e correzione si ottiene una ricorrenza (l’equazione di Riccati discreta)
P−k+1 = F (P−k − P−kHT (HP−kHT + R)−1 HP−k) FT + Q.
Per F, H, Q, R costanti che soddisfano le condizioni usuali (il sistema è osservabile — da una serie di misure si può ricavare l’intero stato — e il rumore Q agisce su tutte le sue componenti) la successione converge a un unico punto fisso indipendentemente dalla P0 iniziale; il guadagno converge allora a un valore stazionario.
Per l’auto: dopo 60 passi K = (0,297; 0,052) e P = [[19,04; 3,35], [3,35; 1,29]], cioè il filtro si attribuisce una precisione di √19,04 ≈ 4,4 m nella posizione e √1,29 ≈ 1,1 m/s nella velocità.
All’inizio il filtro non sa quasi niente e si beve ogni misura (guadagno 0,61, poi 0,68). Man mano che la stima diventa più precisa, il guadagno cala — finché si stabilizza dove l’incertezza aggiunta a ogni passo dal rumore Q è grande quanto quella che toglie la misura. Da lì in poi non cambia più nulla, ed è per questo che nei dispositivi semplici il guadagno spesso si calcola una volta in anticipo e poi il filtro moltiplica soltanto per numeri fissi.
6. Di chi fidarsi: Q e R
Il filtro ha bisogno di conoscere Q e R. La precisione del GPS di solito la indica il produttore, ma il rumore di processo è più difficile da stimare. Che cosa succede se dai al filtro valori diversi da quelli dei dati?
| Rumore di processo che il filtro presume (m/s²) | 0,01 | 0,1 | 0,5 (reale) | 2 | 10 |
|---|---|---|---|---|---|
| errore di posizione (m) | 9,29 | 5,88 | 4,86 | 5,67 | 7,08 |
| errore di velocità (m/s) | 1,19 | 0,86 | 0,79 | 1,53 | 5,19 |
Quando il filtro crede che l’auto vada a una velocità quasi esattamente costante (Q piccolo), si aggrappa al suo modello e reagisce tardi all’accelerazione reale — l’errore di posizione è persino maggiore che con il solo GPS. Quando invece si aspetta cambiamenti bruschi (Q grande), non si fida del modello e copia le misure rumorose. Il risultato migliore lo ottiene con il valore reale 0,5. Lo stesso vale per R: con un’incertezza del GPS di 2, 8 e 30 m l’errore di posizione risulta 5,66; 4,86 e 5,39 m.
7. Perché proprio così
Teorema — ottimalità del filtro di Kalman
Se il modello è lineare e i rumori sono normali, la distribuzione N(x̂k, Pk) è esattamente la distribuzione a posteriori dello stato P(xk | z1, …, zk). Senza l’ipotesi di normalità il filtro di Kalman è la migliore stima lineare nel senso dell’errore quadratico medio.
Il filtro di Kalman è il teorema di Bayes applicato più e più volte. La previsione è la distribuzione a priori, la misura è la verosimiglianza, la correzione è la distribuzione a posteriori. La distribuzione normale ha la rara proprietà che il prodotto di normali è di nuovo normale — e così basta ricordarsi valore atteso e covarianza invece dell’intera funzione. È l’algoritmo forward dei modelli di Markov nascosti per uno stato continuo.
p(xk | z1:k) ∝ p(zk | xk) · ∫ p(xk | xk−1) p(xk−1 | z1:k−1) dxk−1
- ∫ p(xk | xk−1) p(xk−1 | z1:k−1) dxk−1
- la previsione (distribuzione a priori): lo stato precedente non lo conosciamo con esattezza, quindi facciamo la media della transizione su tutti gli stati precedenti possibili, pesati in base a ciò in cui credevamo la volta prima. L’integrale è l’analogo continuo della somma ∑i nell’algoritmo forward degli HMM. Per un modello lineare e una distribuzione normale risulta N(Fx̂, FPFT + Q)
- p(zk | xk)
- la verosimiglianza della nuova misura — quanto bene ciascun luogo spiegherebbe ciò che ha mostrato il GPS; dal modello è N(zk; Hxk, R)
- p(xk | z1:k)
- la distribuzione a posteriori dopo tutte le misure; «∝» perché la costante di normalizzazione p(zk | z1:k−1) non ci serve — il prodotto di due densità normali lo calcola fino in fondo la dimostrazione del teorema all’inizio della parte, e ne esce esattamente il passo di correzione
8. Quando il mondo non è lineare
- Il filtro di Kalman esteso (EKF) linearizza il modello non lineare a ogni passo tramite la derivata — così faceva anche la navigazione dell’Apollo.
- Il filtro di Kalman unscented (UKF), invece delle derivate, fa passare attraverso il modello pochi punti scelti con cura e da essi calcola il nuovo valore atteso e la nuova covarianza.
- Il filtro a particelle rinuncia del tutto alla distribuzione normale: rappresenta la stima con migliaia di campioni («particelle») che si muovono secondo il modello e vengono ripesati secondo le misure. Gestisce anche una stima con più picchi, per esempio «il robot è o in cucina o in soggiorno».
- Dove si usa: fusione di GPS, accelerometro e giroscopio nei cellulari, navigazione di aerei, droni e razzi, tracciamento di oggetti con il radar, stima della posizione delle auto autonome e perfino smussamento di serie storiche economiche.
Definizione — filtro di Kalman esteso (EKF)
Il modello è non lineare: xk = f(xk−1) + wk, zk = h(xk) + vk. L’EKF calcola il valore atteso con le funzioni non lineari e la covarianza con le loro matrici jacobiane (matrici delle derivate parziali) nella stima attuale:
Fk = ∂f/∂x |x̂k−1, Hk = ∂h/∂x |x̂−k,
x̂− = f(x̂), P− = Fk P FkT + Q, x̂ = x̂− + K (z − h(x̂−)), K e P come prima, con Hk al posto di H.
Esempio: un radar misura la distanza h(px, py) = √(px2 + py2); allora Hk = (px/d, py/d) con d = √(px2 + py2) — il versore in direzione del bersaglio. Per un bersaglio in (300, 400) m si ha d = 500 m e Hk = (0,6; 0,8). Il risultato non è più la distribuzione a posteriori esatta, ma solo una sua approssimazione; tanto peggiore quanto più il modello è curvo nell’intervallo dell’incertezza.
9. Riepilogo
- Due misure normali indipendenti si combinano con una media ponderata; le precisioni si sommano e il peso K è il guadagno di Kalman.
- Il filtro di Kalman ripete una previsione secondo il modello e una correzione secondo la misura; per una grandezza costante è una media progressiva.
- Per l’auto ha ridotto l’errore di posizione da 8,3 m (GPS) a 4,9 m e ha stimato anche la velocità non misurata con un errore di 0,8 m/s; la fascia ±2σ ha coperto la realtà nel 95 % dei passi.
- Il risultato dipende da Q e R: troppa fiducia nel modello reagisce in ritardo, troppo poca copia il rumore.
- Per un modello lineare con rumore normale il filtro è un aggiornamento bayesiano esatto; il mondo non lineare lo gestiscono EKF, UKF e filtri a particelle.
Con questa parte si chiude il modulo sui modelli probabilistici. Vuoi provarlo con mano? Chiedi a un agente IA di scrivere un filtro di Kalman per i dati dell’accelerometro del tuo telefono e prova a vedere quanto bene stima di quanto hai spostato il telefono.
La vedi diversamente? Scrivi a support@coden-app.com.