2015-12-15 14 views
5

Sto utilizzando un filtro kalman (modello a velocità costante) per tracciare la posizione e la velocità di un oggetto. Misuro x, y dell'oggetto e traccia x, y, vx, vy. Che funziona, ma se si aggiunge un rumore gausiano di + - 20 mm alle letture del sensore x, y, vx, vy fluttua anche se il punto non si muove solo rumore. Per la posizione che è abbastanza buona per le mie esigenze, ma la velocità cambia quando il punto è fermo e ciò sta causando problemi con i miei calcoli di velocità dell'oggetto. C'è un modo per aggirare questo problema? anche se il passaggio al modello di accelerazione costante migliora su questo? Sto seguendo un robot tramite una telecamera.Posizione di tracciamento e velocità utilizzando un filtro kalman

Sto usando implementazione OpenCV e il mio modello di Kalman è lo stesso [1]

[1] http://www.morethantechnical.com/2011/06/17/simple-kalman-filter-for-tracking-using-opencv-2-2-w-code/

risposta

2

La cosa più importante sulla progettazione di un filtro di Kalman non è i dati, è la stima di errore. Le matrici in quell'esempio sembrano essere scelte arbitrariamente, ma dovresti sceglierle usando una conoscenza specifica del tuo sistema. In particolare:

  • La covarianza dell'errore ha unità. È la deviazione standard al quadrato. Quindi il tuo errore di posizione è in "lunghezza al quadrato" e velocità in "lunghezza per volta al quadrato". I valori in quelle matrici saranno diversi a seconda che si lavori in m o mm.
  • Si sta implementando un modello di "velocità costante", ma il "processNoiseCov" dell'esempio imposta gli stessi valori per il rumore del processo di posizione e di velocità. Ciò significa che potresti sbagliare sulla tua posizione a causa di errori sulla velocità, e potresti sbagliare perché l'oggetto si è teletrasportato in un modo che è indipendente dalla velocità. In un modello CV ci si aspetterebbe che il rumore del processo di posizione sarebbe molto basso (sostanzialmente diverso da zero solo per ragioni numeriche e per coprire l'errore di modellazione) e il vero movimento sconosciuto del sistema sarebbe attribuito a velocità sconosciuta. Questo problema interferisce anche con la capacità del KF di inferire velocità dall'input di posizione, perché l'errore di teletrasporto della posizione non è attribuito al cambio di velocità.
  • Se si inserisce un errore di +/- 20mm (si dovrebbe inserire il rumore gaussiano se si vuole simulare il comportamento ideale) si ha una deviazione standard approssimativa di 11,5 mm o una varianza di (11,5 mm)^2 . Non sapendo quali sono le tue unità (mm o m) Non posso dire quale dovrebbe essere il valore numerico di "measurementNoiseCov", ma non è 0.1 (come nell'esempio).

Infine, anche con tutto ciò che è corretto, tenere presente che il KF è in definitiva un filtro lineare. Qualunque rumore tu inserisca apparirà nell'output, appena scalato di qualche fattore (il guadagno di Kalman).

Problemi correlati