#ifndef PROJECT_GAIT_H #define PROJECT_GAIT_H #include #include #include "cppTypes.h" class Gait { public: virtual ~Gait() = default; virtual Vec4 getContactState() = 0; virtual Vec4 getSwingState() = 0; virtual int* getMpcTable() = 0; virtual void setIterations(int iterationsBetweenMPC, int currentIteration) = 0; virtual float getCurrentStanceTime(float dtMPC, int leg) = 0; virtual float getCurrentSwingTime(float dtMPC, int leg) = 0; virtual int getCurrentGaitPhase() = 0; virtual void debugPrint() { } protected: std::string _name; }; using Eigen::Array4f; using Eigen::Array4i; class OffsetDurationGait : public Gait { public: OffsetDurationGait(int nSegment, Vec4 offset, Vec4 durations, const std::string& name); ~OffsetDurationGait(); Vec4 getContactState(); Vec4 getSwingState(); int* getMpcTable(); void setIterations(int iterationsBetweenMPC, int currentIteration); float getCurrentStanceTime(float dtMPC, int leg); float getCurrentSwingTime(float dtMPC, int leg); int getCurrentGaitPhase(); void debugPrint(); private: int* _mpc_table; Array4i _offsets; // offset in mpc segments Array4i _durations; // duration of step in mpc segments Array4f _offsetsFloat; // offsets in phase (0 to 1) Array4f _durationsFloat; // durations in phase (0 to 1) int _stance; int _swing; int _iteration; int _nIterations; float _phase; }; class MixedFrequncyGait : public Gait { public: MixedFrequncyGait(int nSegment, Vec4 periods, float duty_cycle, const std::string& name); ~MixedFrequncyGait(); Vec4 getContactState(); Vec4 getSwingState(); int* getMpcTable(); void setIterations(int iterationsBetweenMPC, int currentIteration); float getCurrentStanceTime(float dtMPC, int leg); float getCurrentSwingTime(float dtMPC, int leg); int getCurrentGaitPhase(); void debugPrint(); private: float _duty_cycle; int* _mpc_table; Array4i _periods; Array4f _phase; int _iteration; int _nIterations; }; #endif //PROJECT_GAIT_H