pref: 整理部分文件和变量
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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_ */
|
||||
62
app/gl_data.c
Normal file
62
app/gl_data.c
Normal file
@@ -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;
|
||||
74
app/gl_data.h
Normal file
74
app/gl_data.h
Normal file
@@ -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
|
||||
@@ -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_ */
|
||||
@@ -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_ */
|
||||
|
||||
@@ -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;
|
||||
|
||||
67
app/main.c
67
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;
|
||||
|
||||
|
||||
45
app/main.h
45
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
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "cw_page_ui_widget.h"
|
||||
#include "zf_common_headfile.h"
|
||||
#include "main.h"
|
||||
#include "gl_data.h"
|
||||
|
||||
/**
|
||||
* @brief 绘制光标
|
||||
|
||||
Reference in New Issue
Block a user