25_R1_chassis/User/device/cmd.h
2025-05-25 20:10:14 +08:00

151 lines
2.6 KiB
C

/*
该任务用于接收来自各个不同的控制方式所期望的控制指令 将其集中统一化后分发给各个模块
*/
#ifndef _CMD_H
#define _CMD_H
#include "struct_typedef.h"
#include "device.h"
#include "Action.h"
//遥控器状态
typedef enum{
RC_DR16,
RC_LD ,
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_C ;
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 struct
{
fp32 Vx;
fp32 Vy;
fp32 Vw;
}OpsHopeVector_t;
typedef struct {
OpsHopeVector_t out;
} CMD_ACTION_t;
//nuc数据
typedef struct {
uint8_t status_fromnuc;
uint8_t pit_status;
struct
{
float vx;
float vy;
float wz;
}navi;
struct
{
float posx;
float posy;
float dis;
}pick;
} CMD_NUC_t;
//导航数据
typedef enum{
POS_1,
POS_2,
POS_3,
}CMD_Chassis_navi_pos;
typedef enum{
RC,
NAVI,
STOP,
}CMD_Chassis_mode;
typedef struct{
CMD_Chassis_navi_pos pos;
CMD_Chassis_mode mode;
}CMD_Chassis_Ctrl_t;
typedef struct {
float vx;
float vy;
float wz;
}CMD_FOR_NAVI;
typedef struct {
int cmd_power_on_safe; // 上电安全标志
CMD_Chassis_Ctrl_t C_cmd;
//遥控器输出值
fp32 Vx;
fp32 Vy;
fp32 Vw;
fp32 throttle;
CMD_FOR_NAVI C_navi;//导航输出值
float camera_yaw;//nuc输出值
} CMD_t;
int8_t CMD_Init(CMD_t *cmd);
int8_t CMD_ParseRc(CMD_t *cmd,CMD_RC_t *rc);
int8_t CMD_CtrlSet(CMD_t *cmd,const CMD_RC_t *rc);
int8_t CMD_ParseAction(CMD_t *cmd,CMD_ACTION_t *act);
int8_t CMD_ParseNuc(CMD_t *cmd,CMD_NUC_t *n);
#endif