diff --git a/app/cw_servo.c b/app/cw_servo.c deleted file mode 100644 index f8132e0..0000000 --- a/app/cw_servo.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "zf_common_headfile.h" -#include "cw_servo.h" - -void cw_servo_init(void) -{ - pwm_init(SERVO_L_PWM_CHANNEL, 50, 1000); - pwm_init(SERVO_R_PWM_CHANNEL, 50, 1000); -} - -void cw_servo_set_angle(float servo_l_angle, float servo_r_angle) -{ - uint32_t servo_l_duty_s = (uint32_t)(servo_l_angle * SERVO_L_DUTY_PER_ANGLE); - uint32_t servo_r_duty_s = (uint32_t)(servo_r_angle * SERVO_R_DUTY_PER_ANGLE); - - pwm_set_duty(SERVO_L_PWM_CHANNEL, servo_l_duty_s); - pwm_set_duty(SERVO_R_PWM_CHANNEL, servo_r_duty_s); -} diff --git a/app/cw_servo.h b/app/cw_servo.h deleted file mode 100644 index eddec90..0000000 --- a/app/cw_servo.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef _CW_SERVO_H__ -#define _CW_SERVO_H__ - -#include "zf_common_headfile.h" - -#define SERVO_L_PWM_CHANNEL TIM2_PWM_MAP0_CH1_A0 -#define SERVO_R_PWM_CHANNEL TIM2_PWM_MAP0_CH2_A1 - -#define SERVO_MAX_ANGLE_RANGE (90.0F) -#define SERVO_L_DUTY_MAX (1100.0F) -#define SERVO_L_DUTY_MIN (900.0F) -#define SERVO_R_DUTY_MAX (1100.0F) -#define SERVO_R_DUTY_MIN (900.0F) -#define SERVO_L_DUTY_PER_ANGLE ((SERVO_L_DUTY_MAX - SERVO_L_DUTY_MIN) / SERVO_MAX_ANGLE_RANGE) -#define SERVO_R_DUTY_PER_ANGLE ((SERVO_R_DUTY_MAX - SERVO_R_DUTY_MIN) / SERVO_MAX_ANGLE_RANGE) - -extern void cw_servo_init(void); -extern void cw_servo_set_angle(float servo_l_angle, float servo_r_angle); - -#endif diff --git a/app/gl_common.h b/app/gl_common.h index 1cfda26..6698b8f 100644 --- a/app/gl_common.h +++ b/app/gl_common.h @@ -1,32 +1,28 @@ #ifndef COMMON_H_ #define COMMON_H_ - - -#define IMAGE_H (MT9V03X_H) -#define IMAGE_W (MT9V03X_W) -#define BEGINH_L (61) -#define BEGINH_R (61) -#define BEGINW_L (-18) -#define BEGINW_R (-12) -#define PT_MAXLEN (75) -#define GET_PIX_1C(IMG, H, W) (IMG[(H) * MT9V03X_W + (W)]) //获取像素点的值 -#define FIX_BINTHRESHOLD (140) //设置最开始的阈值 -#define SELFADAPT_KERNELSIZE (7) //巡线区域核大小 -#define FILTER_KERNELSIZE (7) //滤波核大小 -#define SELFADAPT_OFFSET (8) //适应性块大小 -#define PIXPERMETER (56) -#define RESAMPLEDIST (0.02) -#define ANGLEDIST (0.2) -#define ROADWIDTH (0.45) -#define FRAMENONE (1) -#define FRAMETOLEFT (5) -#define FRAMETORIGHT (5) +#define IMAGE_H (MT9V03X_H) +#define IMAGE_W (MT9V03X_W) +#define BEGINH_L (61) +#define BEGINH_R (61) +#define BEGINW_L (-18) +#define BEGINW_R (-12) +#define PT_MAXLEN (75) +#define GET_PIX_1C(IMG, H, W) (IMG[(H) * MT9V03X_W + (W)]) // 获取像素点的值 +#define FIX_BINTHRESHOLD (140) // 设置最开始的阈值 +#define SELFADAPT_KERNELSIZE (7) // 巡线区域核大小 +#define FILTER_KERNELSIZE (7) // 滤波核大小 +#define SELFADAPT_OFFSET (8) // 适应性块大小 +#define PIXPERMETER (56) +#define RESAMPLEDIST (0.02f) +#define ANGLEDIST (0.2f) +#define ROADWIDTH (0.45f) +#define FRAMENONE (1) +#define FRAMETOLEFT (5) +#define FRAMETORIGHT (5) int32_t limit(int32_t x, int32_t low, int32_t up); int clip(int x, int low, int up); -float fclip(float x, float low, float up) ; - - +float fclip(float x, float low, float up); #endif /* COMMON_H_ */ \ No newline at end of file diff --git a/app/gl_data.c b/app/gl_data.c new file mode 100644 index 0000000..766fb00 --- /dev/null +++ b/app/gl_data.c @@ -0,0 +1,62 @@ +#include "gl_data.h" + +uint8_t (*Img_Gray)[MT9V03X_W]; +int32_t pts_left[PT_MAXLEN][2]; +int32_t pts_right[PT_MAXLEN][2]; +int32_t pts_left_count; +int32_t pts_right_count; +float pts_inv_l[PT_MAXLEN][2]; +float pts_inv_r[PT_MAXLEN][2]; +int32_t pts_inv_l_count; +int32_t pts_inv_r_count; +float pts_filter_l[PT_MAXLEN][2]; +float pts_filter_r[PT_MAXLEN][2]; +int32_t pts_filter_l_count; +int32_t pts_filter_r_count; +float pts_resample_left[PT_MAXLEN][2]; +float pts_resample_right[PT_MAXLEN][2]; +int32_t pts_resample_left_count; +int32_t pts_resample_right_count; + +float mid_left[PT_MAXLEN][2]; +float mid_right[PT_MAXLEN][2]; + +int32_t mid_left_count; +int32_t mid_right_count; + +float angle_new_left[PT_MAXLEN]; +float angle_new_right[PT_MAXLEN]; +int angle_new_left_num; +int angle_new_right_num; +uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W]; + +float angle_left[PT_MAXLEN]; +float angle_right[PT_MAXLEN]; +int angle_left_num; +int angle_right_num; + +int Lpt0_rpts0s_id; +int Lpt1_rpts1s_id; +bool Lpt0_found; +bool Lpt1_found; +int Lpt1[2]; +int Lpt0[2]; + +int Lpt_in0_rpts0s_id; +int Lpt_in1_rpts1s_id; +bool Lpt_in0_found; +bool Lpt_in1_found; +int Lpt_in1[2]; +int Lpt_in0[2]; + +bool is_straight0; +bool is_straight1; + +bool is_turn0; +bool is_turn1; + +float rptsn[PT_MAXLEN][2]; +int32_t rptsn_num; +float aim_distance; + +track_type_e track_type = TRACK_RIGHT; \ No newline at end of file diff --git a/app/gl_data.h b/app/gl_data.h new file mode 100644 index 0000000..5915646 --- /dev/null +++ b/app/gl_data.h @@ -0,0 +1,74 @@ +#pragma once + +#ifndef _GL_DATA_H +#define _GL_DATA_H + +#include "gl_headfile.h" + +typedef enum track_type_e { + TRACK_LEFT = 0, + TRACK_RIGHT, +} track_type_e; + +extern uint8_t (*Img_Gray)[MT9V03X_W]; +extern int32_t pts_left[PT_MAXLEN][2]; +extern int32_t pts_right[PT_MAXLEN][2]; +extern int32_t pts_left_count; +extern int32_t pts_right_count; +extern float pts_inv_l[PT_MAXLEN][2]; +extern float pts_inv_r[PT_MAXLEN][2]; +extern int32_t pts_inv_l_count; +extern int32_t pts_inv_r_count; +extern float pts_filter_l[PT_MAXLEN][2]; +extern float pts_filter_r[PT_MAXLEN][2]; +extern int32_t pts_filter_l_count; +extern int32_t pts_filter_r_count; +extern float pts_resample_left[PT_MAXLEN][2]; +extern float pts_resample_right[PT_MAXLEN][2]; +extern int32_t pts_resample_left_count; +extern int32_t pts_resample_right_count; + +extern float mid_left[PT_MAXLEN][2]; +extern float mid_right[PT_MAXLEN][2]; + +extern int32_t mid_left_count; +extern int32_t mid_right_count; + +extern float angle_new_left[PT_MAXLEN]; +extern float angle_new_right[PT_MAXLEN]; +extern int angle_new_left_num; +extern int angle_new_right_num; +extern uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W]; + +extern float angle_left[PT_MAXLEN]; +extern float angle_right[PT_MAXLEN]; +extern int angle_left_num; +extern int angle_right_num; + +extern int Lpt0_rpts0s_id; +extern int Lpt1_rpts1s_id; +extern bool Lpt0_found; +extern bool Lpt1_found; +extern int Lpt1[2]; +extern int Lpt0[2]; + +extern int Lpt_in0_rpts0s_id; +extern int Lpt_in1_rpts1s_id; +extern bool Lpt_in0_found; +extern bool Lpt_in1_found; +extern int Lpt_in1[2]; +extern int Lpt_in0[2]; + +extern bool is_straight0; +extern bool is_straight1; + +extern bool is_turn0; +extern bool is_turn1; + +extern float rptsn[PT_MAXLEN][2]; +extern int32_t rptsn_num; +extern float aim_distance; + +extern track_type_e track_type; + +#endif diff --git a/app/gl_headfile.h b/app/gl_headfile.h index 11591ce..1482de7 100644 --- a/app/gl_headfile.h +++ b/app/gl_headfile.h @@ -1,8 +1,6 @@ #ifndef GL_HEADFILE #define GL_HEADFILE - - #include "gl_state.h" #include "gl_img_process.h" #include "gl_common.h" @@ -14,8 +12,7 @@ #include "gl_tracking.h" #include "gl_circle.h" #include "gl_cross.h" +#include "gl_data.h" #include "math.h" - - #endif /* STATE_H_ */ \ No newline at end of file diff --git a/app/gl_state.h b/app/gl_state.h index 5a3c29f..dc762c0 100644 --- a/app/gl_state.h +++ b/app/gl_state.h @@ -2,21 +2,27 @@ #define STATE_H_ enum state_type_e { - COMMON_STATE = 0, - CROSS_STATE,HALF_STATE, - CIRCLE_IN_STATE,CIRCLE_BEGIN_STATE, - CIRCLE_RUNNING_STATE,CIRCLE_OUT_STATE, - TURN_STATE,STRAIGHT_STATE, - BREAK_STATE,BAR_STATE, - RAMP_STATE,GARAGE_OUT_STATE, - GARAGE_IN_STATE,GARAGE_STOP_STATE, - GARAGE_PASS_STATE, + COMMON_STATE = 0, + CROSS_STATE, + HALF_STATE, + CIRCLE_IN_STATE, + CIRCLE_BEGIN_STATE, + CIRCLE_RUNNING_STATE, + CIRCLE_OUT_STATE, + TURN_STATE, + STRAIGHT_STATE, + BREAK_STATE, + BAR_STATE, + RAMP_STATE, + GARAGE_OUT_STATE, + GARAGE_IN_STATE, + GARAGE_STOP_STATE, + GARAGE_PASS_STATE, }; extern enum state_type_e state_type; -#define CROSS_AIM (0.49) -#define COMMON_AIM (0.31) - +#define CROSS_AIM (0.49f) +#define COMMON_AIM (0.31f) #endif /* STATE_H_ */ diff --git a/app/gl_tracking.c b/app/gl_tracking.c index b41eb73..41edd20 100644 --- a/app/gl_tracking.c +++ b/app/gl_tracking.c @@ -65,11 +65,11 @@ void MidLineTrack() { } } - // 车轮对应点(纯跟踪起始点) + // 车轮对应点 (纯跟踪起始点) float cx = UndistInverseMapW[(int) (IMAGE_H * 0.90f)][78]; float cy = UndistInverseMapH[(int) (IMAGE_H * 0.90f)][78]; - // 找最近点(起始点中线归一化) + // 找最近点 (起始点中线归一化) float min_dist = 1e10; int begin_id = -1; diff --git a/app/main.c b/app/main.c index 1c9efa3..975c919 100644 --- a/app/main.c +++ b/app/main.c @@ -25,94 +25,29 @@ #include "gl_headfile.h" #include "by_rt_button.h" #include "by_fan_control.h" -#include "cw_servo.h" #include "./page/cw_page.h" -uint8_t (*Img_Gray)[MT9V03X_W]; -// uint8_t *mt9v03x_image_copy[0]; -int32_t pts_left[PT_MAXLEN][2]; -int32_t pts_right[PT_MAXLEN][2]; -int32_t pts_left_count, pts_right_count; -float pts_inv_l[PT_MAXLEN][2], pts_inv_r[PT_MAXLEN][2]; -int32_t pts_inv_l_count, pts_inv_r_count; -float pts_filter_l[PT_MAXLEN][2], pts_filter_r[PT_MAXLEN][2]; -int32_t pts_filter_l_count, pts_filter_r_count; -float pts_resample_left[PT_MAXLEN][2], pts_resample_right[PT_MAXLEN][2]; -int32_t pts_resample_left_count, pts_resample_right_count; -float mid_left[PT_MAXLEN][2], mid_right[PT_MAXLEN][2]; -int32_t mid_left_count, mid_right_count; - -float angle_new_left[PT_MAXLEN]; -float angle_new_right[PT_MAXLEN]; -int angle_new_left_num, angle_new_right_num; -uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W]; - -float angle_left[PT_MAXLEN]; -float angle_right[PT_MAXLEN]; -int angle_left_num, angle_right_num; - -int Lpt0_rpts0s_id, Lpt1_rpts1s_id; -bool Lpt0_found, Lpt1_found; -int Lpt1[2], Lpt0[2]; - -int Lpt_in0_rpts0s_id, Lpt_in1_rpts1s_id; -bool Lpt_in0_found, Lpt_in1_found; -int Lpt_in1[2], Lpt_in0[2]; - -bool is_straight0, is_straight1; - -bool is_turn0, is_turn1; - -float rptsn[PT_MAXLEN][2]; -int rptsn_num; -float aim_distance; - -enum track_type_e track_type = TRACK_RIGHT; - -int frame_count = 0; - -uint16_t pwm_cnt = 500; - -void img_processing(); -void get_corners(); - int main(void) { clock_init(SYSTEM_CLOCK_120M); system_delay_init(); debug_init(); mt9v03x_init(); - pwm_init(TIM2_PWM_MAP0_CH1_A0, 50, 1000); - pwm_init(TIM2_PWM_MAP0_CH2_A1, 50, 1000); ips200_init(IPS200_TYPE_SPI); by_gpio_init(); by_exit_init(); by_pwm_init(); - // cw_servo_init(); // while (imu660ra_init()) // ; Page_Init(); while (1) { - // ips200_show_uint(0, 0, pwm_cnt, 6); - // uint8_t temp_status = by_get_rb_status(); - // if (2 == temp_status) { - // pwm_cnt += 50; - // } else if (3 == temp_status) { - // pwm_cnt -= 50; - // } - - // pwm_cnt = (uint16_t)clip(pwm_cnt, 500, 1000); - // by_pwm_update_duty(4000); - // pwm_set_duty(TIM2_PWM_MAP0_CH1_A0, pwm_cnt); - // pwm_set_duty(TIM2_PWM_MAP0_CH2_A1, pwm_cnt); - - // by_pwm_update_duty(pwm_cnt); Page_Run(); if (mt9v03x_finish_flag) { + // 该操作消耗大概 1970 个 tick,折合约 110us memcpy(mt9v03x_image_copy[0], mt9v03x_image[0], (sizeof(mt9v03x_image_copy) / sizeof(uint8_t))); mt9v03x_finish_flag = 0; diff --git a/app/main.h b/app/main.h index 10353da..1741eaa 100644 --- a/app/main.h +++ b/app/main.h @@ -2,50 +2,5 @@ #define MAIN_H #include "zf_common_headfile.h" -#include "gl_common.h" - -// extern uint8 *mt9v03x_image_copy[0]; -extern int32_t pts_left[PT_MAXLEN][2], pts_right[PT_MAXLEN][2]; // 0:H,1:W -extern int32_t pts_left_count, pts_right_count; -extern float pts_inv_l[PT_MAXLEN][2], pts_inv_r[PT_MAXLEN][2]; -extern int32_t pts_inv_l_count, pts_inv_r_count; -extern float pts_filter_l[PT_MAXLEN][2], pts_filter_r[PT_MAXLEN][2]; -extern int32_t pts_filter_l_count, pts_filter_r_count; -extern float pts_resample_left[PT_MAXLEN][2], pts_resample_right[PT_MAXLEN][2]; -extern int32_t pts_resample_left_count, pts_resample_right_count; -extern uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W]; -extern float mid_left[PT_MAXLEN][2], mid_right[PT_MAXLEN][2]; -extern int32_t mid_left_count, mid_right_count; - -extern float angle_left[PT_MAXLEN]; -extern float angle_right[PT_MAXLEN]; -extern int angle_left_num, angle_right_num; - -extern float angle_new_left[PT_MAXLEN]; -extern float angle_new_right[PT_MAXLEN]; -extern int angle_new_left_num, angle_new_right_num; - -extern int Lpt0_rpts0s_id, Lpt1_rpts1s_id; -extern bool Lpt0_found, Lpt1_found; -extern int Lpt1[2], Lpt0[2]; - -extern int Lpt_in0_rpts0s_id, Lpt_in1_rpts1s_id; -extern bool Lpt_in0_found, Lpt_in1_found; -extern int Lpt_in1[2], Lpt_in0[2]; - -extern bool is_straight0, is_straight1; - -extern bool is_turn0, is_turn1; - -extern float rptsn[PT_MAXLEN][2]; -extern int rptsn_num; -extern float aim_distance; - -enum track_type_e { - TRACK_LEFT, - TRACK_RIGHT, -}; - -extern enum track_type_e track_type; #endif // MAIN_H \ No newline at end of file diff --git a/app/page/cw_page_ui_widget.c b/app/page/cw_page_ui_widget.c index 0e88602..82b82f1 100644 --- a/app/page/cw_page_ui_widget.c +++ b/app/page/cw_page_ui_widget.c @@ -1,6 +1,6 @@ #include "cw_page_ui_widget.h" #include "zf_common_headfile.h" -#include "main.h" +#include "gl_data.h" /** * @brief 绘制光标 diff --git a/libraries/zf_device/zf_device_ips200.h b/libraries/zf_device/zf_device_ips200.h index 3362ed9..96239ba 100644 --- a/libraries/zf_device/zf_device_ips200.h +++ b/libraries/zf_device/zf_device_ips200.h @@ -115,8 +115,8 @@ // --------------------双排 SPI 接口两寸屏幕引脚定义--------------------// #define IPS200_DEFAULT_DISPLAY_DIR (IPS200_PORTAIT) // 默认的显示方向 -#define IPS200_DEFAULT_PENCOLOR (RGB565_BLACK ) // 默认的画笔颜色 -#define IPS200_DEFAULT_BGCOLOR (RGB565_YELLOW ) // 默认的背景颜色 +#define IPS200_DEFAULT_PENCOLOR (RGB565_YELLOW ) // 默认的画笔颜色 +#define IPS200_DEFAULT_BGCOLOR (RGB565_BLACK ) // 默认的背景颜色 #define IPS200_DEFAULT_DISPLAY_FONT (IPS200_8X16_FONT) // 默认的字体模式 // 控制语句