diff --git a/User/module/gimbal.h b/User/module/gimbal.h index 2485ed3..fb8d3ab 100644 --- a/User/module/gimbal.h +++ b/User/module/gimbal.h @@ -27,6 +27,17 @@ extern "C" { /* Exported macro ----------------------------------------------------------- */ /* Exported types ----------------------------------------------------------- */ + +/* 在 Gimbal_Vision_t 结构体中增加前馈成员 */ +typedef struct { + uint8_t target_found; + float yaw; + float pit; + float yaw_v_ff; // Yaw 速度前馈 + float pit_v_ff; // Pitch 速度前馈 + // 如有需要可增加加速度前馈 a_ff +} Gimbal_Vision_t; + typedef enum { GIMBAL_MODE_RELAX, /* 放松模式,电机不输出。一般情况云台初始化之后的模式 */ GIMBAL_MODE_ABSOLUTE, /* 绝对坐标系控制,控制在空间内的绝对姿态 */ @@ -39,6 +50,8 @@ typedef struct { float yaw; /* 视觉解算出的空间目标绝对 Yaw 角度 */ float pit; /* 视觉解算出的空间目标绝对 Pitch 角度 */ uint8_t target_found; /* 视觉是否已锁定目标 (0: 未锁定, 1: 锁定) */ + float yaw_v_ff; // Yaw 速度前馈 + float pit_v_ff; // Pitch 速度前馈 } Gimbal_Vision_t; typedef struct { diff --git a/User/task/ai.c b/User/task/ai.c index 5063dd5..81ec2d2 100644 --- a/User/task/ai.c +++ b/User/task/ai.c @@ -94,12 +94,16 @@ static void AI_RxCpltCallback(void) { vision_data.target_found = 1; vision_data.yaw = ai_rx_data.yaw; vision_data.pit = ai_rx_data.pitch; + vision_data.yaw_v_ff = ai_rx_data.yaw_vel; + vision_data.pit_v_ff = ai_rx_data.pitch_vel; // ai_shoot_cmd.mode = SHOOT_MODE_READY; break; case 2: /* 控制云台且开火 */ vision_data.target_found = 1; vision_data.yaw = ai_rx_data.yaw; vision_data.pit = ai_rx_data.pitch; + vision_data.yaw_v_ff = ai_rx_data.yaw_vel; + vision_data.pit_v_ff = ai_rx_data.pitch_vel; // ai_shoot_cmd.mode = SHOOT_MODE_FIRE; break; default: