KalmanFilter.h
Go to the documentation of this file.
1// *****************************************************************
2// Filename: KalmanFilter.h
3// Copyright: Kai Welke, Chair Prof. Dillmann (IAIM),
4// Institute for Computer Science and Engineering (CSE),
5// University of Karlsruhe. All rights reserved.
6// Author: Kai Welke
7// Date: 27.05.2009
8// *****************************************************************
9#pragma once
10
11// *****************************************************************
12// includes
13// *****************************************************************
14#include <math.h>
15
16#include <Eigen/Eigen>
17
18#include "Gaussian.h"
19
20// Kalman filter for linear system with the following control model:
21// xt = Axt-1 + But + d + gaussian error
22// and following measurment model
23// zt = Cx + e + gaussian error
24
25// *****************************************************************
26// declaration of KalmanFilter
27// *****************************************************************
29{
30public:
31 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
32
33 // construction / destruction
35
36 // setup system
37 /**
38 * @param motion_A nxn square matrix being the linear transformation of the state
39 * @param motion_B nxm matrix being the transformation from control to state
40 * @param motion_noise n dimensional gaussian being the motion noise
41 **/
42 void setMotionModel(const Eigen::MatrixXd& motion_A,
43 const Eigen::MatrixXd& motion_B,
44 const Gaussian& motion_noise);
45
46 /**
47 * @param measurement_C transformation from state space to observation space
48 * @param measurement_noise gaussian encoding the observation noise
49 **/
50 void setMeasurementModel(const Eigen::MatrixXd& measurement_C,
51 const Gaussian& measurement_noise);
52
53 // filtering (if result == NULL, believe is updated)
54 Gaussian filter(const Gaussian& believe,
55 const Eigen::VectorXd& actionU,
56 const Eigen::VectorXd& perceptZ);
57 Gaussian predict(const Gaussian& believe, const Eigen::VectorXd& actionU);
58 Gaussian update(const Gaussian& predicted_believe, const Eigen::VectorXd& perceptZ);
59
60public:
61 // system model
62 Eigen::MatrixXd m_A;
63 Eigen::MatrixXd m_B;
64 Eigen::MatrixXd m_C;
65 Eigen::MatrixXd m_A_t;
66 Eigen::MatrixXd m_C_t;
67
68 // noises
71};
Gaussian m_Q
Eigen::MatrixXd m_A_t
void setMeasurementModel(const Eigen::MatrixXd &measurement_C, const Gaussian &measurement_noise)
Eigen::MatrixXd m_B
Gaussian predict(const Gaussian &believe, const Eigen::VectorXd &actionU)
Gaussian update(const Gaussian &predicted_believe, const Eigen::VectorXd &perceptZ)
Eigen::MatrixXd m_A
Eigen::MatrixXd m_C_t
Gaussian m_R
Eigen::MatrixXd m_C
Gaussian filter(const Gaussian &believe, const Eigen::VectorXd &actionU, const Eigen::VectorXd &perceptZ)
EIGEN_MAKE_ALIGNED_OPERATOR_NEW KalmanFilter()
void setMotionModel(const Eigen::MatrixXd &motion_A, const Eigen::MatrixXd &motion_B, const Gaussian &motion_noise)