From 0f45c981a605bae19b1c0e8f2bba9aef40da0eaf Mon Sep 17 00:00:00 2001 From: Glz <354338225@qq.com> Date: Sun, 30 Jun 2024 15:55:49 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=8B=E5=8F=91=E5=BB=B6?= =?UTF-8?q?=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/gl_tracking.c | 87 ++++++++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/app/gl_tracking.c b/app/gl_tracking.c index a2bbee0..05b1b18 100644 --- a/app/gl_tracking.c +++ b/app/gl_tracking.c @@ -14,6 +14,7 @@ float (*rpts)[2]; int rpts_num; float last_pure_angle = 0.0f; int8_t turn_flag = 0; +int circle_flag = 1; // 计算最小二乘法斜率的函数 float leastSquaresSlope(float points[][2], int n) { @@ -293,45 +294,67 @@ void MidLineTrack() // // float dn_near = Q_sqrt(dx_near * dx_near + dy_near * dy_near); // // float error_near = -atan2f(dx_near, dy_near) * 180 / PI32; } - if (circle_type == CIRCLE_LEFT_IN || circle_type == CIRCLE_RIGHT_IN ) { - state_type = CIRCLE_STATE; - } - if (circle_type == CIRCLE_LEFT_RUNNING || circle_type == CIRCLE_RIGHT_RUNNING || circle_type == CIRCLE_RIGHT_OUT || circle_type == CIRCLE_LEFT_OUT || circle_type == CIRCLE_LEFT_END || circle_type == CIRCLE_RIGHT_END) - { - state_type = CIRCLE_RUNNING_STATE; - } - if (barrier_type == BARRIER_LEFT_BEGIN || barrier_type == BARRIER_LEFT_RUNNING || barrier_type == BARRIER_RIGHT_BEGIN || barrier_type == BARRIER_RIGHT_RUNNING) - { - state_type = BARRIER_STATE; - } - - - if (cross_type == CROSS_BEGIN || cross_type == CROSS_IN) { - state_type = STRAIGHT_STATE; - } - last_state = state_type; - if (state_type == STRAIGHT_STATE) { - aim_distance = straight_aim; - } else if (state_type == TURN_STATE) { - aim_distance = mid_aim; - } - // }else{ - // aim_distance = common_aim; - // } - if (last_state == STRAIGHT_STATE && (state_type == TURN_STATE || state_type == CIRCLE_STATE)) { - turn_flag = 1; + if (circle_type == CIRCLE_LEFT_IN || circle_type == CIRCLE_RIGHT_IN) { + state_type = CIRCLE_STATE; timer_clear(TIM_3); timer_start(TIM_3); } - if (turn_flag == 1) { - aim_distance = turn_aim; - + if (circle_type == CIRCLE_LEFT_RUNNING || circle_type == CIRCLE_RIGHT_RUNNING || circle_type == CIRCLE_RIGHT_OUT || circle_type == CIRCLE_LEFT_OUT || circle_type == CIRCLE_LEFT_END || circle_type == CIRCLE_RIGHT_END) { + if (circle_flag == 1) + { + state_type = CIRCLE_STATE; + } + uint16 ti = timer_get(TIM_3); - if (ti >= 2000) { - turn_flag = 0; + if (ti >= 1000) { timer_stop(TIM_3); timer_clear(TIM_3); + + circle_flag = 0; } + if (circle_flag == 0) + { + state_type = CIRCLE_RUNNING_STATE; + } + } + + if (circle_type == CIRCLE_NONE) + { + circle_flag = 1; + } + + + + + if (barrier_type == BARRIER_LEFT_BEGIN || barrier_type == BARRIER_LEFT_RUNNING || barrier_type == BARRIER_RIGHT_BEGIN || barrier_type == BARRIER_RIGHT_RUNNING) { + state_type = BARRIER_STATE; + } + + if (cross_type == CROSS_BEGIN || cross_type == CROSS_IN) { + state_type = STRAIGHT_STATE; + } + // last_state = state_type; + if (state_type == STRAIGHT_STATE) { + aim_distance = straight_aim; + } else if (state_type == TURN_STATE) { + aim_distance = turn_aim; + } + + // if (last_state == STRAIGHT_STATE && (state_type == TURN_STATE || state_type == CIRCLE_STATE)) { + // turn_flag = 1; + // timer_clear(TIM_3); + // timer_start(TIM_3); + // } + // if (turn_flag == 1) { + // aim_distance = turn_aim; + + // uint16 ti = timer_get(TIM_3); + // if (ti >= 2000) { + // turn_flag = 0; + // timer_stop(TIM_3); + // timer_clear(TIM_3); + // } + // } }