更改边线偏移量&新加一组角点检测(待测)
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
#define FILTER_KERNELSIZE (7) // 滤波核大小
|
#define FILTER_KERNELSIZE (7) // 滤波核大小
|
||||||
#define SELFADAPT_OFFSET (8) // 适应性块大小
|
#define SELFADAPT_OFFSET (8) // 适应性块大小
|
||||||
#define PIXPERMETER (70.0f)
|
#define PIXPERMETER (70.0f)
|
||||||
|
#define PIXPERMETER_ACROSS (80.0f)
|
||||||
#define RESAMPLEDIST (0.02f)
|
#define RESAMPLEDIST (0.02f)
|
||||||
#define ANGLEDIST (0.2f)
|
#define ANGLEDIST (0.2f)
|
||||||
#define ANGLEDIST_barrier (0.06f)
|
#define ANGLEDIST_barrier (0.06f)
|
||||||
|
|||||||
@@ -46,8 +46,12 @@ int32_t mid_right_count;
|
|||||||
|
|
||||||
float angle_new_left[PT_MAXLEN];
|
float angle_new_left[PT_MAXLEN];
|
||||||
float angle_new_right[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_left_num;
|
||||||
int angle_new_right_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_left[PT_MAXLEN];
|
||||||
float far_angle_new_right[PT_MAXLEN];
|
float far_angle_new_right[PT_MAXLEN];
|
||||||
int far_angle_new_left_num;
|
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_left[PT_MAXLEN];
|
||||||
float angle_right[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_left_num;
|
||||||
int angle_right_num;
|
int angle_right_num;
|
||||||
|
int angle_left_barrier_num;
|
||||||
|
int angle_right_barrier_num;
|
||||||
float far_angle_left[PT_MAXLEN];
|
float far_angle_left[PT_MAXLEN];
|
||||||
float far_angle_right[PT_MAXLEN];
|
float far_angle_right[PT_MAXLEN];
|
||||||
int far_angle_left_num;
|
int far_angle_left_num;
|
||||||
|
|||||||
@@ -57,8 +57,12 @@ extern int32_t mid_right_count;
|
|||||||
|
|
||||||
extern float angle_new_left[PT_MAXLEN];
|
extern float angle_new_left[PT_MAXLEN];
|
||||||
extern float angle_new_right[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_left_num;
|
||||||
extern int angle_new_right_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_left[PT_MAXLEN];
|
||||||
extern float far_angle_new_right[PT_MAXLEN];
|
extern float far_angle_new_right[PT_MAXLEN];
|
||||||
extern int far_angle_new_left_num;
|
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_left[PT_MAXLEN];
|
||||||
extern float angle_right[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_left_num;
|
||||||
extern int angle_right_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_left[PT_MAXLEN];
|
||||||
extern float far_angle_right[PT_MAXLEN];
|
extern float far_angle_right[PT_MAXLEN];
|
||||||
extern int far_angle_left_num;
|
extern int far_angle_left_num;
|
||||||
|
|||||||
@@ -33,10 +33,10 @@ void get_corners() {
|
|||||||
|
|
||||||
Lpt0_found_barrier = Lpt1_found_barrier = false;
|
Lpt0_found_barrier = Lpt1_found_barrier = false;
|
||||||
for (int i = 0; i < pts_resample_left_count; i++) {
|
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 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);
|
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角点阈值
|
//L角点阈值
|
||||||
if (Lpt0_found_barrier == false && (66. / 180. * PI32) < conf && conf < (140. / 180. * PI32) && i < 0.5 / RESAMPLEDIST) {
|
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++) {
|
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 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);
|
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) {
|
if (Lpt1_found_barrier == false && (66. / 180. * PI32) < conf && conf < 140. / 180. * PI32 && i < 0.5 / RESAMPLEDIST) {
|
||||||
|
|||||||
@@ -89,22 +89,34 @@ void img_processing() {
|
|||||||
|
|
||||||
pts_resample_right_count = valid_points_count;
|
pts_resample_right_count = valid_points_count;
|
||||||
|
|
||||||
// 边线角度变化率
|
// 大距离边线角度变化率
|
||||||
local_angle_points(pts_resample_left, pts_resample_left_count, angle_left, (int) round(ANGLEDIST / RESAMPLEDIST));
|
local_angle_points(pts_resample_left, pts_resample_left_count, angle_left, (int) round(ANGLEDIST / RESAMPLEDIST));
|
||||||
angle_left_num = pts_resample_left_count;
|
angle_left_num = pts_resample_left_count;
|
||||||
local_angle_points(pts_resample_right, pts_resample_right_count, angle_right, (int) round(ANGLEDIST / RESAMPLEDIST));
|
local_angle_points(pts_resample_right, pts_resample_right_count, angle_right, (int) round(ANGLEDIST / RESAMPLEDIST));
|
||||||
angle_right_num = pts_resample_right_count;
|
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);
|
nms_angle(angle_left, angle_left_num, angle_new_left, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1);
|
||||||
angle_new_left_num = angle_left_num;
|
angle_new_left_num = angle_left_num;
|
||||||
nms_angle(angle_right, angle_right_num, angle_new_right, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1);
|
nms_angle(angle_right, angle_right_num, angle_new_right, (int) round(ANGLEDIST / RESAMPLEDIST) * 2 + 1);
|
||||||
angle_new_right_num = angle_right_num;
|
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;
|
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;
|
mid_right_count = pts_resample_right_count;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,6 @@ enum state_type_e {
|
|||||||
extern enum state_type_e state_type;
|
extern enum state_type_e state_type;
|
||||||
|
|
||||||
#define CROSS_AIM (0.49f)
|
#define CROSS_AIM (0.49f)
|
||||||
#define COMMON_AIM (0.25f)
|
#define COMMON_AIM (0.35f)
|
||||||
|
|
||||||
#endif /* STATE_H_ */
|
#endif /* STATE_H_ */
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ void tracking()
|
|||||||
void aim_distance_select(void)
|
void aim_distance_select(void)
|
||||||
{
|
{
|
||||||
if (cross_type != CROSS_NONE) {
|
if (cross_type != CROSS_NONE) {
|
||||||
aim_distance = 0.4f;
|
aim_distance = 0.49f;
|
||||||
} else if (circle_type != CIRCLE_NONE) {
|
} else if (circle_type != CIRCLE_NONE) {
|
||||||
aim_distance = 0.2f;
|
aim_distance = 0.2f;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user