119 lines
3.2 KiB
C
119 lines
3.2 KiB
C
|
||
/*
|
||
该文件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 |