energy changed

This commit is contained in:
sun
2019-08-07 14:09:58 +08:00
parent 8133aeedea
commit 518eb22867
7 changed files with 35 additions and 56 deletions

View File

@@ -92,7 +92,6 @@ private:
float sum_yaw, sum_pitch;//yaw和pitch的累计误差即PID中积分项 float sum_yaw, sum_pitch;//yaw和pitch的累计误差即PID中积分项
systime time_start_guess; systime time_start_guess;
systime time_start_energy;
cv::RotatedRect centerR;//风车中心字母R的可能候选区 cv::RotatedRect centerR;//风车中心字母R的可能候选区
cv::RotatedRect flow_strip;//图像中所有流动条(理论上只有一个) cv::RotatedRect flow_strip;//图像中所有流动条(理论上只有一个)

View File

@@ -17,7 +17,8 @@ using std::vector;
// --------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------
struct EnergyPartParam { struct EnergyPartParam {
int GRAY_THRESH;//二值化阈值 int GRAY_THRESH;//二值化阈值
int SUB_GRAY_THRESH;//备用二值化阈值 int RED_GRAY_THRESH;//红方二值化阈值
int BLUE_GRAY_THRESH;//蓝方二值化阈值
int SPLIT_GRAY_THRESH;//通道分离二值化阈值 int SPLIT_GRAY_THRESH;//通道分离二值化阈值
int FAN_GRAY_THRESH;//扇叶识别二值化阈值 int FAN_GRAY_THRESH;//扇叶识别二值化阈值
int ARMOR_GRAY_THRESH;//装甲板识别二值化阈值 int ARMOR_GRAY_THRESH;//装甲板识别二值化阈值

View File

@@ -7,6 +7,8 @@
using namespace std; using namespace std;
using namespace cv; using namespace cv;
extern McuData mcu_data;
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
// 此函数用于清空各vector // 此函数用于清空各vector
@@ -26,15 +28,11 @@ void Energy::clearAll() {
void Energy::initImage(cv::Mat &src) { void Energy::initImage(cv::Mat &src) {
// imagePreprocess(src); // imagePreprocess(src);
// if(show_process)imshow("img_preprocess", 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 (src.type() == CV_8UC3)cvtColor(src, src, COLOR_BGR2GRAY);
if(interval > 3000 && !is_find_target){ if (mcu_data.enemy_color == ENEMY_BLUE){
threshold(src, src, energy_part_param_.SUB_GRAY_THRESH, 255, THRESH_BINARY); threshold(src, src, energy_part_param_.RED_GRAY_THRESH, 255, THRESH_BINARY);
}else{ } else if(mcu_data.enemy_color == ENEMY_RED){
threshold(src, src, energy_part_param_.GRAY_THRESH, 255, THRESH_BINARY); threshold(src, src, energy_part_param_.BLUE_GRAY_THRESH, 255, THRESH_BINARY);
} }
if (show_process)imshow("bin", src); if (show_process)imshow("bin", src);
if (show_energy)waitKey(1); if (show_energy)waitKey(1);

View File

@@ -83,16 +83,16 @@ void Energy::initEnergy() {
void Energy::initEnergyPartParam() { void Energy::initEnergyPartParam() {
// gimbal_energy_part_param_.GRAY_THRESH = 120;//home // gimbal_energy_part_param_.GRAY_THRESH = 120;//home
// gimbal_energy_part_param_.GRAY_THRESH = 200;//official // gimbal_energy_part_param_.GRAY_THRESH = 200;//official
gimbal_energy_part_param_.GRAY_THRESH = 180;//game gimbal_energy_part_param_.RED_GRAY_THRESH = 180;//game
gimbal_energy_part_param_.SUB_GRAY_THRESH = 100; gimbal_energy_part_param_.BLUE_GRAY_THRESH = 100;//game
gimbal_energy_part_param_.SPLIT_GRAY_THRESH = 180; gimbal_energy_part_param_.SPLIT_GRAY_THRESH = 180;
gimbal_energy_part_param_.FAN_GRAY_THRESH = 75; gimbal_energy_part_param_.FAN_GRAY_THRESH = 75;
gimbal_energy_part_param_.ARMOR_GRAY_THRESH = 80; gimbal_energy_part_param_.ARMOR_GRAY_THRESH = 80;
gimbal_energy_part_param_.FAN_CONTOUR_AREA_MAX = 3000; gimbal_energy_part_param_.FAN_CONTOUR_AREA_MAX = 5000;
gimbal_energy_part_param_.FAN_CONTOUR_AREA_MIN = 500; 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_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_MIN = 20;
gimbal_energy_part_param_.FAN_CONTOUR_WIDTH_MAX = 52; gimbal_energy_part_param_.FAN_CONTOUR_WIDTH_MAX = 52;
gimbal_energy_part_param_.FAN_CONTOUR_HW_RATIO_MAX = 3.5; gimbal_energy_part_param_.FAN_CONTOUR_HW_RATIO_MAX = 3.5;

View File

@@ -53,8 +53,6 @@ void Energy::setBigEnergyInit() {
initEnergy(); initEnergy();
initEnergyPartParam(); initEnergyPartParam();
getsystime(time_start_energy);
is_big = true; is_big = true;
is_small = false; is_small = false;
is_gimbal = true; is_gimbal = true;

View File

@@ -79,22 +79,12 @@ void Energy::runBig(cv::Mat &gimbal_src) {
if (findArmors(gimbal_src) < 1)return; if (findArmors(gimbal_src) < 1)return;
if (show_energy)showArmors("armor", gimbal_src); if (show_energy)showArmors("armor", gimbal_src);
if (!findFlowStripFan(gimbal_src)) { if (!findFlowStripFan(gimbal_src)) {
if (!findFlowStripWeak(gimbal_src)){ if (!findFlowStripWeak(gimbal_src)) return;
is_find_target = false;
return;
}
} else { } else {
if (show_energy)showFlowStripFan("strip fan", gimbal_src); if (show_energy)showFlowStripFan("strip fan", gimbal_src);
if (!findTargetInFlowStripFan()) { if (!findTargetInFlowStripFan()) return;
is_find_target = false; if (!findFlowStrip(gimbal_src))return;
return;
} }
if (!findFlowStrip(gimbal_src)){
is_find_target = false;
return;
}
}
is_find_target = true;
if (!findCenterROI(gimbal_src))return; if (!findCenterROI(gimbal_src))return;
if (show_energy)showFlowStrip("strip", gimbal_src); if (show_energy)showFlowStrip("strip", gimbal_src);
if (!findCenterR(gimbal_src))return; if (!findCenterR(gimbal_src))return;
@@ -135,22 +125,12 @@ void Energy::runSmall(cv::Mat &gimbal_src) {
if (findArmors(gimbal_src) < 1)return; if (findArmors(gimbal_src) < 1)return;
if (show_energy)showArmors("armor", gimbal_src); if (show_energy)showArmors("armor", gimbal_src);
if (!findFlowStripFan(gimbal_src)) { if (!findFlowStripFan(gimbal_src)) {
if (!findFlowStripWeak(gimbal_src)){ if (!findFlowStripWeak(gimbal_src)) return;
is_find_target = false;
return;
}
} else { } else {
if (show_energy)showFlowStripFan("strip fan", gimbal_src); if (show_energy)showFlowStripFan("strip fan", gimbal_src);
if (!findTargetInFlowStripFan()) { if (!findTargetInFlowStripFan()) return;
is_find_target = false; if (!findFlowStrip(gimbal_src)) return;
return;
} }
if (!findFlowStrip(gimbal_src)){
is_find_target = false;
return;
}
}
is_find_target = true;
if (show_energy)showTarget("target", gimbal_src); if (show_energy)showTarget("target", gimbal_src);
fans_cnt = findFans(gimbal_src); fans_cnt = findFans(gimbal_src);
if (show_energy)showFans("fans", gimbal_src); if (show_energy)showFans("fans", gimbal_src);

View File

@@ -30,7 +30,7 @@ using namespace std;
McuData mcu_data = { // 单片机端回传结构体 McuData mcu_data = { // 单片机端回传结构体
0, // 当前云台yaw角 0, // 当前云台yaw角
0, // 当前云台pitch角 0, // 当前云台pitch角
SMALL_ENERGY_STATE, // 当前状态,自瞄-大符-小符 BIG_ENERGY_STATE, // 当前状态,自瞄-大符-小符
0, // 云台角度标记位 0, // 云台角度标记位
1, // 是否启用数字识别 1, // 是否启用数字识别
ENEMY_RED, // 敌方颜色 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_gimbal = new CameraWrapper(ARMOR_CAMERA_EXPOSURE, ARMOR_CAMERA_GAIN, 2/*, "armor"*/);
video_chassis = new CameraWrapper(ENERGY_CAMERA_EXPOSURE, ENERGY_CAMERA_GAIN, 2/*, "energy"*/); video_chassis = new CameraWrapper(ENERGY_CAMERA_EXPOSURE, ENERGY_CAMERA_GAIN, 2/*, "energy"*/);
} else { } else {
video_gimbal = 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.7/round1-8-5-7-small.avi"); video_chassis = new VideoWrapper("/home/sun/桌面/video_8.8/8.7.4-big.avi");
} }
if (video_gimbal->init()) { if (video_gimbal->init()) {
LOGM("video_gimbal source initialization successfully."); LOGM("video_gimbal source initialization successfully.");
@@ -108,23 +108,26 @@ int main(int argc, char *argv[]) {
LOGW("video_gimbal source unavailable!"); LOGW("video_gimbal source unavailable!");
} }
} }
checkReconnect(video_chassis->read(chassis_src)); // checkReconnect(video_chassis->read(chassis_src));
energy.setBigEnergyInit(); energy.setBigEnergyInit();
} }
last_state = curr_state;//更新上一帧状态 last_state = curr_state;//更新上一帧状态
ok = checkReconnect(video_gimbal->read(gimbal_src)); ok = checkReconnect(video_gimbal->read(gimbal_src));
video_chassis->read(chassis_src); // video_chassis->read(chassis_src);
#ifdef GIMBAL_FLIP_MODE #ifdef GIMBAL_FLIP_MODE
flip(gimbal_src, gimbal_src, GIMBAL_FLIP_MODE); flip(gimbal_src, gimbal_src, GIMBAL_FLIP_MODE);
#endif #endif
#ifdef CHASSIS_FLIP_MODE //#ifdef CHASSIS_FLIP_MODE
flip(chassis_src, chassis_src, CHASSIS_FLIP_MODE); // flip(chassis_src, chassis_src, CHASSIS_FLIP_MODE);
#endif //#endif
if (!from_camera) extract(gimbal_src, chassis_src); // if (!from_camera) extract(gimbal_src, chassis_src);
if (save_video) saveVideos(gimbal_src, chassis_src);//保存视频 // if (save_video) saveVideos(gimbal_src, chassis_src);//保存视频
if (show_origin) showOrigin(gimbal_src, chassis_src);//显示原始图像 // if (show_origin) showOrigin(gimbal_src, chassis_src);//显示原始图像
energy.runBig(gimbal_src, chassis_src); if (!from_camera) extract(gimbal_src);
// energy.runBig(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) { } else if (curr_state == SMALL_ENERGY_STATE) {
if (last_state != SMALL_ENERGY_STATE) { if (last_state != SMALL_ENERGY_STATE) {
LOGM(STR_CTR(WORD_GREEN, "Start Small Energy!")); LOGM(STR_CTR(WORD_GREEN, "Start Small Energy!"));