MobileRobot.cpp

00001 #include "MobileRobot.hpp"
00002 
00003 #include <math.h>
00004 
00005 namespace aux = indii::ml::aux;
00006 namespace ublas = boost::numeric::ublas;
00007 
00008 MobileRobot::MobileRobot(double v, double w) : systemNoise(STATE_SIZE),
00009     measNoise(MEAS_SIZE), measModel(MEAS_SIZE,STATE_SIZE), state(STATE_SIZE),
00010     v(v), w(w) {
00011 
00012   /* system noise */
00013   aux::vector systemNoiseMu(STATE_SIZE);
00014   aux::symmetric_matrix systemNoiseSigma(STATE_SIZE);
00015   systemNoiseMu.clear();
00016   systemNoiseSigma.clear();
00017   systemNoiseSigma(0,0) = pow(0.01,2.0);
00018   systemNoiseSigma(1,1) = pow(0.01,2.0);
00019   systemNoiseSigma(2,2) = pow(0.01*3.14/180,2.0);
00020 
00021   systemNoise.setExpectation(systemNoiseMu);
00022   systemNoise.setCovariance(systemNoiseSigma);
00023 
00024   /* measurement noise */
00025   aux::vector measNoiseMu(MEAS_SIZE);
00026   aux::symmetric_matrix measNoiseSigma(MEAS_SIZE);
00027 
00028   measNoiseMu.clear();
00029   measNoiseSigma.clear();
00030   measNoiseSigma(0,0) = pow(0.05,2.0);
00031 
00032   measNoise.setExpectation(measNoiseMu);
00033   measNoise.setCovariance(measNoiseSigma);
00034 
00035   /* measurement model */
00036   measModel.clear();
00037   measModel(0,1) = 2.0;
00038 
00039   /* initial state */
00040   state.clear();
00041   state(2) = 0.8;
00042 }
00043 
00044 MobileRobot::~MobileRobot() {
00045   // nothing to do
00046 }
00047 
00048 void MobileRobot::move() {
00049   aux::vector noise(systemNoise.sample());
00050 
00051   state(0) += cos(state(2)) * v + noise(0);
00052   state(1) += sin(state(2)) * v + noise(1);
00053   state(2) += w;
00054 }
00055 
00056 aux::vector MobileRobot::measure() {
00057   return (prod(measModel, state) + measNoise.sample());
00058 }
00059 
00060 const aux::vector& MobileRobot::getState() {
00061   return state;
00062 }

Generated on Wed Dec 17 15:05:50 2008 for dysii Filtering Test Suite by  doxygen 1.5.3