fix: 修复图像bug
This commit is contained in:
@@ -60,7 +60,8 @@
|
||||
"libraries/zf_driver",
|
||||
"3rd-lib/crc16",
|
||||
"app/page",
|
||||
"3rd-lib/lwrb/inc"
|
||||
"3rd-lib/lwrb/inc",
|
||||
"app/tiny_frame"
|
||||
],
|
||||
"libList": [
|
||||
"libraries/zf_device"
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
|
||||
#define IMAGE_H (MT9V03X_H)
|
||||
#define IMAGE_W (MT9V03X_W)
|
||||
#define BEGINH_L (60)
|
||||
#define BEGINH_R (60)
|
||||
#define BEGINH_L (55)
|
||||
#define BEGINH_R (55)
|
||||
#define BEGINW_L (-18)
|
||||
#define BEGINW_R (-12)
|
||||
#define PT_MAXLEN (75)
|
||||
|
||||
@@ -8,126 +8,119 @@ float dx_near;
|
||||
float (*rpts)[2];
|
||||
int rpts_num;
|
||||
|
||||
|
||||
|
||||
void tracking(){
|
||||
void tracking()
|
||||
{
|
||||
|
||||
if (pts_resample_left_count < pts_resample_right_count / 2 && pts_resample_left_count < 50) {
|
||||
track_type = TRACK_RIGHT;
|
||||
} else if (pts_resample_right_count < pts_resample_left_count / 2 && pts_resample_right_count < 58) {
|
||||
track_type = TRACK_LEFT;
|
||||
} else if (pts_resample_left_count < 20 && pts_resample_right_count > pts_resample_left_count) {
|
||||
track_type = TRACK_RIGHT;
|
||||
} else if (pts_resample_right_count < 20 && pts_resample_left_count > pts_resample_right_count) {
|
||||
track_type = TRACK_LEFT;
|
||||
track_type = TRACK_RIGHT;
|
||||
} else if (pts_resample_right_count < pts_resample_left_count / 2 && pts_resample_right_count < 58) {
|
||||
track_type = TRACK_LEFT;
|
||||
} else if (pts_resample_left_count < 20 && pts_resample_right_count > pts_resample_left_count) {
|
||||
track_type = TRACK_RIGHT;
|
||||
} else if (pts_resample_right_count < 20 && pts_resample_left_count > pts_resample_right_count) {
|
||||
track_type = TRACK_LEFT;
|
||||
}
|
||||
}
|
||||
|
||||
void ElementJudge()
|
||||
{
|
||||
CheckGarage();
|
||||
if (garage_type == GARAGE_NONE) {
|
||||
CheckCross();
|
||||
if (cross_type == CROSS_NONE) {
|
||||
CheckCircle();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ElementJudge() {
|
||||
CheckGarage();
|
||||
if (garage_type == GARAGE_NONE) {
|
||||
CheckCross();
|
||||
if (cross_type == CROSS_NONE) {
|
||||
CheckCircle();
|
||||
}
|
||||
}
|
||||
|
||||
if (garage_type != GARAGE_NONE)
|
||||
{
|
||||
cross_type = CROSS_NONE;
|
||||
circle_type = CIRCLE_NONE;
|
||||
}
|
||||
|
||||
if (garage_type != GARAGE_NONE) {
|
||||
cross_type = CROSS_NONE;
|
||||
circle_type = CIRCLE_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
void ElementRun() {
|
||||
if (garage_type != GARAGE_NONE) {
|
||||
RunGarage();
|
||||
}
|
||||
void ElementRun()
|
||||
{
|
||||
if (garage_type != GARAGE_NONE) {
|
||||
RunGarage();
|
||||
}
|
||||
|
||||
else if (cross_type != CROSS_NONE) {
|
||||
RunCross();
|
||||
}
|
||||
else if (cross_type != CROSS_NONE) {
|
||||
RunCross();
|
||||
}
|
||||
|
||||
else if (circle_type != CIRCLE_NONE) {
|
||||
RunCircle();
|
||||
}
|
||||
else if (circle_type != CIRCLE_NONE) {
|
||||
RunCircle();
|
||||
}
|
||||
}
|
||||
|
||||
void MidLineTrack() {
|
||||
if (cross_type == CROSS_IN) {
|
||||
if (track_type == TRACK_LEFT) {
|
||||
mid_track = mid_left; // 这是为了预先分配内存
|
||||
GetMidLine_Left(pts_far_resample_left + far_Lpt0_rpts0s_id, pts_far_resample_left_count - far_Lpt0_rpts0s_id, mid_left, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2);
|
||||
mid_track_count = pts_far_resample_left_count - far_Lpt0_rpts0s_id;
|
||||
void MidLineTrack()
|
||||
{
|
||||
if (cross_type == CROSS_IN) {
|
||||
if (track_type == TRACK_LEFT) {
|
||||
mid_track = mid_left; // 这是为了预先分配内存
|
||||
GetMidLine_Left(pts_far_resample_left + far_Lpt0_rpts0s_id, pts_far_resample_left_count - far_Lpt0_rpts0s_id, mid_left, (int)round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2);
|
||||
mid_track_count = pts_far_resample_left_count - far_Lpt0_rpts0s_id;
|
||||
} else {
|
||||
mid_track = mid_right; // 这是为了预先分配内存
|
||||
GetMidLine_Right(pts_far_resample_right + far_Lpt1_rpts1s_id, pts_far_resample_right_count - far_Lpt1_rpts1s_id, mid_right, (int)round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2);
|
||||
mid_track_count = pts_far_resample_right_count - far_Lpt1_rpts1s_id;
|
||||
}
|
||||
} else {
|
||||
mid_track = mid_right; // 这是为了预先分配内存
|
||||
GetMidLine_Right(pts_far_resample_right + far_Lpt1_rpts1s_id, pts_far_resample_right_count - far_Lpt1_rpts1s_id, mid_right, (int) round(ANGLEDIST / RESAMPLEDIST), PIXPERMETER * ROADWIDTH / 2);
|
||||
mid_track_count =pts_far_resample_right_count - far_Lpt1_rpts1s_id;
|
||||
if (track_type == TRACK_LEFT) {
|
||||
mid_track = mid_left;
|
||||
mid_track_count = mid_left_count;
|
||||
} else {
|
||||
mid_track = mid_right;
|
||||
mid_track_count = mid_right_count;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (track_type == TRACK_LEFT) {
|
||||
mid_track = mid_left;
|
||||
mid_track_count = mid_left_count;
|
||||
} else {
|
||||
mid_track = mid_right;
|
||||
mid_track_count = mid_right_count;
|
||||
|
||||
// 车轮对应点 (纯跟踪起始点)
|
||||
float cx = InverseMapW[(int)(IMAGE_H * 0.75f)][70];
|
||||
float cy = InverseMapH[(int)(IMAGE_H * 0.75f)][70];
|
||||
|
||||
// 找最近点 (起始点中线归一化)
|
||||
float min_dist = 1e10;
|
||||
|
||||
int begin_id = -1;
|
||||
for (int i = 0; i < mid_track_count; i++) {
|
||||
float dx = mid_track[i][1] - cx;
|
||||
float dy = mid_track[i][0] - cy;
|
||||
float dist = sqrt(dx * dx + dy * dy);
|
||||
if (dist < min_dist) {
|
||||
min_dist = dist;
|
||||
begin_id = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 车轮对应点 (纯跟踪起始点)
|
||||
float cx = InverseMapW[(int) (IMAGE_H * 0.75f)][90];
|
||||
float cy = InverseMapH[(int) (IMAGE_H * 0.75f)][90];
|
||||
if (begin_id >= 0 && mid_track_count - begin_id >= 3) {
|
||||
// 归一化中线
|
||||
mid_track[begin_id][0] = cy;
|
||||
mid_track[begin_id][1] = cx;
|
||||
rptsn_num = sizeof(rptsn) / sizeof(rptsn[0]);
|
||||
GetLinesResample(mid_track + begin_id, mid_track_count - begin_id, rptsn, &rptsn_num, RESAMPLEDIST * PIXPERMETER);
|
||||
|
||||
// 找最近点 (起始点中线归一化)
|
||||
float min_dist = 1e10;
|
||||
// 远预锚点位置-
|
||||
int aim_idx = clip(round(aim_distance / RESAMPLEDIST), 0, rptsn_num - 1);
|
||||
|
||||
int begin_id = -1;
|
||||
for (int i = 0; i < mid_track_count; i++) {
|
||||
float dx = mid_track[i][1] - cx;
|
||||
float dy = mid_track[i][0] - cy;
|
||||
float dist = sqrt(dx * dx + dy * dy);
|
||||
if (dist < min_dist) {
|
||||
min_dist = dist;
|
||||
begin_id = i;
|
||||
}
|
||||
}
|
||||
// 近锚点位置
|
||||
int aim_idx_near = clip(round(0.11 / RESAMPLEDIST), 0, rptsn_num - 1);
|
||||
|
||||
if (begin_id >= 0 && mid_track_count - begin_id >= 3){
|
||||
// 归一化中线
|
||||
mid_track[begin_id][0] = cy;
|
||||
mid_track[begin_id][1] = cx;
|
||||
rptsn_num = sizeof(rptsn) / sizeof(rptsn[0]);
|
||||
GetLinesResample(mid_track + begin_id, mid_track_count - begin_id, rptsn, &rptsn_num, RESAMPLEDIST * PIXPERMETER );
|
||||
// 计算远锚点偏差值
|
||||
dx = rptsn[aim_idx][1] - cx;
|
||||
// float dy = cy - rptsn[aim_idx][0] + 0.2 * PIXPERMETER;
|
||||
// float dn = sqrt(dx * dx + dy * dy);
|
||||
// float error = -atan2f(dx, dy) * 180 / PI;
|
||||
|
||||
// 远预锚点位置
|
||||
int aim_idx = clip(round(aim_distance / RESAMPLEDIST), 0, rptsn_num - 1);
|
||||
// 计算近锚点偏差值
|
||||
dx_near = rptsn[aim_idx_near][1] - cx;
|
||||
// float dy_near = cy - rptsn[aim_idx_near][0] + 0.2 * PIXPERMETER;
|
||||
// float dn_near = sqrt(dx_near * dx_near + dy_near * dy_near);
|
||||
// float error_near = -atan2f(dx_near, dy_near) * 180 / PI;
|
||||
|
||||
//近锚点位置
|
||||
int aim_idx_near = clip(round(0.15 / RESAMPLEDIST), 0, rptsn_num - 1);
|
||||
|
||||
// 计算远锚点偏差值
|
||||
float dx = rptsn[aim_idx][1] - cx;
|
||||
// float dy = cy - rptsn[aim_idx][0] + 0.2 * PIXPERMETER;
|
||||
// float dn = sqrt(dx * dx + dy * dy);
|
||||
//float error = -atan2f(dx, dy) * 180 / PI;
|
||||
|
||||
// 计算近锚点偏差值
|
||||
float dx_near = rptsn[aim_idx_near][1] - cx;
|
||||
// float dy_near = cy - rptsn[aim_idx_near][0] + 0.2 * PIXPERMETER;
|
||||
// float dn_near = sqrt(dx_near * dx_near + dy_near * dy_near);
|
||||
//float error_near = -atan2f(dx_near, dy_near) * 180 / PI;
|
||||
|
||||
// //考虑近点
|
||||
// near_angle = -atanf(PIXPERMETER * 2 * 0.2 * dx_near / dn_near / dn_near) / PI * 180 ;
|
||||
// //考虑远点
|
||||
// pure_angle = -atanf(PIXPERMETER * 2 * 0.2 * dx/ dn / dn) / PI * 180 ;
|
||||
|
||||
|
||||
|
||||
}
|
||||
// //考虑近点
|
||||
// near_angle = -atanf(PIXPERMETER * 2 * 0.2 * dx_near / dn_near / dn_near) / PI * 180 ;
|
||||
// //考虑远点
|
||||
// pure_angle = -atanf(PIXPERMETER * 2 * 0.2 * dx/ dn / dn) / PI * 180 ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
// <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
#define MT9V03X_UD_OFFSET_DEF (0 ) // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>ֵ <20><>ƫ<EFBFBD><C6AB> <20><>Ϊ 120 240 480 ʱ<><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
// <20><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
#define MT9V03X_GAIN_DEF (64 ) // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Χ [16-64] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸ı<C2B8>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>
|
||||
#define MT9V03X_GAIN_DEF (32 ) // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Χ [16-64] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸ı<C2B8>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>
|
||||
#define MT9V03X_PCLK_MODE_DEF (1 ) // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ģʽ <20><>Χ [0-1] Ĭ<>ϣ<EFBFBD>0 <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>[0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źţ<C5BA>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>]
|
||||
// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> CH32V307 <20><> DVP <20>ӿڻ<D3BF> STM32 <20><> DCMI <20>ӿڲɼ<DAB2><C9BC><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>Ϊ 1
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MT9V034 V1.5 <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>ϰ汾֧<E6B1BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
Reference in New Issue
Block a user