22.10.2021

Sensordatenfusion: was ist das?

Sensordatenfusion

  • Verknüpfung verschiedener Informationsquellen (Sensoren) für bessere Modellierung
  • Verschiedene Zielsetzungen
    • Verbessertes Systemverständnis
    • Verringerte Unsicherheit der Modelle
    • Redundanz von Sensoren (Absicherung von Ausfällen)
    • Bestimmung nicht-gemessener Werte (indirekte Messung)
  • Anwendungsbeispiele
    • Ortung
    • Zeitreihenanalyse

Kalman Filter: Ortung eines Zuges

Anwendungsbeispiel: Ortung eines Zuges

Ungefährer initialer Zustand des Zuges: \(\mathbf{x}_0=\left(\begin{array}{c} s_0 \\ v_0 \end{array}\right)\)

Unsicherheit / Kovarianz

  • Weder Position noch Geschwindigkeit sind genau bekannt
  • Zusammenhang/Korrelation zwischen \(s\) und \(v\)
  • Multivariat normalverteilt
  • Kovarianzmatrix \(\mathbf{P}_0=\left(\begin{array}{c} \sigma^2_{s} & \sigma_{sv} \\ \sigma_{vs} & \sigma^2_{v} \end{array}\right)\)

Zeit

  • Bisher: Nur einen Zustand beschrieben
  • Jetzt: Einfluss Zeit \(t\), mit Zeitschritt \(\Delta t\)
  • Prognose \(\mathbf{x}_{i-1}\) \(\rightarrow\) \(\mathbf{x}_i\)?
  • Prognose \(\mathbf{P}_{i-1}\) \(\rightarrow\) \(\mathbf{P}_i\)?

Prognose

  • Vorläufige Annahme: konstante Geschwindigkeit

\(v_i=v_{i-1}\)

  • Einfache Physik:

\(s_i\)\(=\) \(s_{i-1}\)\(+\Delta t~\) \(v_{i-1}\)

Prognose

  • \(\mathbf{x}_i\)\(=\mathbf{F}~\) \(\mathbf{x}_{i-1}\)
  • \(\mathbf{F}=\left(\begin{array}{c} 1 & \Delta t\\ 0 & 1 \end{array}\right)\)
  • Regel: \(Kov(\mathbf{A}~\mathbf{b}) =\) \(\mathbf{A}~Kov(\mathbf{b})~\mathbf{A}^T\)
  • \(\mathbf{P}_i\)\(= \mathbf{F}\) \(\mathbf{P}_{i-1}\)\(\mathbf{F}^T\)

Bekannter Externer Einfluss

  • Beispiel: Beschleunigung \(a\)
  • \(s_i\)\(=\) \(s_{i-1}\)\(+ \Delta t~\) \(v_{i-1}\)\(+\) \(0.5~a~\Delta t^2\)
  • \(v_i\)\(=\) \(v_{i-1}\)\(+ a~\Delta t\)
  • \(\mathbf{x}_i\)\(= \mathbf{F}~\) \(\mathbf{x}_{i-1}\)\(+ \mathbf{B} ~\mathbf{u}_i\)
  • Regel: Mit beliebigem Vektor \(\mathbf{a}\): \(Kov(\mathbf{b}+\mathbf{a}) =Kov(\mathbf{b})\)
  • d.h., Matrix \(\mathbf{P_i}\) unverändert

Unbekannter Externer Einfluss

  • Beispiel: Brennstoffqualität variiert, Gegenwind, …
  • Modellierung: Normalverteilt, mit Mittelwert 0, Kovarianz \(\mathbf{Q}_i\)
  • Erhöht die Systemunsicherheit:
  • \(\mathbf{P}_i\)\(=\mathbf{F}~\) \(\mathbf{P}_{i-1}\)\(~\mathbf{F}^T + \mathbf{Q}_i\)

Zusammenfassung des Prognoseschritts

  • Prognose von (mittlerem) Zustand und Kovarianz:
    • \(\mathbf{x}_i\) \(=\mathbf{F}~\) \(\mathbf{x}_{i-1}\)\(+ \mathbf{B} ~\mathbf{u}_i\)
    • \(\mathbf{P}_i\) \(=\mathbf{F}~\) \(\mathbf{P}_{i-1}\)\(~\mathbf{F}^T + \mathbf{Q}_i\)

Sensoren!

Sensormessung und Unsicherheit

  • Unsicherheiten der Position wachsen über Zeit
  • Ausgleich über Sensormessdaten
  • Messwerte:
    • \(\mathbf{z}_i=\left(\begin{array}{c} s_{mess} \\ v_{mess} \end{array}\right)\)
  • Unsicherheit (z. B. aus Datenblatt):
    • Kovarianzmatrix \(\mathbf{R}\)

Modellierung

  • Prognose: \(\mathbf{x}_i =\)\(\mathbf{F}~\) \(\mathbf{x}_{i-1}\)\(,~~~~\) \(\mathbf{P}_i =\)\(\mathbf{F}\) \(\mathbf{P}_{i-1}\)\(\mathbf{F}^T\)
  • Annahme: Messung (links) hängt von Zustand (rechts) ab, \(\mathbf{z}_i\) \(\approx\) \(f(\) \(\mathbf{x}_i~\) \()\)

Modellierung: Erwartete Messwerte

  • Mittelwert: \(\mathbf{z}'_i\) \(=\mathbf{H}_i\) \(\mathbf{x}_i\)
  • Kovarianz: \(\mathbf{R}'_i\) \(=\mathbf{H}_i\) \(\mathbf{P}_i\)\(\mathbf{H}_i^T\)

Verknüpfung: gemessene & erwartete Werte

  • Wahrscheinlichkeit dass BEIDE Verteilungen richtig liegen
    • \(\mathbf{z}_i, \mathbf{R}\)
    • \(\mathbf{z}'_i, \mathbf{R}'_i\)
  • Überlagerung der Verteilungen, bzw. Multiplikation der Dichtefunktionen

Verknüpfung

  • Multiplikation von zwei (Gaußschen) Dichtefunktionen
    • mit \(\mu_a\), \(~\Sigma_a\) und \(\mu_b\), \(~\Sigma_b\)
  • Ergibt Gaußsche Dichtefunktion mit \(\mu_c = \mu_a+\Sigma_a (\Sigma_a+\Sigma_b)^{-1} (\mu_b-\mu_a)\)
  • Und Kovarianz \(\Sigma_c = \Sigma_a - \Sigma_a (\Sigma_a+\Sigma_b)^{-1} \Sigma_a\)

Verknüpfung

  • \(\mathbf{x'}_i\)\(=\) \(\mathbf{x}_i\)\(+\mathbf{K}_i (\) \(\mathbf{z}_i\)\(-\mathbf{H}_i\) \(\mathbf{x}_i\)\()\)
  • \(\mathbf{P'}_i\)\(=\) \(\mathbf{P}_i\)\(- \mathbf{K}_i \mathbf{H}_i\) \(\mathbf{P}_i\)

Mit Kalman Gain

\(\mathbf{K}_i =\) \(\mathbf{P}_i\)\(\mathbf{H}_i^T (\mathbf{H}_i\) \(\mathbf{P}_i\)\(\mathbf{H}_i^T+\) \(\mathbf{R}\)\()^{-1}\)

Ergebnis mehrerer Schritte

Zusammenfassung

  • 2-schrittiges, iteratives Vorgehen
  • 1: Prognose mit Systemverständnis (siehe Folie 12)
    • Eingaben: \(\mathbf{x}_{i-1}'\), \(\mathbf{P}'_{i-1}\),\(\mathbf{F}\), \(\mathbf{B}\), \(\mathbf{u}_i\), \(\mathbf{Q}\),
    • Ausgaben: \(\mathbf{x}_{i}\), \(\mathbf{P}_{i}\)
  • 2: Update mit Messwerten (siehe Folie 19)
    • Eingaben: \(\mathbf{x}_{i}\), \(\mathbf{P}_{i}\), \(\mathbf{H}_i\), \(\mathbf{R}\), \(\mathbf{z}_i\),
    • Ausgaben: \(\mathbf{x}_{i}'\), \(\mathbf{P}_{i}'\)

Verbleibende Probleme

Wo kommen die Eingaben her?

  • Initialwerte \(\mathbf{x}_{i=0}\), \(\mathbf{P}_{i=0}\)
    • Begründete Vermutung, erste Messwerte ( \(\mathbf{x}_{i=0}\))
  • \(\mathbf{H}_i\), \(\mathbf{F}\), \(\mathbf{B}\), \(\mathbf{u}_i\)
    • Wissen oder Annahmen über modelliertes System
  • \(\mathbf{R}\), \(\mathbf{Q}\)
    • z.B. aus Datenblättern der Sensoren, Schätzung aus historischen Daten
  • Oder: Maximum Likelihood Estimation

Annahmen des Modells?

  • Wichtige Überlegung für jedes statistische Modell
  • Annahmen bzw. ihre Erfüllung
    • Markov
    • Linearität
    • Normalverteilt

Annahmen nicht erfüllt?

  • Nicht-Markov \(\rightarrow\)
    • z.B. frühere Zeitschritte in Zustandsvektor \(\mathbf{x}\) aufnehmen
  • Nicht-Normalverteilt \(\rightarrow\)
    • andere Gleichungen, Transformationen, vllt. keine analytische Lösung
  • Nicht-Linear \(\rightarrow\)
    • Linearisierung (z. B. Extended Kalman Filter)

Danke für Ihre Aufmerksamkeit. Fragen?

Beispiel mit Code (FKF Paket, Programmiersprache R)

Simulation

set.seed(123)
a <- 1.1 #Beschleunigung
x <- cbind(0,0) #tatsächliche Startwerte
R <- matrix(c(200,-100,-100,100),2,2) #Sensorgenauigkeit (Kovarianz)
z <- x + MASS::mvrnorm(1,c(0,0),R) #erste Sensormessung
deltat <- 1 # Zeitschritt
Q  <- matrix(c(2,1,1,2),2,2) #Zufällige externe Einflüsse auf Status (Kovarianz)
## Schrittweise simulieren:
for(i in 2:50){
  xi <- c(x[i-1,1]+x[i-1,2]*deltat+deltat^2 * a/2, x[i-1,2]+a*deltat)
  xi <- xi + MASS::mvrnorm(1,c(0,0),Q) 
  x <- rbind(x,xi)
  zi <- xi + MASS::mvrnorm(1,c(0,0),R)
  z <- rbind(z,x[i,]+ MASS::mvrnorm(1,c(0,0),R))
}
plot(x,type="l",xlab="s",ylab="v") # Plot des tatsächlichen Status
points(z,col="darkgreen",pch=20) # Plot der Messwerte

Simulation

Simulation + Kalman Filter Schätzung

#install.packages("FKF")
require(FKF)
mod <- fkf(
  a0=c(30,30), #Initialwert x_i=0 (absichtlich stark abweichend)
  P0=diag(2), #Initiale Kovarianz P_i=0
  dt=matrix(a*c(0.5,1),2), #offset, externer Einfluss B*u
  ct=matrix(c(0,0),2), #offset Sensoren (null)
  Tt=matrix(c(1,0,1,1),2), # Zustandstransformationsmatrix F
  Zt=diag(2),#Zustand-Sensoren Transformationsmatrix H
  HHt = Q%*%t(Q), #sqr Kovarianzmatrix Q, extern
  GGt = R%*%t(R), #sqr Kovarianzmatrix R, Sensoren
  yt=t(z)) #Sensormesswerte
plot(x,type="l",xlab="s",ylab="v")
points(z,col="darkgreen",pch=20)
lines(mod$att[1,],mod$att[2,],col="blue") #Filter Schätzung

Simulation + Kalman Filter Schätzung

Nur Position beobachtet

mod <- fkf(
  a0=c(30,30), 
  P0=diag(2),
  dt=matrix(a*c(0.5,1),2), 
  ct=matrix(c(0),1), #!
  Tt=matrix(c(1,0,1,1),2), 
  Zt=matrix(c(1,0),1), #!
  HHt = Q%*%t(Q),
  GGt = R[1,1,drop=F]^2, #!
  yt=t(z)[1,,drop=F]) #!
plot(x,type="l",xlab="s",ylab="v")
points(z,col="darkgreen",pch=20)
lines(mod$att[1,],mod$att[2,],col="blue")

Nur Position beobachtet

Nur Geschwindigkeit beobachtet

mod <- fkf(
  a0=c(30,30), 
  P0=diag(2),
  dt=matrix(a*c(0.5,1),2),
  ct=matrix(c(0),1), 
  Tt=matrix(c(1,0,1,1),2), 
  Zt=matrix(c(0,1),1), 
  HHt = Q%*%t(Q),
  GGt = R[2,2,drop=F]^2, #!
  yt=t(z)[2,,drop=F]) #!
plot(x,type="l",xlab="s",ylab="v")
points(z,col="darkgreen",pch=20)
lines(mod$att[1,],mod$att[2,],col="blue")

Nur Geschwindigkeit beobachtet

Quellen