From 2377a13deae0450e545b763923534fc551bd4b28 Mon Sep 17 00:00:00 2001 From: Xiaocheng <2544262366@qq.com> Date: Thu, 29 Jan 2026 17:39:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B5=E6=9C=BA=E5=A4=A7YAW=E5=8F=8D?= =?UTF-8?q?=E9=A6=88=E5=A4=9A=E4=BA=86=E4=B8=80=E4=B8=AA=CE=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 7 ++++--- User/module/cmd.h | 4 +++- User/module/config.c | 4 ++-- User/module/gimbal.c | 20 +++----------------- User/task/Task8.c | 8 +++----- User/task/init.c | 4 ++-- User/task/rc.c | 4 +--- User/task/tempCodeRunnerFile.c | 1 - User/task/user_task.h | 2 +- 9 files changed, 19 insertions(+), 35 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9380cb4..abb2cd3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,13 +71,13 @@ target_sources(${CMAKE_PROJECT_NAME} PRIVATE User/component/user_math.c # User/device sources + User/device/ai.c User/device/bmi088.c User/device/dr16.c User/device/motor.c User/device/motor_dm.c User/device/motor_rm.c User/device/remote_control.c - User/device/ai.c # User/module sources User/module/chassis.c @@ -87,6 +87,8 @@ target_sources(${CMAKE_PROJECT_NAME} PRIVATE User/module/shoot.c # User/task sources + User/task/Task8.c + User/task/ai.c User/task/atti_esti.c User/task/chassis.c User/task/cmd.c @@ -94,9 +96,8 @@ target_sources(${CMAKE_PROJECT_NAME} PRIVATE User/task/init.c User/task/rc.c User/task/shoot.c + User/task/tempCodeRunnerFile.c User/task/user_task.c - User/task/ai.c - User/task/Task8.c ) # Add include paths diff --git a/User/module/cmd.h b/User/module/cmd.h index 37ef958..71b7147 100644 --- a/User/module/cmd.h +++ b/User/module/cmd.h @@ -48,7 +48,7 @@ typedef struct struct { - + uint8_t head; float ch_l_x; /* 遥控器左侧摇杆横轴值,上为正 */ float ch_l_y; /* 遥控器左侧摇杆纵轴值,右为正 */ float ch_r_x; /* 遥控器右侧摇杆横轴值,上为正 */ @@ -63,6 +63,8 @@ typedef struct CMD_SwitchPos_t key_G; CMD_SwitchPos_t key_H; + + uint8_t end; int16_t knob_left; // 左旋钮 int16_t knob_right; // 右旋钮 } __attribute__((packed)) ET16s; diff --git a/User/module/config.c b/User/module/config.c index 0d5c720..8d1dc79 100644 --- a/User/module/config.c +++ b/User/module/config.c @@ -145,8 +145,8 @@ static const Config_Param_t config = { }, .pid.yaw_4310_motor_omega = { - .k = 0.1f, - .p = 0.3f, + .k = 0.5f, + .p = 0.5f, .i = 0.0f, .d = 0.0f, .i_limit = 0.0f, diff --git a/User/module/gimbal.c b/User/module/gimbal.c index 47a198f..4b64865 100644 --- a/User/module/gimbal.c +++ b/User/module/gimbal.c @@ -331,24 +331,10 @@ g->setpoint.eulr.pit = g_cmd->set_pitch; /*4310大YAW控制 这里是单环控制的,有需要加双环 */ - // /* 大YAW角度环:使用环形误差,避免过零点抽搐 */ - // float yaw4310_err = CircleError( - // g->setpoint.yaw_4310, - // g->feedback.motor.yaw_6020_motor_feedback.rotor_abs_angle, - // M_2PI - // ); - // /* 构造等效的包角设定值,使 PID 内部误差=set-ref=环形误差 */ - // float yaw4310_set_wrapped = g->feedback.motor.yaw_6020_motor_feedback.rotor_abs_angle + yaw4310_err; - // yaw_omega_set_point = PID_Calc( - // &g->pid.yaw_4310_angle, - // yaw4310_set_wrapped, - // g->feedback.motor.yaw_6020_motor_feedback.rotor_abs_angle, - // g->feedback.motor.yaw_6020_motor_feedback.rotor_speed, - // g->dt - // ); -yaw_omega_set_point =PID_Calc(&g->pid.yaw_4310_angle,3.90f, - g->feedback.motor.yaw_4310_motor_feedback.rotor_abs_angle,g->feedback.motor.yaw_6020_motor_feedback.rotor_speed,g->dt); + +yaw_omega_set_point =PID_Calc(&g->pid.yaw_4310_angle,g->setpoint.yaw_4310, + g->feedback.motor.yaw_6020_motor_feedback.rotor_abs_angle,g->feedback.motor.yaw_6020_motor_feedback.rotor_speed,g->dt); g->out.yaw_4310 = PID_Calc(&g->pid.yaw_4310_omega,yaw_omega_set_point, diff --git a/User/task/Task8.c b/User/task/Task8.c index ea6f784..fb16f8d 100644 --- a/User/task/Task8.c +++ b/User/task/Task8.c @@ -6,8 +6,7 @@ /* Includes ----------------------------------------------------------------- */ #include "task/user_task.h" /* USER INCLUDE BEGIN */ -#include "module/cmd.h" -#include "bsp/uart.h" + /* USER INCLUDE END */ /* Private typedef ---------------------------------------------------------- */ @@ -15,7 +14,7 @@ /* Private macro ------------------------------------------------------------ */ /* Private variables -------------------------------------------------------- */ /* USER STRUCT BEGIN */ -CMD_RC_t remote; + /* USER STRUCT END */ /* Private function --------------------------------------------------------- */ @@ -37,10 +36,9 @@ void Task_Task8(void *argument) { while (1) { tick += delay_tick; /* 计算下一个唤醒时刻 */ /* USER CODE BEGIN */ - osMessageQueueGet(task_runtime.msgq.RC_REMOTE, &remote, NULL, 0); + // osMessageQueueGet(task_runtime.msgq.RC_REMOTE, &remote, NULL, 0); - BSP_UART_Transmit(BSP_UART_1, (uint8_t *)&remote, sizeof(CMD_RC_t), false); /* USER CODE END */ diff --git a/User/task/init.c b/User/task/init.c index 634efb0..87bff94 100644 --- a/User/task/init.c +++ b/User/task/init.c @@ -37,7 +37,7 @@ void Task_Init(void *argument) { task_runtime.thread.cmd = osThreadNew(Task_cmd, NULL, &attr_cmd); task_runtime.thread.gimbal = osThreadNew(Task_gimbal, NULL, &attr_gimbal); task_runtime.thread.shoot = osThreadNew(Task_shoot, NULL, &attr_shoot); - // task_runtime.thread.ai = osThreadNew(Task_ai, NULL, &attr_ai); + task_runtime.thread.ai = osThreadNew(Task_ai, NULL, &attr_ai); task_runtime.thread.Task8 = osThreadNew(Task_Task8, NULL, &attr_Task8); // 创建消息队列 @@ -55,7 +55,7 @@ void Task_Init(void *argument) { task_runtime.msgq.gimbal.ai.feedback = osMessageQueueNew(2u, sizeof(Gimbal_feedback_t),NULL); task_runtime.msgq.gimbal.ai.g_cmd = osMessageQueueNew(2u, sizeof(AI_cmd_t),NULL); task_runtime.msgq.shoot.ai.s_cmd = osMessageQueueNew(2u, sizeof(AI_cmd_t),NULL); - task_runtime.msgq.RC_REMOTE = osMessageQueueNew(2u, sizeof(CMD_RC_t), NULL); + /* USER MESSAGE END */ osKernelUnlock(); // 解锁内核 diff --git a/User/task/rc.c b/User/task/rc.c index 30d1dac..130d17d 100644 --- a/User/task/rc.c +++ b/User/task/rc.c @@ -60,9 +60,7 @@ void Task_rc(void *argument) { osMessageQueueReset(task_runtime.msgq.cmd.raw.rc); osMessageQueuePut(task_runtime.msgq.cmd.raw.rc, &cmd_rc, 0, 0); - osMessageQueueReset(task_runtime.msgq.RC_REMOTE); - osMessageQueuePut(task_runtime.msgq.RC_REMOTE, &cmd_rc, 0, 0); - + /* USER CODE END */ osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */ } diff --git a/User/task/tempCodeRunnerFile.c b/User/task/tempCodeRunnerFile.c index 6c678fc..e69de29 100644 --- a/User/task/tempCodeRunnerFile.c +++ b/User/task/tempCodeRunnerFile.c @@ -1 +0,0 @@ -feedback \ No newline at end of file diff --git a/User/task/user_task.h b/User/task/user_task.h index 7773c2d..0042238 100644 --- a/User/task/user_task.h +++ b/User/task/user_task.h @@ -105,7 +105,7 @@ typedef struct { }ai; }shoot; - osMessageQueueId_t RC_REMOTE; + } msgq; /* USER MESSAGE END */