R2_UP/User/device/cmd.h

184 lines
2.8 KiB
C
Raw Normal View History

2025-03-12 10:46:02 +08:00
/*
*/
/*
RC模式12
*/
#ifndef _CMD_H
#define _CMD_H
#include "struct_typedef.h"
#include "device.h"
#define MID (0x09)
typedef enum{
RC,//遥控器控制,左按键上
MID_NAVI,//雷达导航
}CMD_Chassis_CtrlType_e;
typedef enum{
RELAXED,//异常模式
NORMAL,
GYRO_STAY,
RC_MODE1,
RC_NO_MODE,
RC_MODE2,
RC_MODE3,
RC_MODE4,
AUTO_NAVI
}CMD_Chassis_mode_e;
/*该结构体负责接收和解析地盘模块所需要的控制指令*/
typedef struct{
CMD_Chassis_CtrlType_e type;
CMD_Chassis_mode_e mode;
}CMD_Chassis_Ctrl_t;
/* 拨杆位置 */
typedef enum {
CMD_SW_ERR = 0,
CMD_SW_UP = 1,
CMD_SW_MID = 3,
CMD_SW_DOWN = 2,
} CMD_SwitchPos_t;
/*遥控器值使用CMD_RcLogic函数传入CMD_t结构体*/
typedef struct {
float ch_l_x; /* 遥控器左侧摇杆横轴值,上为正 */
float ch_l_y; /* 遥控器左侧摇杆纵轴值,右为正 */
float ch_r_x; /* 遥控器右侧摇杆横轴值,上为正 */
float ch_r_y; /* 遥控器右侧摇杆纵轴值,右为正 */
float ch_res; /* 第五通道值 */
CMD_SwitchPos_t sw_r; /* 右侧拨杆位置 */
CMD_SwitchPos_t sw_l; /* 左侧拨杆位置 */
uint16_t key; /* 按键值 */
uint16_t res; /* 保留,未启用 */
} __attribute__((packed))CMD_RC_t;
typedef struct
{
fp32 Vx;
fp32 Vy;
fp32 Vw;
}OpsHopeVector_t;
typedef struct
{
fp32 x;
fp32 y;
fp32 z;
int cnt_point;//计数点
}ops_point;
typedef struct {
OpsHopeVector_t out;
int flag;//传递flag触发标志位
} CMD_ACTION_t;
typedef struct {
uint8_t status_fromnuc;
uint8_t ctrl_status; //取其中每一个二进制位用作通信
struct
{
fp32 vx;
fp32 vy;
fp32 wz;
}navi;
struct
{
fp32 posx;
fp32 posy;
fp32 posw;
}pick;
struct
{
fp32 angle;
}sick_cali;
} CMD_NUC_t;
typedef struct{
fp32 posy;
fp32 posx;
fp32 posw;
}CMD_FOR_PICK;
typedef struct {
fp32 vx;
fp32 vy;
fp32 wz;
}CMD_FOR_NAVI;
typedef struct {
uint8_t cmd_status;
uint8_t raw_status;
uint8_t status[7];
fp32 Vx;
fp32 Vy;
fp32 Vw;
fp32 poscamear;
fp32 key_ctrl_l;
fp32 key_ctrl_r;
fp32 forsick_wz;
CMD_Chassis_Ctrl_t C_cmd;
CMD_FOR_NAVI C_navi;
} CMD_t;
int8_t CMD_Init(CMD_t *cmd);
int8_t CMD_ParseRc(CMD_t *cmd,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);
int8_t CMD_SwitchStatus(CMD_t *cmd);
int8_t CMD_CtrlSet(CMD_t *cmd);
#endif