#ifndef STATE_H #define STATE_H #include #include #include #include #include #include #include struct MyState : public WalkState, public WalkStateFavorZ, public WalkStateHeading { /** ctor */ MyState(const int x_cm, const int y_cm, const int z_cm) : WalkState(GridPoint(x_cm, y_cm, z_cm)), WalkStateHeading(Heading(0), 0) { ; } MyState() : WalkState(GridPoint()), WalkStateHeading(Heading(0), 0) { ; } MyState& operator += (const MyState& o) { position += o.position; return *this; } MyState& operator /= (const float val) { position /= val; return *this; } MyState operator * (const float val) const { MyState copy = *this; copy.position = copy.position * val; return copy; } }; /** observed sensor data */ struct MyObservation { /** wifi measurements */ WiFiMeasurements wifi; /** gps measurements */ GPSData gps; // TODO: switch to a general activity enum/detector for barometer + accelerometer + ...? /** detected activity */ ActivityButterPressure::Activity activity; /** time of evaluation */ Timestamp currentTime; }; /** (observed) control data */ struct MyControl { /** turn angle (in radians) since the last transition */ float turnSinceLastTransition_rad = 0; /** number of steps since the last transition */ int numStepsSinceLastTransition = 0; // TODO: switch to a general activity enum/detector using barometer + accelerometer? /** currently detected activity */ ActivityButterPressure::Activity activity; /** reset the control-data after each transition */ void resetAfterTransition() { turnSinceLastTransition_rad = 0; numStepsSinceLastTransition = 0; } }; #endif // STATE_H