z1_controller/include/FSM/FiniteStateMachine.h

42 lines
959 B
C
Raw Normal View History

2022-07-20 11:11:38 +08:00
#ifndef FSM_H
#define FSM_H
#include <vector>
#include "FSM/BaseState.h"
#include "unitree_arm_sdk/cmdPanel.h"
#include "unitree_arm_sdk/loop.h"
enum class FSMRunMode{
NORMAL,
CHANGE
};
/*
states的第一个元素
CmdPanel获取触发信号
cmdChannelcmdChannel必须不同
*/
class FiniteStateMachine{
public:
FiniteStateMachine(std::vector<BaseState*> states,
CmdPanel *cmdPanel, size_t cmdChannel = 0, double dt=0.002);
virtual ~FiniteStateMachine();
private:
void _run();
static void* _staticRun(void* obj);
std::vector<BaseState*> _states;
FSMRunMode _mode;
bool _running;
BaseState* _currentState;
BaseState* _nextState;
int _nextStateEnum;
size_t _cmdChannel;
CmdPanel *_cmdPanel;
LoopFunc *_runThread;
};
#endif // FSM_H