00001 #ifndef MOBILEROBOTPARTICLEFILTERMODEL_HPP
00002 #define MOBILEROBOTPARTICLEFILTERMODEL_HPP
00003
00004 #include "indii/ml/filter/ParticleSmootherModel.hpp"
00005 #include "indii/ml/filter/KernelForwardBackwardSmootherModel.hpp"
00006 #include "indii/ml/filter/KernelTwoFilterSmootherModel.hpp"
00007 #include "indii/ml/aux/GaussianPdf.hpp"
00008 #include "indii/ml/aux/vector.hpp"
00009 #include "indii/ml/aux/matrix.hpp"
00010
00011 using namespace indii::ml::filter;
00012
00013 namespace aux = indii::ml::aux;
00014
00015
00016
00017
00018 class MobileRobotParticleFilterModel
00019 : public virtual ParticleSmootherModel<unsigned int>,
00020 public virtual KernelForwardBackwardSmootherModel<unsigned int>,
00021 public virtual KernelTwoFilterSmootherModel<unsigned int> {
00022 public:
00023 MobileRobotParticleFilterModel(const double vel = 0.1,
00024 const double ang = 0.0);
00025
00026 virtual ~MobileRobotParticleFilterModel();
00027
00028 aux::GaussianPdf suggestPrior();
00029
00030 virtual unsigned int getStateSize();
00031
00032 virtual unsigned int getMeasurementSize();
00033
00034 virtual aux::vector transition(const aux::vector& x,
00035 const unsigned int start, const unsigned int delta);
00036
00037 virtual double weight(const aux::vector& x, const aux::vector& y);
00038
00039 virtual aux::vector measure(const aux::vector& x);
00040
00041 virtual aux::sparse_matrix alpha(const aux::DiracMixturePdf& p_xtn_ytn,
00042 const aux::DiracMixturePdf& p_xtnp1_ytnp1, const unsigned int start,
00043 const unsigned int delta);
00044
00045 private:
00046
00047
00048
00049 aux::GaussianPdf w;
00050
00051
00052
00053
00054 aux::GaussianPdf v;
00055
00056
00057
00058
00059 const double vel;
00060
00061
00062
00063
00064 const double ang;
00065
00066 };
00067
00068 #endif
00069