00001
00002
00003
00004
00005
00006
00007
00008 #ifndef FIXEDPOSITIONMODEL_H_INCLUDED
00009 #define FIXEDPOSITIONMODEL_H_INCLUDED
00010
00011 #include "BaseModel.h"
00012 #include "Tools/Math/Vector_n.h"
00013 #include "Tools/Math/Matrix_nxn.h"
00014
00015
00016
00017
00018
00019 class KalmanFixedPositionModel : public KalmanProcessModelBase
00020 {
00021 public:
00022 KalmanFixedPositionModel();
00023 virtual ~KalmanFixedPositionModel();
00024
00025 public:
00026 virtual const char* getModelName() const { return "FixedPositionModel"; }
00027
00028 virtual int getStateDim() const { return 2; }
00029 virtual void getP(double* pDest) const { P.copyTo(pDest); }
00030 virtual void getQ(double* pDest) const { globQ.copyTo(pDest); }
00031 virtual void setQ(const double* pSource) { globQ = pSource; }
00032 virtual void getR(double* pDest) const { globR.copyTo(pDest); }
00033 virtual void setR(double* pSource) { globR = pSource; }
00034
00035 virtual void reset();
00036 virtual KalmanUpdateResult update(double time, double x, double y);
00037 virtual KalmanPredictResult predict(double time);
00038
00039 virtual void adapt(const OdometryData& lastOdometry,
00040 const OdometryData& actualOdometry);
00041
00042 private:
00043
00044
00045
00046
00047
00048 Vector_n<double, 2> x_act;
00049 Matrix_nxn<double, 2> A;
00050 Matrix_nxn<double, 2> P;
00051 Matrix_nxn<double, 2> Q;
00052 Matrix_nxn<double, 2> R;
00053
00054 bool inited;
00055 double lastLiklihood;
00056 double lastTime;
00057
00058
00059 Vector_n<double, 2> x_minus;
00060 Matrix_nxn<double, 2> P_minus;
00061 Matrix_nxn<double, 2> C;
00062 Matrix_nxn<double, 2> C_inv;
00063 Matrix_nxn<double, 2> K;
00064 Vector_n<double, 2> z;
00065 Vector_n<double, 2> x_predict;
00066
00067
00068 Matrix_nxn<double, 2> globQ;
00069
00070 Matrix_nxn<double, 2> globR;
00071
00072 static double defaultA[4];
00073 static double defaultP[4];
00074 static double defaultQ[4];
00075 static double defaultR[4];
00076 };
00077
00078 #endif
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099