Как написано в документы, класс cv :: KalmanFilter можно использовать как расширенный фильтр Калмана (EKF). Может кто-нибудь объяснить мне, как?
Все матрицы задействованы объявлены как публичные так что я могу редактировать их все.
исходный код для нормального (линейного) фильтра Калмана.
Я думаю, что я должен отредактировать transitionMatrix
с моей нелинейной системой, а именно G
,
Эта матрица является моей нелинейной системой с входными переменными statePost
и control
; и ControlMatrix должно быть все 0. Верно?
Но где я должен положить якобиан G?
У меня те же сомнения по поводу процесса обновления, у меня есть нелинейная система H
для измерения Matrix.
Может быть, я немного смущен, может кто-нибудь помочь мне, пожалуйста?
Итак, я думаю, что я понял, как использовать cv::KalmanFilter
Класс как EKF.
Вот как я это сделал:
сохранить во временной переменной kf.statePost
: temp = kf.statePost
положить в kf.transitionMatrix
якобиан переходной функции
сделать шаг предсказания KF
изменить kf.statePre
с правильным значением, используя функцию перехода: kf.statePre = f(temp, control)
положить в kf.measurementMatrix
Якобиан функции измерения (или коррекции)
сделать шаг коррекции KF
изменить kf.temp5
матрица с правильным значением: kf.temp5 = measurement - h(statePre)
где h()
является функцией измерения (или коррекции)
изменить kf.statePost
с правильным значением: kf.statePost = kf.statePre + kf.gain * kf.temp5
И, наконец, у вас есть расчетное состояние системы в kf.statePost
!
Других решений пока нет …