diff --git a/energy/include/energy/energy.h b/energy/include/energy/energy.h index 85f7178..cbd5ae9 100644 --- a/energy/include/energy/energy.h +++ b/energy/include/energy/energy.h @@ -92,7 +92,6 @@ private: float sum_yaw, sum_pitch;//yaw和pitch的累计误差,即PID中积分项 systime time_start_guess; - systime time_start_energy; cv::RotatedRect centerR;//风车中心字母R的可能候选区 cv::RotatedRect flow_strip;//图像中所有流动条(理论上只有一个) diff --git a/energy/include/energy/param_struct_define.h b/energy/include/energy/param_struct_define.h index 5b96400..1636751 100644 --- a/energy/include/energy/param_struct_define.h +++ b/energy/include/energy/param_struct_define.h @@ -17,7 +17,8 @@ using std::vector; // --------------------------------------------------------------------------------------------------------------------- struct EnergyPartParam { int GRAY_THRESH;//二值化阈值 - int SUB_GRAY_THRESH;//备用二值化阈值 + int RED_GRAY_THRESH;//红方二值化阈值 + int BLUE_GRAY_THRESH;//蓝方二值化阈值 int SPLIT_GRAY_THRESH;//通道分离二值化阈值 int FAN_GRAY_THRESH;//扇叶识别二值化阈值 int ARMOR_GRAY_THRESH;//装甲板识别二值化阈值 diff --git a/energy/src/energy/clear/clear.cpp b/energy/src/energy/clear/clear.cpp index 18c8b73..4311d00 100644 --- a/energy/src/energy/clear/clear.cpp +++ b/energy/src/energy/clear/clear.cpp @@ -7,6 +7,8 @@ using namespace std; using namespace cv; +extern McuData mcu_data; + //---------------------------------------------------------------------------------------------------------------------- // 此函数用于清空各vector @@ -26,15 +28,11 @@ void Energy::clearAll() { void Energy::initImage(cv::Mat &src) { // imagePreprocess(src); // if(show_process)imshow("img_preprocess", src); - systime cur_time; - getsystime(cur_time); - float interval = getTimeIntervalms(cur_time, time_start_energy); - if (src.type() == CV_8UC3)cvtColor(src, src, COLOR_BGR2GRAY); - if(interval > 3000 && !is_find_target){ - threshold(src, src, energy_part_param_.SUB_GRAY_THRESH, 255, THRESH_BINARY); - }else{ - threshold(src, src, energy_part_param_.GRAY_THRESH, 255, THRESH_BINARY); + if (mcu_data.enemy_color == ENEMY_BLUE){ + threshold(src, src, energy_part_param_.RED_GRAY_THRESH, 255, THRESH_BINARY); + } else if(mcu_data.enemy_color == ENEMY_RED){ + threshold(src, src, energy_part_param_.BLUE_GRAY_THRESH, 255, THRESH_BINARY); } if (show_process)imshow("bin", src); if (show_energy)waitKey(1); diff --git a/energy/src/energy/clear/energy_init.cpp b/energy/src/energy/clear/energy_init.cpp index cac5553..d5964e7 100644 --- a/energy/src/energy/clear/energy_init.cpp +++ b/energy/src/energy/clear/energy_init.cpp @@ -83,16 +83,16 @@ void Energy::initEnergy() { void Energy::initEnergyPartParam() { // gimbal_energy_part_param_.GRAY_THRESH = 120;//home // gimbal_energy_part_param_.GRAY_THRESH = 200;//official - gimbal_energy_part_param_.GRAY_THRESH = 180;//game - gimbal_energy_part_param_.SUB_GRAY_THRESH = 100; + gimbal_energy_part_param_.RED_GRAY_THRESH = 180;//game + gimbal_energy_part_param_.BLUE_GRAY_THRESH = 100;//game gimbal_energy_part_param_.SPLIT_GRAY_THRESH = 180; gimbal_energy_part_param_.FAN_GRAY_THRESH = 75; gimbal_energy_part_param_.ARMOR_GRAY_THRESH = 80; - gimbal_energy_part_param_.FAN_CONTOUR_AREA_MAX = 3000; - gimbal_energy_part_param_.FAN_CONTOUR_AREA_MIN = 500; + gimbal_energy_part_param_.FAN_CONTOUR_AREA_MAX = 5000; + gimbal_energy_part_param_.FAN_CONTOUR_AREA_MIN = 1500; gimbal_energy_part_param_.FAN_CONTOUR_LENGTH_MIN = 55; - gimbal_energy_part_param_.FAN_CONTOUR_LENGTH_MAX = 95; + gimbal_energy_part_param_.FAN_CONTOUR_LENGTH_MAX = 100; gimbal_energy_part_param_.FAN_CONTOUR_WIDTH_MIN = 20; gimbal_energy_part_param_.FAN_CONTOUR_WIDTH_MAX = 52; gimbal_energy_part_param_.FAN_CONTOUR_HW_RATIO_MAX = 3.5; diff --git a/energy/src/energy/energy.cpp b/energy/src/energy/energy.cpp index 076fa18..60e7b2d 100644 --- a/energy/src/energy/energy.cpp +++ b/energy/src/energy/energy.cpp @@ -53,8 +53,6 @@ void Energy::setBigEnergyInit() { initEnergy(); initEnergyPartParam(); - getsystime(time_start_energy); - is_big = true; is_small = false; is_gimbal = true; diff --git a/energy/src/energy/run.cpp b/energy/src/energy/run.cpp index f4d40e6..cae34fe 100644 --- a/energy/src/energy/run.cpp +++ b/energy/src/energy/run.cpp @@ -79,22 +79,12 @@ void Energy::runBig(cv::Mat &gimbal_src) { if (findArmors(gimbal_src) < 1)return; if (show_energy)showArmors("armor", gimbal_src); if (!findFlowStripFan(gimbal_src)) { - if (!findFlowStripWeak(gimbal_src)){ - is_find_target = false; - return; - } + if (!findFlowStripWeak(gimbal_src)) return; } else { if (show_energy)showFlowStripFan("strip fan", gimbal_src); - if (!findTargetInFlowStripFan()) { - is_find_target = false; - return; - } - if (!findFlowStrip(gimbal_src)){ - is_find_target = false; - return; - } + if (!findTargetInFlowStripFan()) return; + if (!findFlowStrip(gimbal_src))return; } - is_find_target = true; if (!findCenterROI(gimbal_src))return; if (show_energy)showFlowStrip("strip", gimbal_src); if (!findCenterR(gimbal_src))return; @@ -135,22 +125,12 @@ void Energy::runSmall(cv::Mat &gimbal_src) { if (findArmors(gimbal_src) < 1)return; if (show_energy)showArmors("armor", gimbal_src); if (!findFlowStripFan(gimbal_src)) { - if (!findFlowStripWeak(gimbal_src)){ - is_find_target = false; - return; - } + if (!findFlowStripWeak(gimbal_src)) return; } else { if (show_energy)showFlowStripFan("strip fan", gimbal_src); - if (!findTargetInFlowStripFan()) { - is_find_target = false; - return; - } - if (!findFlowStrip(gimbal_src)){ - is_find_target = false; - return; - } + if (!findTargetInFlowStripFan()) return; + if (!findFlowStrip(gimbal_src)) return; } - is_find_target = true; if (show_energy)showTarget("target", gimbal_src); fans_cnt = findFans(gimbal_src); if (show_energy)showFans("fans", gimbal_src); diff --git a/main.cpp b/main.cpp index e3c1167..e008b3c 100644 --- a/main.cpp +++ b/main.cpp @@ -30,7 +30,7 @@ using namespace std; McuData mcu_data = { // 单片机端回传结构体 0, // 当前云台yaw角 0, // 当前云台pitch角 - SMALL_ENERGY_STATE, // 当前状态,自瞄-大符-小符 + BIG_ENERGY_STATE, // 当前状态,自瞄-大符-小符 0, // 云台角度标记位 1, // 是否启用数字识别 ENEMY_RED, // 敌方颜色 @@ -66,8 +66,8 @@ int main(int argc, char *argv[]) { video_gimbal = new CameraWrapper(ARMOR_CAMERA_EXPOSURE, ARMOR_CAMERA_GAIN, 2/*, "armor"*/); video_chassis = new CameraWrapper(ENERGY_CAMERA_EXPOSURE, ENERGY_CAMERA_GAIN, 2/*, "energy"*/); } else { - video_gimbal = new VideoWrapper("/home/sun/桌面/video_8.7/round1-8-5-7-small.avi"); - video_chassis = new VideoWrapper("/home/sun/桌面/video_8.7/round1-8-5-7-small.avi"); + video_gimbal = new VideoWrapper("/home/sun/桌面/video_8.8/8.7.4-big.avi"); + video_chassis = new VideoWrapper("/home/sun/桌面/video_8.8/8.7.4-big.avi"); } if (video_gimbal->init()) { LOGM("video_gimbal source initialization successfully."); @@ -108,23 +108,26 @@ int main(int argc, char *argv[]) { LOGW("video_gimbal source unavailable!"); } } - checkReconnect(video_chassis->read(chassis_src)); +// checkReconnect(video_chassis->read(chassis_src)); energy.setBigEnergyInit(); } last_state = curr_state;//更新上一帧状态 ok = checkReconnect(video_gimbal->read(gimbal_src)); - video_chassis->read(chassis_src); +// video_chassis->read(chassis_src); #ifdef GIMBAL_FLIP_MODE flip(gimbal_src, gimbal_src, GIMBAL_FLIP_MODE); #endif -#ifdef CHASSIS_FLIP_MODE - flip(chassis_src, chassis_src, CHASSIS_FLIP_MODE); -#endif - if (!from_camera) extract(gimbal_src, chassis_src); - if (save_video) saveVideos(gimbal_src, chassis_src);//保存视频 - if (show_origin) showOrigin(gimbal_src, chassis_src);//显示原始图像 - energy.runBig(gimbal_src, chassis_src); -// energy.runBig(gimbal_src); +//#ifdef CHASSIS_FLIP_MODE +// flip(chassis_src, chassis_src, CHASSIS_FLIP_MODE); +//#endif +// if (!from_camera) extract(gimbal_src, chassis_src); +// if (save_video) saveVideos(gimbal_src, chassis_src);//保存视频 +// if (show_origin) showOrigin(gimbal_src, chassis_src);//显示原始图像 + if (!from_camera) extract(gimbal_src); + if (save_video) saveVideos(gimbal_src);//保存视频 + if (show_origin) showOrigin(gimbal_src);//显示原始图像 +// energy.runBig(gimbal_src, chassis_src); + energy.runBig(gimbal_src); } else if (curr_state == SMALL_ENERGY_STATE) { if (last_state != SMALL_ENERGY_STATE) { LOGM(STR_CTR(WORD_GREEN, "Start Small Energy!"));