#ifndef NAVCONTROLLERGRID_H #define NAVCONTROLLERGRID_H #include "../sensors/AccelerometerSensor.h" #include "../sensors/GyroscopeSensor.h" #include "../sensors/BarometerSensor.h" #include "../sensors/WiFiSensor.h" #include "../sensors/SensorFactory.h" #include "../sensors/StepSensor.h" #include "../sensors/TurnSensor.h" #include #include #include "State.h" #include "Filter.h" #include "../Controller.h" #include "../NavController.h" namespace GridBased { class NavControllerGrid : public NavController { private: Grid* grid; WiFiModelLogDistCeiling wifiModel; std::unique_ptr> pf; DijkstraPath pathToDest; MyObservation curObs; MyControl curCtrl; public: NavControllerGrid(Controller* mainController, Floorplan::IndoorMap* im, Grid* grid); void start() override; void stop() override; void onSensorData(Sensor* sensor, const Timestamp ts, const AccelerometerData& data) override; void onSensorData(Sensor* sensor, const Timestamp ts, const GyroscopeData& data) override; void onSensorData(Sensor* sensor, const Timestamp ts, const BarometerData& data) override; void onSensorData(Sensor* sensor, const Timestamp ts, const WiFiMeasurements& data) override; void onSensorData(Sensor* sensor, const Timestamp ts, const BeaconMeasurement& data) override; void onSensorData(Sensor* sensor, const Timestamp ts, const GPSData& data) override; void onSensorData(Sensor* sensor, const Timestamp ts, const StepData& data) override ; void onSensorData(Sensor* sensor, const Timestamp ts, const TurnData& data) override; void onSensorData(Sensor* sensor, const Timestamp ts, const ActivityData& data) override ; private: /** called when any sensor has received new data */ void gotSensorData(const Timestamp ts); // void debugActivity(const ActivityData& activity); /** particle-filter update loop */ void filterUpdateLoop(); /** check whether its time for a filter update, and if so, execute the update and return true */ bool filterUpdateIfNeeded(); /** perform a filter-update (called from a background-loop) */ void filterUpdate(); /** UI update loop */ void updateMapViewLoop(); }; } #endif // NAVCONTROLLERGRID_H