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
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
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
00036 measModel.clear();
00037 measModel(0,1) = 2.0;
00038
00039
00040 state.clear();
00041 state(2) = 0.8;
00042 }
00043
00044 MobileRobot::~MobileRobot() {
00045
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 }