#ifndef MYEVALUATION_H #define MYEVALUATION_H #include #include "MyObservation.h" #include "MyState.h" #include "../frank/WiFiEvaluation.h" #include "../frank/BeaconEvaluation.h" #include "../toni/BarometerEvaluation.h" #include "../lukas/StepEvaluation.h" #include "../lukas/TurnEvaluation.h" #include class MyEvaluation : public K::ParticleFilterEvaluation { private: WiFiEvaluation wifiEval; BeaconEvaluation beaconEval; BarometerEvaluation barometerEval; StepEvaluation stepEval; TurnEvaluation turnEval; bool useWifi = true; bool useStep = true; bool useTurn = true; bool useBaro = true; bool useIB = true; public: void setUsage(bool useWifi, bool useStep, bool useTurn, bool useBaro, bool useIB) { this->useWifi = useWifi; this->useStep = useStep; this->useTurn = useTurn; this->useBaro = useBaro; this->useIB = useIB; } virtual double evaluation(std::vector>& particles, const MyObservation& observation) override { //if (observation.wifi) { wifiEval.nextObservation(observation.wifi); //} // evalulate each particle double sum = 0; for (K::Particle& p : particles) { // std::atomic sum(0); // #pragma omp parallel for // for (int i = 0; i < (int) particles.size(); ++i) { // K::Particle& p = particles[i]; double weight = 1.0; if (useWifi) { weight *= wifiEval.getProbability(p.state, observation); } if (useBaro && observation.barometer) { weight *= barometerEval.getProbability(p.state, observation.barometer); // set p.state.measurement_pressure = observation.barometer->hpa; } if (useIB) { weight *= beaconEval.getProbability(p.state, observation); } // CONTROL! // if (useStep) { // weight *= stepEval.getProbability(p.state, observation.step); // } // CONTROL! // if (useTurn) { // weight *= turnEval.getProbability(p.state, observation.turn, true); // //set // p.state.angularHeadingChange = observation.turn->delta_heading; // } // set and accumulate p.weight = weight; sum += p.weight; } // reset observation.step->steps = 0; observation.turn->delta_heading = 0; observation.turn->delta_motion = 0; return sum; } }; #endif // MYEVALUATION_H