diff --git a/app/gl_common.h b/app/gl_common.h index 7e22801..da035c7 100644 --- a/app/gl_common.h +++ b/app/gl_common.h @@ -14,6 +14,7 @@ #define FILTER_KERNELSIZE (7) // 滤波核大小 #define SELFADAPT_OFFSET (8) // 适应性块大小 #define PIXPERMETER (70.0f) +#define PIXPERMETER_ACROSS (80.0f) #define RESAMPLEDIST (0.02f) #define ANGLEDIST (0.2f) #define ANGLEDIST_barrier (0.06f) diff --git a/app/gl_data.c b/app/gl_data.c index a5c7b25..07cf8d5 100644 --- a/app/gl_data.c +++ b/app/gl_data.c @@ -46,8 +46,12 @@ int32_t mid_right_count; float angle_new_left[PT_MAXLEN]; float angle_new_right[PT_MAXLEN]; +float angle_new_left_barrier[PT_MAXLEN]; +float angle_new_right_barrier[PT_MAXLEN]; int angle_new_left_num; int angle_new_right_num; +int angle_new_left_num_barrier; +int angle_new_right_num_barrier; float far_angle_new_left[PT_MAXLEN]; float far_angle_new_right[PT_MAXLEN]; int far_angle_new_left_num; @@ -57,8 +61,12 @@ uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W]; float angle_left[PT_MAXLEN]; float angle_right[PT_MAXLEN]; +float angle_left_barrier[PT_MAXLEN]; +float angle_right_barrier[PT_MAXLEN]; int angle_left_num; int angle_right_num; +int angle_left_barrier_num; +int angle_right_barrier_num; float far_angle_left[PT_MAXLEN]; float far_angle_right[PT_MAXLEN]; int far_angle_left_num; diff --git a/app/gl_data.h b/app/gl_data.h index b4243f0..4d53dd7 100644 --- a/app/gl_data.h +++ b/app/gl_data.h @@ -57,8 +57,12 @@ extern int32_t mid_right_count; extern float angle_new_left[PT_MAXLEN]; extern float angle_new_right[PT_MAXLEN]; +extern float angle_new_left_barrier[PT_MAXLEN]; +extern float angle_new_right_barrier[PT_MAXLEN]; extern int angle_new_left_num; extern int angle_new_right_num; +extern int angle_new_left_num_barrier; +extern int angle_new_right_num_barrier; extern float far_angle_new_left[PT_MAXLEN]; extern float far_angle_new_right[PT_MAXLEN]; extern int far_angle_new_left_num; @@ -68,8 +72,12 @@ extern uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W]; extern float angle_left[PT_MAXLEN]; extern float angle_right[PT_MAXLEN]; +extern float angle_left_barrier[PT_MAXLEN]; +extern float angle_right_barrier[PT_MAXLEN]; extern int angle_left_num; extern int angle_right_num; +extern int angle_left_barrier_num; +extern int angle_right_barrier_num; extern float far_angle_left[PT_MAXLEN]; extern float far_angle_right[PT_MAXLEN]; extern int far_angle_left_num; diff --git a/app/gl_get_corners.c b/app/gl_get_corners.c index b15e057..9d24e3a 100644 --- a/app/gl_get_corners.c +++ b/app/gl_get_corners.c @@ -33,10 +33,10 @@ void get_corners() { Lpt0_found_barrier = Lpt1_found_barrier = false; for (int i = 0; i < pts_resample_left_count; i++) { - if (angle_new_left[i] == 0) continue; + if (angle_new_left_barrier[i] == 0) continue; int im1 = clip(i - (int) round(ANGLEDIST_barrier / RESAMPLEDIST), 0, pts_resample_left_count - 1); int ip1 = clip(i + (int) round(ANGLEDIST_barrier / RESAMPLEDIST), 0, pts_resample_left_count - 1); - float conf = fabs(angle_left[i]) - (fabs(angle_left[im1]) + fabs(angle_left[ip1])) / 2; + float conf = fabs(angle_left_barrier[i]) - (fabs(angle_left_barrier[im1]) + fabs(angle_left_barrier[ip1])) / 2; //L角点阈值 if (Lpt0_found_barrier == false && (66. / 180. * PI32) < conf && conf < (140. / 180. * PI32) && i < 0.5 / RESAMPLEDIST) { @@ -71,10 +71,10 @@ void get_corners() { } for (int i = 0; i < pts_resample_right_count; i++) { - if (angle_new_right[i] == 0) continue; + if (angle_new_right_barrier[i] == 0) continue; int im1 = clip(i - (int) round(ANGLEDIST_barrier / RESAMPLEDIST), 0, pts_resample_right_count - 1); int ip1 = clip(i + (int) round(ANGLEDIST_barrier / RESAMPLEDIST), 0, pts_resample_right_count - 1); - float conf = fabs(angle_right[i]) - (fabs(angle_right[im1]) + fabs(angle_right[ip1])) / 2; + float conf = fabs(angle_right_barrier[i]) - (fabs(angle_right_barrier[im1]) + fabs(angle_right_barrier[ip1])) / 2; if (Lpt1_found_barrier == false && (66. / 180. * PI32) < conf && conf < 140. / 180. * PI32 && i < 0.5 / RESAMPLEDIST) { diff --git a/app/gl_img_process.c b/app/gl_img_process.c index e999138..fda6f60 100644 --- a/app/gl_img_process.c +++ b/app/gl_img_process.c @@ -89,22 +89,34 @@ void img_processing() { pts_resample_right_count = valid_points_count; - // 边线角度变化率 + // 大距离边线角度变化率 local_angle_points(pts_resample_left, pts_resample_left_count, angle_left, (int) round(ANGLEDIST / RESAMPLEDIST)); angle_left_num = pts_resample_left_count; local_angle_points(pts_resample_right, pts_resample_right_count, angle_right, (int) round(ANGLEDIST / RESAMPLEDIST)); angle_right_num = pts_resample_right_count; - // 角度变化率非极大值抑制 + // 小距离边线角度变化率 + local_angle_points(pts_resample_left, pts_resample_left_count, angle_left_barrier, (int) round(ANGLEDIST_barrier / RESAMPLEDIST)); + angle_left_barrier_num = pts_resample_left_count; + local_angle_points(pts_resample_right, pts_resample_right_count, angle_right_barrier, (int) round(ANGLEDIST_barrier / RESAMPLEDIST)); + angle_right_barrier_num = pts_resample_right_count; + + // 大距离角度变化率非极大值抑制 nms_angle(angle_left, angle_left_num, angle_new_left, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1); angle_new_left_num = angle_left_num; nms_angle(angle_right, angle_right_num, angle_new_right, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1); angle_new_right_num = angle_right_num; + // 小距离角度变化率非极大值抑制 + nms_angle(angle_left_barrier, angle_left_barrier_num, angle_new_left_barrier, (int) round(ANGLEDIST_barrier / RESAMPLEDIST) * 2 + 1); + angle_new_left_num_barrier = angle_left_barrier_num; + nms_angle(angle_right_barrier, angle_right_barrier_num, angle_new_right_barrier, (int) round(ANGLEDIST_barrier / RESAMPLEDIST) * 2 + 1); + angle_new_right_num_barrier = angle_right_barrier_num; + // 左右中线跟踪 - GetMidLine_Left(pts_resample_left, pts_resample_left_count, mid_left, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2); + GetMidLine_Left(pts_resample_left, pts_resample_left_count, mid_left, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER_ACROSS * ROADWIDTH / 2); mid_left_count = pts_resample_left_count; - GetMidLine_Right(pts_resample_right, pts_resample_right_count, mid_right, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2); + GetMidLine_Right(pts_resample_right, pts_resample_right_count, mid_right, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER_ACROSS * ROADWIDTH / 2); mid_right_count = pts_resample_right_count; diff --git a/app/gl_state.h b/app/gl_state.h index c710d3e..8753a57 100644 --- a/app/gl_state.h +++ b/app/gl_state.h @@ -23,6 +23,6 @@ enum state_type_e { extern enum state_type_e state_type; #define CROSS_AIM (0.49f) -#define COMMON_AIM (0.25f) +#define COMMON_AIM (0.35f) #endif /* STATE_H_ */ diff --git a/app/gl_tracking.c b/app/gl_tracking.c index 570a676..56edb62 100644 --- a/app/gl_tracking.c +++ b/app/gl_tracking.c @@ -25,7 +25,7 @@ void tracking() void aim_distance_select(void) { if (cross_type != CROSS_NONE) { - aim_distance = 0.4f; + aim_distance = 0.49f; } else if (circle_type != CIRCLE_NONE) { aim_distance = 0.2f; } else {