/* 该文件cmd用于对各种命令的中转处理,以防止在remote遥控器任务中过于冗杂堆叠 */ #ifndef __CMD_H #define __CMD_H #include "bsp/struct_typedef.h" #include "device/device.h" /* 遥控器类型 */ // 遥控器状态 typedef enum { RC_DR16, RC_LD, RC_ET16s, Control_loss } rc_type_t; /* 拨杆位置 */ typedef enum { CMD_SW_ERR = 0, CMD_SW_UP = 1, CMD_SW_MID = 3, CMD_SW_DOWN = 2, } CMD_SwitchPos_t; // 遥控器数据 typedef struct { rc_type_t rc_type; struct { float ch_l_x; /* 遥控器左侧摇杆横轴值,上为正 */ float ch_l_y; /* 遥控器左侧摇杆纵轴值,右为正 */ float ch_r_x; /* 遥控器右侧摇杆横轴值,上为正 */ float ch_r_y; /* 遥控器右侧摇杆纵轴值,右为正 */ CMD_SwitchPos_t sw_r; /* 右侧拨杆位置 */ CMD_SwitchPos_t sw_l; /* 左侧拨杆位置 */ } __attribute__((packed)) DJ; struct { float ch_l_x; /* 遥控器左侧摇杆横轴值,上为正 */ float ch_l_y; /* 遥控器左侧摇杆纵轴值,右为正 */ float ch_r_x; /* 遥控器右侧摇杆横轴值,上为正 */ float ch_r_y; /* 遥控器右侧摇杆纵轴值,右为正 */ CMD_SwitchPos_t key_A; CMD_SwitchPos_t key_B; CMD_SwitchPos_t key_C; CMD_SwitchPos_t key_D; CMD_SwitchPos_t key_E; CMD_SwitchPos_t key_F; CMD_SwitchPos_t key_G; CMD_SwitchPos_t key_H; int16_t knob_left; // 左旋钮 int16_t knob_right; // 右旋钮 } __attribute__((packed)) LD; } __attribute__((packed)) CMD_RC_t; /*底盘模式*/ typedef enum { STOP, // 底盘平行 RC, // 遥控模式 CHASSIS_MODE_BREAK, /* 刹车模式,电机闭环控制保持静止。用于机器人停止状态 */ CHASSIS_MODE_RELAX, /* 放松模式,电机不输出。一般情况底盘初始化之后的模式 */ CHASSIS_MODE_FOLLOW_GIMBAL, /* 通过闭环控制使车头方向跟随云台 */ CHASSIS_MODE_ROTOR, /* 小陀螺模式,通过闭环控制使底盘不停旋转 */ } Chassis_mode_t; typedef struct { int cmd_power_on_safe; // 上电安全标志 Chassis_mode_t mode; // 遥控器输出值 fp32 Vx; fp32 Vy; fp32 Vw; fp32 throttle; fp32 x_l; fp32 y_l; } Chassis_CMD_t; /* 云台模式 */ typedef enum { GIMBAL_MODE_RELAX, /* 放松模式,电机不输出。一般情况云台初始化之后的模式 */ GIMBAL_MODE_ABSOLUTE, /* 绝对坐标系控制,控制在空间内的绝对姿态 */ GIMBAL_MODE_RELATIVE, /* 相对坐标系控制,控制相对于底盘的姿态 */ } Gimbal_Mode_t; typedef struct { Gimbal_Mode_t mode; float delta_yaw_4310; float delta_pitch_4310; float delta_yaw_6020; } Gimbal_CMD_t; void CMD_Init(Chassis_CMD_t *cmd, Gimbal_CMD_t *g_cmd); void CMD_ParseRc(Chassis_CMD_t *cmd, CMD_RC_t *rc, Gimbal_CMD_t *g_cmd); static void CMD_remote(const CMD_RC_t *rc, Chassis_CMD_t *cmd, Gimbal_CMD_t *g_cmd); int8_t CMD_CtrlSet(Chassis_CMD_t *cmd, const CMD_RC_t *rc, Gimbal_CMD_t *g_cmd); static void CMD_RcLostLogic(Chassis_CMD_t *cmd,Gimbal_CMD_t *g_cmd); #endif