diff --git a/energy/src/energy/clear/energy_init.cpp b/energy/src/energy/clear/energy_init.cpp index d161b9b..94e3b86 100644 --- a/energy/src/energy/clear/energy_init.cpp +++ b/energy/src/energy/clear/energy_init.cpp @@ -69,8 +69,8 @@ void Energy::initEnergy() { // 此函数对能量机关参数进行初始化 // --------------------------------------------------------------------------------------------------------------------- void Energy::initEnergyPartParam() { -// gimbal_energy_part_param_.GRAY_THRESH = 80; - gimbal_energy_part_param_.GRAY_THRESH = 225; + gimbal_energy_part_param_.GRAY_THRESH = 120; +// gimbal_energy_part_param_.GRAY_THRESH = 225; gimbal_energy_part_param_.SPLIT_GRAY_THRESH = 230; gimbal_energy_part_param_.FAN_GRAY_THRESH = 75; gimbal_energy_part_param_.ARMOR_GRAY_THRESH = 80; @@ -141,8 +141,8 @@ void Energy::initEnergyPartParam() { -// chassis_energy_part_param_.GRAY_THRESH = 80; - chassis_energy_part_param_.GRAY_THRESH = 225; + chassis_energy_part_param_.GRAY_THRESH = 120; +// chassis_energy_part_param_.GRAY_THRESH = 225; chassis_energy_part_param_.SPLIT_GRAY_THRESH = 230; chassis_energy_part_param_.FAN_GRAY_THRESH = 75; chassis_energy_part_param_.ARMOR_GRAY_THRESH = 80; @@ -199,12 +199,13 @@ void Energy::initEnergyPartParam() { chassis_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MAX = 100000; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MIN = 0; - chassis_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MIN = 50; - chassis_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MAX = 90; - chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 3; - chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MAX = 20; + chassis_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MIN = 55; + chassis_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MAX = 95; + chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 13; + chassis_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MAX = 35; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MAX = 12; - chassis_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 4; +// chassis_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 4; + chassis_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 2.7; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_RATIO_MIN = 0.5; chassis_energy_part_param_.FLOW_STRIP_CONTOUR_INTERSETION_AREA_MIN = 300; diff --git a/energy/src/energy/find/energy_finder.cpp b/energy/src/energy/find/energy_finder.cpp index ec7e2a5..666b373 100644 --- a/energy/src/energy/find/energy_finder.cpp +++ b/energy/src/energy/find/energy_finder.cpp @@ -68,7 +68,7 @@ int Energy::findArmors(const cv::Mat src) { std::vector > armor_contours_external;//用总轮廓减去外轮廓,只保留内轮廓,除去流动条的影响。 ArmorStruct(src_bin);//图像膨胀,防止图像断开并更方便寻找 - imshow("armor struct", src_bin); +// imshow("armor struct", src_bin); findContours(src_bin, armor_contours, CV_RETR_LIST, CV_CHAIN_APPROX_NONE); // findContours(src_bin, armor_contours_external, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); @@ -171,7 +171,7 @@ bool Energy::findFlowStripFan(const cv::Mat src) { } std::vector > flow_strip_fan_contours; FlowStripFanStruct(src_bin);//图像膨胀,防止图像断开并更方便寻找 - imshow("flow strip fan struct", src_bin); +// imshow("flow strip fan struct", src_bin); findContours(src_bin, flow_strip_fan_contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); @@ -214,7 +214,7 @@ bool Energy::findFlowStrip(const cv::Mat src) { cvtColor(src_bin, src_bin, CV_BGR2GRAY);//若读取三通道视频文件,需转换为单通道 } FlowStripStruct(src_bin);//图像膨胀,防止图像断开并更方便寻找 -// imshow("flow strip struct", src_bin); + imshow("flow strip struct", src_bin); std::vector > flow_strip_contours; findContours(src_bin, flow_strip_contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); @@ -228,10 +228,10 @@ bool Energy::findFlowStrip(const cv::Mat src) { // Size2f cur_size = cur_rect.size; // float length = cur_size.height > cur_size.width ? cur_size.height : cur_size.width; // float width = cur_size.height < cur_size.width ? cur_size.height : cur_size.width; -// if (length > 20 && width > 5) { +// if (length / width > 2 && width > 5) { // cout << cur_rect.center << endl; // flow_strip = cv::minAreaRect(flow_strip_contour); -// cout << "flow strip fan area: " << length << '\t' << width << endl; +// cout << "flow strip area: " << length << '\t' << width << endl; // } return true; } diff --git a/energy/src/energy/get/aim_point_get.cpp b/energy/src/energy/get/aim_point_get.cpp index dcb39bf..65aa004 100644 --- a/energy/src/energy/get/aim_point_get.cpp +++ b/energy/src/energy/get/aim_point_get.cpp @@ -11,9 +11,9 @@ using namespace cv; //---------------------------------------------------------------------------------------------------------------------- // 此函数通过自瞄逻辑击打目标点,用于大符的自动对心和小符直接打击 // --------------------------------------------------------------------------------------------------------------------- -void Energy::getAimPoint(cv::Point target_point){ - double dx = target_point.x - 320; - double dy = target_point.y - 240; - yaw_rotation = atan(dx / FOCUS_PIXAL) * 180 / PI; +void Energy::getAimPoint(cv::Point target_point) { + double dx = -(target_point.x - 320 - 10); + double dy = -(target_point.y - 240 - 22); + yaw_rotation = atan(dx / FOCUS_PIXAL) * 180 / PI; pitch_rotation = atan(dy / FOCUS_PIXAL) * 180 / PI; } diff --git a/energy/src/energy/run.cpp b/energy/src/energy/run.cpp index 07c0c7e..63eaa0c 100644 --- a/energy/src/energy/run.cpp +++ b/energy/src/energy/run.cpp @@ -19,6 +19,8 @@ void Energy::run(cv::Mat &gimbal_src, cv::Mat &chassis_src) { energy_part_param_ = gimbal_energy_part_param_; clearAll(); initImage(gimbal_src); +// findFans(gimbal_src); +// showFans("fan",gimbal_src); if (findArmors(gimbal_src) < 1)return; if (show_energy)showArmors("armor", gimbal_src); diff --git a/energy/src/energy/send/send.cpp b/energy/src/energy/send/send.cpp index 51b9825..aa5952e 100644 --- a/energy/src/energy/send/send.cpp +++ b/energy/src/energy/send/send.cpp @@ -17,6 +17,7 @@ void Energy::sendTarget(Serial& serial, float x, float y, float z){ uint8_t buff[8]; x_tmp = static_cast(x * (32768 - 1) / 100); y_tmp = static_cast(y * (32768 - 1) / 100); + z_tmp = static_cast(z * (32768 - 1) / 100); buff[0] = 's'; buff[1] = static_cast((x_tmp >> 8) & 0xFF); buff[2] = static_cast((x_tmp >> 0) & 0xFF); diff --git a/main.cpp b/main.cpp index 7f0c3a4..6d36b63 100644 --- a/main.cpp +++ b/main.cpp @@ -64,8 +64,8 @@ int main(int argc, char *argv[]) { video_gimbal = new CameraWrapper(0/*, "armor"*/); video_chassis = new CameraWrapper(1/*, "energy"*/); } else { - video_gimbal = new VideoWrapper("/home/sun/项目/energy_video/大能量机关(蓝+开灯).mov"); - video_chassis = new VideoWrapper("/home/sun/项目/energy_video/大能量机关(蓝+开灯).mov"); + video_gimbal = new VideoWrapper("/home/sun/项目/energy_video/148.avi"); + video_chassis = new VideoWrapper("/home/sun/项目/energy_video/148.avi"); } if (video_gimbal->init()) { LOGM("video_gimbal source initialization successfully."); @@ -94,6 +94,7 @@ int main(int argc, char *argv[]) { CNT_TIME("Total", { if (mcuData.state != ARMOR_STATE) {//能量机关模式 if (last_state == ARMOR_STATE) {//若上一帧是自瞄模式,即刚往完成切换,则需要初始化 + destroyAllWindows(); ((CameraWrapper *) video_gimbal)->changeBrightness(ENERGY_CAMERA_GAIN); energy.setEnergyInit(); checkReconnect(video_chassis->read(chassis_src)); @@ -102,6 +103,7 @@ int main(int argc, char *argv[]) { #endif } ok = checkReconnect(video_gimbal->read(gimbal_src)); + video_gimbal->read(gimbal_src); video_chassis->read(chassis_src); #ifdef GIMBAL_FLIP_MODE flip(gimbal_src, gimbal_src, GIMBAL_FLIP_MODE); @@ -114,6 +116,7 @@ int main(int argc, char *argv[]) { last_state = mcuData.state;//更新上一帧状态 } else { // 自瞄模式 if (last_state != ARMOR_STATE) { + destroyAllWindows(); ((CameraWrapper *) video_gimbal)->changeBrightness(ARMOR_CAMERA_GAIN); } last_state = mcuData.state; @@ -128,7 +131,7 @@ int main(int argc, char *argv[]) { armorFinder.run(gimbal_src); }); } -// cv::waitKey(0); + cv::waitKey(1); }); } while (ok); delete video_gimbal;