Filtro Kalman per posizione e velocità: introduzione di stime di velocità


24

Grazie a tutti coloro che hanno pubblicato commenti / risposte alla mia domanda ieri ( Implementazione di un filtro Kalman per posizione, velocità, accelerazione ). Ho esaminato ciò che è stato raccomandato, e in particolare sia (a) l'esempio di Wikipedia su una posizione dimensionale e velocità, sia un altro sito Web che considera una cosa simile .

Aggiornamento 26-apr-2013 : la domanda originale qui conteneva alcuni errori, legati al fatto che non avevo capito bene l'esempio di Wikipedia su posizione e velocità monodimensionali . Con la mia migliore comprensione di ciò che sta accadendo, ora ho riformulato la domanda e la ho focalizzata più strettamente.

Entrambi gli esempi a cui mi riferisco nel paragrafo introduttivo sopra presuppongono che sia misurata solo la posizione. Tuttavia, nessuno dei due esempi ha alcun tipo di calcolo (XK-XK-1)/dt per la velocità. Ad esempio, l'esempio di Wikipedia specifica la matrice come , il che significa che viene inserita solo la posizione. Concentrandosi sull'esempio di Wikipedia, il vettore di stato del filtro Kalman contiene la posizione e la velocità , ovveroH = [ 1 0 ] x k x k ˙ x kHH=[1   0]XKXKX˙K

XK=(XKX˙K)

Supponiamo che la misurazione della posizione al momento sia . Quindi se la posizione e la velocità al momento erano e e se è un'accelerazione costante che si applica nell'intervallo di tempo da a , dalla misura di è possibile dedurre un valore per utilizzando la formulax k k - 1 x k - 1 ˙ x k - 1 a k - 1 k x unKX^KK-1XK-1X˙K-1un'K-1KX^un'

X^K=XK-1+X˙K-1dt+12un'dt2

Ciò implica che al momento viene data una misura della velocitàKX˙^K

X˙^K=X˙K-1+un'dt=2X^K-XK-1dt-X˙K-1

Tutte le quantità sul lato destro di tale equazione (ovvero , e ) sono normalmente variabili casuali distribuite con mezzi noti e deviazioni standard , quindi la matrice per il vettore di misurazioneX^KXK-1X˙K-1R

X^K=(X^KX˙^K)

può essere calcolato. È un modo valido per introdurre stime della velocità nel processo?


2
Non ho controllato tutti i tuoi calcoli. Tuttavia, parlando dell'esempio di Wikipedia, sembra che tu sia un po 'confuso sulla sua struttura. Hai ragione in quell'unica posizione misurata. Tuttavia, viene utilizzato un cosiddetto modello "a velocità costante". Ciò significa che la velocità è considerata costante nella matrice di transizione di stato.
Jason R,

3
Le variazioni di velocità sono modellate utilizzando la matrice del rumore di processo. Pertanto, stai intrinsecamente supponendo che la velocità cambierà in modo casuale con una certa covarianza specificata. Abbastanza sorprendentemente, questo spesso funziona bene. In questo modo è comune utilizzare una derivata del rumore di processo al di sopra della derivata con la variabile di stato più alta. Ad esempio, se hai incluso l'accelerazione nel tuo modello, potresti avere un componente jerk casuale incluso nel rumore di processo.
Jason R,

@JasonR con il modello di Wikipedia (assumendo zero covarianza iniziale tra posizione e velocità), la stima della velocità è sempre il suo valore iniziale (come dici tu, un modello di "velocità costante"). Tuttavia, la varianza della velocità aumenta monotonicamente attraverso il rumore di processo e non esistono misure che possano ridurlo. Qual è il vantaggio di questo rispetto a un modello che modella solo la posizione e assume una velocità costante?
Stocasticamente il

2
La varianza della stima della velocità non dovrebbe aumentare monotonicamente. Il rumore di processo introduce semplicemente una componente stocastica all'equazione di transizione di stato, consentendoti di esprimere un po 'di incertezza su come si evolverà lo stato del sistema di volta in volta. Se non includi il rumore di processo, il filtro produrrebbe davvero una velocità costante. Probabilmente non è quello che vuoi.
Jason R,

Bene @JasonR, se guardi il modello di Wikipedia, vedrai che la varianza monotinica della velocità è ciò che ti dà!
Stocasticamente il

Risposte:


24

È un modo valido per introdurre stime della velocità nel processo?

Se scegli il tuo stato in modo appropriato, le stime di velocità arrivano "gratuitamente". Vedi la derivazione del modello del segnale di seguito (per il semplice caso 1-D che abbiamo visto).

Signal Model, Take 2

Quindi, dobbiamo davvero concordare un modello di segnale prima di poter procedere in avanti. Dalla tua modifica, sembra che il tuo modello della posizione, , sia:XK

XK+1=XK+X˙KΔt+12un'(Δt)2X˙K+1=X˙K+un'Δt

Se il nostro stato è come prima: quindi l'equazione di aggiornamento dello stato è solo: xk+1=( 1 Δ t 0 1 )xk+( ( Δ t ) 2

XK=(XKX˙K)
dove ora nostroakè l'accelerazione normalmente distribuita.
XK+1=(1  Δt0  1)XK+((Δt)22Δt)un'K
un'K

Ciò fornisce una matrice diversa dalla versione precedente, ma le matrici F e H dovrebbero essere le stesse.solFH


Se lo implemento in scilab(scusate, nessun accesso a matlab), sembra che:

// 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

Quindi, posso applicare le equazioni del filtro Kalman a questo (le misurazioni rumorose).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

Quindi abbiamo le nostre misurazioni rumorose , e abbiamo applicato il filtro Kalman su di loro e abbiamo usato lo stesso modello di segnale per generare y come facciamo per applicare il filtro Kalman (un presupposto abbastanza grande, a volte!).yy

Quindi i seguenti grafici mostrano il risultato.

yXK

inserisci qui la descrizione dell'immagine

Grafico 2 : una vista ingrandita dei primi esempi:

inserisci qui la descrizione dell'immagine

Trama 3 : qualcosa che non si ottiene mai nella vita reale, la posizione reale rispetto alla stima dello stato della posizione.

inserisci qui la descrizione dell'immagine

Trama 4 : qualcosa che non si ottiene mai nella vita reale, la vera velocità rispetto alla stima dello stato della velocità.

inserisci qui la descrizione dell'immagine

Trama 5 : la norma della matrice di covarianza statale (qualcosa che dovresti sempre monitorare nella vita reale!). Nota che passa rapidamente dal suo valore iniziale molto grande a qualcosa di molto piccolo, quindi ho mostrato solo i primi esempi.

inserisci qui la descrizione dell'immagine

Grafico 6 : grafici dell'errore tra la posizione e la velocità reali e le loro stime.

inserisci qui la descrizione dell'immagine

zK+1=XK+1PK=0PK+1-=QKK+1

KK+1=(12/dt)

Ciò significa che produce la procedura di aggiornamento di Kalman

X^K+1=FK+1XK+KK+1(zK+1-HK+1FK+1XK)=(XK+X˙KdtX˙K)+(12/dt)(XK+1-(XK+X˙Kdt))=(XK+12(XK+1-XK)/dt-X˙K)

(XK-XK-1)/dt


Grazie per tutto il tuo aiuto finora. La mia domanda originale conteneva alcuni fraintendimenti, quindi ho cercato di rifocalizzarlo e nel tentativo di rispondere alla tua domanda su z_k.
Stocasticamente il

1
grazie vm per tutti i tuoi sforzi :-). Il tuo lavoro mi ha spinto a fare un po 'di matematica che ho attaccato alla tua risposta, spero che non ti dispiaccia. Comunque, ora sono convinto al 100% che il metodo standard sia buono, perché dopo tutto riesco a vedere le formule per la velocità. Grazie ancora
Stocasticamente il

Lieto di poterti aiutare! Nessun problema con l'aggiunta alla risposta.
Peter K.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.