/* * fsm.h * * Created on: Oct 18, 2024 * Author: akeguo */ #ifndef INC_FSM_H_ #define INC_FSM_H_ #include #include #include "BHBF_ROBOT.h" #include "robot_state.h" #include "BSP/bsp_include.h" #include "MSP/msp_PID.h" #include "MSP/msp_MK32_1.h" extern char IsRobotHaltSateChangedFlag; typedef enum _MoveSTATE_t { Move_HALT = 0, //停止 Move_Forwards, //前进,没有纠偏的前进 Move_Backwards, //后退,没有纠偏的前进 Move_TurnLeft, //左转 Move_TurnRight, //右转 Move_Vertical_Task_Forwards, //竖直方向前进 保持竖直运行 Move_Vertical_Task_Backwards, //竖直方向后退前进 保持竖直运行 Move_Horizontal_Task_Forwards_Left, //水平方向前进,保持水平方向 Move_Horizontal_Task_Backwards_Left, //水平方向后退,保持水平方向 Move_Horizontal_Task_Forwards_Right, //水平方向前进,保持水平方向 Move_Horizontal_Task_Backwards_Right, //水平方向后退,保持水平方向 Move_Head_To_Left_Enum, Move_Head_To_UP_Enum, Move_Head_To_Right_Enum, Move_Head_To_Down_Enum, } MoveSTATE_t; typedef enum _Motor_Power_STATE_t { Power_OFF = 0, Power_ON = 1 } Motor_Power_STATE_t; typedef enum _LaneChangeSTATE_t { Lane_HALT = 0, //自动模式停止 Lane_Turn_To_Straight_Up, //自动 运行到竖直向上 Lane_Turn_To_Straight_Down, //自动 运行到竖直向下 Lane_Turn_To_Horizontal_Left, // Lane_Turn_To_Horizontal_Right, // Lane_Vertical_Task_Move_Forwards, //竖直方向前进 保持竖直运行 Lane_Vertical_Task_Move_Backwards, //竖直方向后退前进 保持竖直运行 Lane_Horizontal_Task_Move_Forwards, //水平方向前进,保持水平方向 Lane_Horizontal_Task_Move_Backwards, //水平方向后退,保持水平方向 } LaneChangeSTATE_t; //设置 换道距离和设置后退距离 typedef enum _laneChangeControlSTATE_t { Lane_Change_Stop = 0, Lane_Change_Start, } LaneChangeControlSTATE; //自动模式下运行, typedef enum _autoMoveSTATE_t { Auto_Move_Start = 0, Auto_Move_HeadToRight_Backwards, Auto_Move_HeadToUp_Forwards, Auto_Move_HeadToLeft_Backwards, Auto_Move_HeadToUp_Backwards, Auto_Move_Vertical_Left_LaneChange_Up, Auto_Move_Vertical_Left_LaneChange_Down, Auto_Move_Vertical_Right_LaneChange_Up, Auto_Move_Vertical_Right_LaneChange_Down, Auto_Move_Horizontal_Left_LaneChange, Auto_Move_Horizontal_Right_LaneChange, Auto_Move_Stop, Auto_Move_Time_Wait, Auto_Move_Time_Wait2, } AutoMoveSTATE_t; //设置 换道距离和设置后退距离 typedef enum _SetSTATE_t { OtherMode = 0, SetLaneChangeDistance, SetBackwardsDistance, } SetSTATE_t; typedef enum _PaintGunSTATE_t { PaintGunOFF = 0, PaintGunON = 1 } PaintGunSTATE_t; typedef enum { MoveTaskTimeCheck_finish = 0, // 自动作业后退定时结束 MoveTaskTimeCheck_start = 1, // 自动作业后退定时开始 }MoveTaskTimeCheck_t; typedef struct _transition_t { int State; //状态 void (*robotRun)(void); //执行相关动作 } transition_t; typedef enum _vertical_LaneChangeState { VerticalChange_TurnToUP, VerticalChange_TurnToDown, VerticalChange_TurnToLeft, VerticalChange_TurnToRight, VerticalChange_DelayMove, VerticalChange_End, VerticalChange_StateZero, //0---6 } Lane_Vertical_ChangeState; typedef enum _horizontal_LaneChangeState { HorizontalChange_TurnToUP, HorizontalChange_TurnToDown, HorizontalChange_TurnToLeft, HorizontalChange_TurnToRight, HorizontalChange_DelayMove, HorizontalChange_End, HorizontalChange_StateZero, } Lane_Horizontal_ChangeState; typedef enum _iV_Information_State { IV_Ding_Su_Shui_Ping_Hou_Tui, //定速巡航水平后退 IV_Ding_Su_Shui_Ping_Qian_Jin, //定速巡航水平前进 IV_Ding_Su_Shu_Zhi_Qian_Jin, //定速巡航竖直前进 IV_Ding_Su_Shu_Zhi_Hou_Tui, //定速巡航竖直后退 IV_Ding_Su_Shou_Dong_Hou_Tui, //定速巡航手动后退 IV_Ding_Su_Shou_Dong_Qian_Jin, //定速巡航手动前进 IV_Shui_Ping_Huang_Dao, //水平换道 IV_Shu_Zhi_Huang_Dao, //竖直换道 IV_Shui_Ping_Mo_Shi_Qian_Jin, //水平模式前进 IV_Shui_Ping_Mo_Shi_Hou_Tui, //水平模式后退 IV_Shu_Zhi_Mo_Shi_Qian_Jin, //垂直模式前进 IV_Shu_Zhi_Mo_Shi_Hou_Tui, //垂直模式后退 IV_Shou_Dong_Qian_Jin, //手动控制前进 IV_Shou_Dong_Hou_Tui, //手动控制后退 IV_Shou_Dong_Zuo_Zhuan, //手动控制左转 IV_Shou_Dong_You_Zhuan, //手动控制右转 } IV_Information_State; extern MoveSTATE_t CurrentMoveState; extern PaintGunSTATE_t Current_PaintGun_STATE;//机器人喷枪状态 extern LaneChangeSTATE_t CurrentLaneChangeSTATE; extern Lane_Horizontal_ChangeState CurrentHorizontal_ChangeState; extern Lane_Vertical_ChangeState Current_Vertical_ChangeState; extern char is_upper_computer_take_over_control; extern char Switch_Off_Flag; void action_perfrom(transition_t transitions[], int length, int state); void GF_Dispatch(); void action_perfrom(); void Fsm_Init(); #endif /* INC_FSM_H_ */