148 lines
3.7 KiB
C
148 lines
3.7 KiB
C
/*
|
|
控制命令
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#include "ahrs.h"
|
|
|
|
typedef enum {
|
|
CHASSIS_MODE_RELAX, /* 放松模式,电机不输出。一般情况底盘初始化之后的模式 */
|
|
CHASSIS_MODE_DAMP, /* 阻尼模式,电机闭环控制保持阻尼,用于安全模式放松 */
|
|
CHASSIS_MODE_RECOVER, /* 恢复模式,电机闭环控制恢复到初始位置。用于机器人上电后恢复到初始位置 */
|
|
CHASSIS_MODE_BREAK, /* 刹车模式,电机闭环控制保持静止。用于机器人停止状态 */
|
|
CHASSIS_MODE_POSITION, /* 位置模式,电机闭环控制保持在指定位置 */
|
|
CHASSIS_MODE_FOLLOW, /* 通过闭环控制使车头方向跟随遥控器 */
|
|
} CMD_ChassisMode_t;
|
|
|
|
typedef enum {
|
|
CHASSIS_ACTION_NONE, /* 无动作 */
|
|
CHASSIS_ACTION_STAND, /* 站立动作 */
|
|
CHASSIS_ACTION_WALK, /* 行走动作 */
|
|
CHASSIS_ACTION_TROT, /* 小跑动作 */
|
|
CHASSIS_ACTION_JUMP, /* 跳跃动作 */
|
|
CHASSIS_ACTION_RUN,
|
|
CHASSIS_ACTION_NUM,
|
|
}CMD_ChassisAction_t;
|
|
|
|
/* 底盘控制命令 */
|
|
typedef struct {
|
|
CMD_ChassisMode_t mode; /* 底盘运行模式 */
|
|
CMD_ChassisAction_t action; /* 底盘动作 */
|
|
float delta_hight; /* 底盘高度,单位:米 */
|
|
MoveVector_t ctrl_vec; /* 底盘控制向量 */
|
|
} CMD_ChassisCmd_t;
|
|
|
|
typedef struct {
|
|
AHRS_Eulr_t delta_eulr; /* 云台欧拉角变化量 */
|
|
} CMD_BodyCmd_t;
|
|
|
|
/* 拨杆位置 */
|
|
typedef enum {
|
|
CMD_SW_ERR = 0,
|
|
CMD_SW_UP = 1,
|
|
CMD_SW_MID = 3,
|
|
CMD_SW_DOWN = 2,
|
|
} CMD_SwitchPos_t;
|
|
|
|
|
|
/* 位移灵敏度参数 */
|
|
typedef struct {
|
|
float move_sense; /* 移动灵敏度 */
|
|
float move_fast_sense; /* 加速灵敏度 */
|
|
float move_slow_sense; /* 减速灵敏度 */
|
|
} CMD_Move_Params_t;
|
|
|
|
|
|
/* AI行为状态 */
|
|
typedef enum {
|
|
AI_STATUS_STOP, /* 停止状态 */
|
|
AI_STATUS_AUTOMATIC /* 自动状态 */
|
|
} CMD_AI_Status_t;
|
|
|
|
|
|
typedef struct {
|
|
bool host_overwrite; /* 是否Host控制 */
|
|
|
|
CMD_AI_Status_t ai_status; /* AI状态 */
|
|
|
|
CMD_ChassisCmd_t chassis; /* 底盘控制命令 */
|
|
CMD_BodyCmd_t body; /* 云台控制命令 */
|
|
} CMD_t;
|
|
|
|
|
|
typedef struct {
|
|
float ch_r_x; /* 遥控器左侧摇杆横轴值,上为正 */
|
|
float ch_r_y; /* 遥控器左侧摇杆纵轴值,右为正 */
|
|
float ch_l_x; /* 遥控器右侧摇杆横轴值,上为正 */
|
|
float ch_l_y; /* 遥控器右侧摇杆纵轴值,右为正 */
|
|
|
|
CMD_SwitchPos_t sw_r; /* 右侧拨杆位置 */
|
|
CMD_SwitchPos_t sw_l; /* 左侧拨杆位置 */
|
|
|
|
float ch_res; /* 第五通道值 */
|
|
|
|
} CMD_RC_t;
|
|
|
|
|
|
|
|
typedef struct {
|
|
AHRS_Eulr_t gimbal_delta; /* 欧拉角的变化量 */
|
|
|
|
struct {
|
|
float vx; /* x轴移动速度 */
|
|
float vy; /* y轴移动速度 */
|
|
float wz; /* z轴转动速度 */
|
|
} chassis_move_vec; /* 底盘移动向量 */
|
|
|
|
bool fire; /* 开火状态 */
|
|
} CMD_Host_t;
|
|
|
|
/**
|
|
* @brief 解析行为命令
|
|
*
|
|
* @param rc 遥控器数据
|
|
* @param cmd 主结构体
|
|
*/
|
|
int8_t CMD_Init(CMD_t *cmd);
|
|
|
|
// /**
|
|
// * @brief 检查是否启用上位机控制指令覆盖
|
|
// *
|
|
// * @param cmd 主结构体
|
|
// * @return true 启用
|
|
// * @return false 不启用
|
|
// */
|
|
// bool CMD_CheckHostOverwrite(CMD_t *cmd);
|
|
|
|
/**
|
|
* @brief 解析命令
|
|
*
|
|
* @param rc 遥控器数据
|
|
* @param cmd 命令
|
|
* @param dt_sec 两次解析的间隔
|
|
* @return int8_t 0对应没有错误
|
|
*/
|
|
int8_t CMD_ParseRc(CMD_RC_t *rc, CMD_t *cmd, float dt_sec);
|
|
|
|
// /**
|
|
// * @brief 解析上位机命令
|
|
// *
|
|
// * @param host host数据
|
|
// * @param cmd 命令
|
|
// * @param dt_sec 两次解析的间隔
|
|
// * @return int8_t 0对应没有错误
|
|
// */
|
|
// int8_t CMD_ParseHost(const CMD_Host_t *host, CMD_t *cmd, float dt_sec);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|