/* * fsm.h * * Created on: Oct 18, 2024 * Author: akeguo */ #ifndef INC_FSM_H_ #define INC_FSM_H_ #include "stdint.h" //typedef enum _STATE_t //{ // Manual = 0, // Auto, // Abnormal, // SetLaneChangeDistance, // SetBackwardsDistance, // LaneChangeMode, // Forwards, // Backwards, // TurnLeft, // TurnRight, // HALT //} STATE_t; 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; // 区域自动作业阶段:0-准备(允许手动),1-运行(自动逻辑) typedef enum RegionAuto_Phase { RegionAuto_Ready = 0, // 准备阶段:允许手动控制 RegionAuto_Running = 1 // 自动运行阶段:执行自动逻辑,禁止手动 } RegionAuto_Phase; 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_HeadToLeft_Backwards, Auto_Move_HeadToUp_Forwards, Auto_Move_HeadToUp_Backwards, Auto_Move_Horizontal_LaneChange_Left, Auto_Move_Horizontal_LaneChange_Right, Auto_Move_Vertical_LaneChange_Left, Auto_Move_Vertical_LaneChange_Left2, Auto_Move_Vertical_LaneChange_Right, Auto_Move_Vertical_LaneChange_Right2, 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 _SwingSTATE_t { SwingHALT = 0, SwingLeft = 1, SwingRight = 2, SwingHome=3, } SwingSTATE_t; typedef enum _TiltSTATE_t { TiltHALT = 0, TiltUP = 1, TiltDown = 2, TiltHome=3, TiltCurrentModeDown=5 } TiltSTATE_t; typedef enum _RougheningEndState_t { RougheningEndHALT = 0, RougheningEndSwingClockwise = 1, RougheningEndSwingAnticlockwise = 2, } RougheningEndState_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, VerticalChange_Delay1, VerticalChange_Delay2, VerticalChange_Delay3, } Lane_Vertical_ChangeState; typedef enum _horizontal_LaneChangeState { HorizontalChange_TurnToUP, HorizontalChange_TurnToDown, HorizontalChange_TurnToLeft, HorizontalChange_TurnToRight, HorizontalChange_DelayMove, HorizontalChange_End, HorizontalChange_StateZero, HorizontalChange_Delay1, HorizontalChange_Delay2, HorizontalChange_Delay3, HorizontalChange_Delay4, } Lane_Horizontal_ChangeState; typedef enum { Horizontal_No = 0, // 未定义 Horizontal_Head_To_Left_Flag = 1, // 水平向左 Horizontal_Head_To_Right_Flag = 2, // 水平向右 } Horizontal_LaneChangeFlag_t; typedef enum { Veritical_No = 0, //未定义 Veritical_To_Left_Flag = 1, //竖直向左 Veritical_To_Right_Flag = 2, //竖直向右 } Vertical_LaneChangeFlag_t; typedef enum { RegionAuto_Horizontal_Left = 1, // 区域自动水平作业 RegionAuto_Horizontal_Right = 2, // 区域自动水平作业 RegionAuto_Vertical_left = 3, // 区域自动竖直向左作业 RegionAuto_Vertical_Right = 4 // 区域自动竖直向右作业 } RegionAuto_t; typedef enum { Define_Task = 1, // 定义任务目标 Adjust_Pressure = 2, // 调整压力 Launch_Tool = 3, // 启动前端工具 Launch_Tool_Delay = 4, // 启动前端工具成功 Perform_Tasks = 5 // 开始执行任务 } RegionAutoMoveStart_t; typedef enum { Tilt_Manual_Mode = 0, // 升降推杆手动调整模式 Tilt_Auto_Mode = 1, // 升降推杆自动调整模式 } TiltWorkingMode_t; typedef enum { Serial_Mode_Config = 0, // 串口模式确定 Action_Execute = 1, // 动作执行 Action_Shut_down = 2 // 动作关闭 } GV_Main_Core_Mode_t; typedef enum { MoveTaskTimeCheck_finish = 0, // 自动作业后退定时结束 MoveTaskTimeCheck_start = 1, // 自动作业后退定时开始 }MoveTaskTimeCheck_t; typedef enum { InitialState_Detection_start = 1, // 上电遥控器状态自检开始 InitialState_Detection_finish = 2, // 上电遥控器状态自检通过 }InitialState_Detection_t; typedef enum { Wind_State_OFF = 0, // 风刀关闭 Wind_State_ON = 1, // 风刀开启 }Wind_State_t; typedef enum { EmegencyStop__CloseDevice = 0, // 关闭执行器 EmegencyStop_PowerOff = 1, // 断开电源 }EmegencyStop_State_t; extern MoveSTATE_t CurrentMoveState; extern SwingSTATE_t CurrentSwingState; extern TiltSTATE_t CurrentTiltState; //点头,抬头 extern LaneChangeSTATE_t CurrentLaneChangeSTATE; extern RougheningEndState_t CurrentRougheningEndState; //拉毛运动或者不动 extern SetSTATE_t CurrentSetState; //设置 extern RegionAuto_t CurrentRegionAuto; 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_ */