39#include <visp3/core/vpKalmanFilter.h>
56void vpKalmanFilter::init(
unsigned int size_state_vector,
unsigned int size_measure_vector,
unsigned int n_signal)
88 :
iter(0),
size_state(0),
size_measure(0),
nsignal(0),
verbose_mode(false),
Xest(),
Xpre(),
F(),
H(),
R(),
Q(),
100 :
iter(0),
size_state(0),
size_measure(0),
nsignal(n_signal),
verbose_mode(false),
Xest(),
Xpre(),
F(),
H(),
R(),
Q(),
118 :
iter(0),
size_state(0),
size_measure(0),
nsignal(0),
verbose_mode(false),
Xest(),
Xpre(),
F(),
H(),
R(),
Q(),
121 init(size_state_vector, size_measure_vector, n_signal);
148 std::cout <<
"F = " << std::endl <<
F << std::endl;
149 std::cout <<
"Xest = " << std::endl <<
Xest << std::endl;
155 std::cout <<
"Xpre = " << std::endl <<
Xpre << std::endl;
156 std::cout <<
"Q = " << std::endl <<
Q << std::endl;
157 std::cout <<
"Pest " << std::endl <<
Pest << std::endl;
164 std::cout <<
"Ppre " << std::endl <<
Ppre << std::endl;
200 std::cout <<
"z " << std::endl << z << std::endl;
205 std::cout <<
"S " << std::endl << S << std::endl;
208 W = (
Ppre *
H.t()) * (S).inverseByLU();
210 std::cout <<
"W " << std::endl <<
W << std::endl;
215 std::cout <<
"Pest " << std::endl <<
Pest << std::endl;
221 std::cout <<
"Xest " << std::endl <<
Xest << std::endl;
278vpKalmanFilter::initFilterCteAcceleration(
double dt,
305 F[3*i][3*i+2] =
dt*
dt/2;
307 F[3*i+1][3*i+2] =
dt;
316 double sR = sigma_noise[i];
317 double sQ = sigma_state[i];
323 Q[3*i][3*i] = sQ * dt5/20;
324 Q[3*i][3*i+1] = sQ * dt4/8;
325 Q[3*i][3*i+2] = sQ * dt3/6;
327 Q[3*i+1][3*i] = sQ * dt4/8;
328 Q[3*i+1][3*i+1] = sQ * dt3/3;
329 Q[3*i+1][3*i+2] = sQ * dt2/2;
331 Q[3*i+2][3*i] = sQ * dt3/6;
332 Q[3*i+2][3*i+1] = sQ * dt2/2.0;
333 Q[3*i+2][3*i+2] = sQ *
dt;
339 Pest[3*i][3*i+1] = 1.5/
dt*sR;
340 Pest[3*i][3*i+2] = sR/(dt2);
342 Pest[3*i+1][3*i] = 1.5/
dt*sR;
343 Pest[3*i+1][3*i+1] = dt3/3*sQ + 13/(2*dt2)*sR;
344 Pest[3*i+1][3*i+2] = 9*dt2*sQ/40.0 +6/dt3*sR;
346 Pest[3*i+2][3*i] = sR/(dt2);
347 Pest[3*i+2][3*i+1] = 9*dt2*sQ/40.0 +6/dt3*sR;
348 Pest[3*i+2][3*i+2] = 23*
dt/30.0*sQ+6.0/dt4*sR;
354 Xest[3*i+1] = (1.5 *Z2[i] - Z1[i] -0.5*Z0[i]) /(2*
dt);
355 Xest[3*i+2] = (Z2[i] - 2*Z1[i] + Z0[i]) /(
dt*
dt);
361vpKalmanFilter::initFilterSinger(
double dt,
390 F[3*
i][3*
i+2] = 1/a2*(1+a*
dt+exp(-a*
dt));
392 F[3*
i+1][3*
i+2] = 1/a*(1-exp(-a*
dt));
393 F[3*
i+2][3*
i+2] = exp(-a*
dt);
401 double sR = sigma_noise[
i];
402 double sQ = sigma_state[
i];
406 Q[3*
i][3*
i] = sQ/a4*(1-exp(-2*a*
dt)+2*a*
dt+2*a3/3*dt3-2*a2*dt2-4*a*
dt*exp(-a*
dt));
407 Q[3*
i][3*
i+1] = sQ/a3*(1+exp(-2*a*
dt)-2*exp(-a*
dt)+2*a*
dt*exp(-a*
dt)-2*a*
dt+a2*dt2);
408 Q[3*
i][3*
i+2] = sQ/a2*(1-exp(-2*a*
dt)-2*a*
dt*exp(-a*
dt));
410 Q[3*
i+1][3*
i] =
Q[3*
i][3*
i+1];
411 Q[3*
i+1][3*
i+1] = sQ/a2*(4*exp(-a*
dt)-3-exp(-2*a*
dt)+2*a*
dt);
412 Q[3*
i+1][3*
i+2] = sQ/a*(exp(-2*a*
dt)+1- 2*exp(-a*
dt));
414 Q[3*
i+2][3*
i] =
Q[3*
i][3*
i+2];
415 Q[3*
i+2][3*
i+1] =
Q[3*
i+1][3*
i+2];
416 Q[3*
i+2][3*
i+2] = sQ*(1-exp(-2*a*
dt));
425 Pest[3*
i+1][3*
i+1] = 2*sR/dt2 + sQ/(a4*dt2)*(2-a2*dt2+2*a3*dt3/3.0 -2*exp(-a*
dt)-2*a*
dt*exp(-a*
dt));
Implementation of column vector and the associated operations.
error that can be emitted by ViSP classes.
unsigned int size_state
Size of the state vector .
long iter
Filter step or iteration. When set to zero, initialize the filter.
vpMatrix R
Measurement noise covariance matrix .
void init(unsigned int size_state, unsigned int size_measure, unsigned int n_signal)
unsigned int nsignal
Number of signal to filter.
vpMatrix Q
Process noise covariance matrix .
void filtering(const vpColVector &z)
unsigned int size_measure
Size of the measure vector .
vpMatrix I
Identity matrix .
vpMatrix H
Matrix that describes the evolution of the measurements.
Implementation of a matrix and operations on matrices.