From 3258c858880bea05a127002be0102ad451c9b57f Mon Sep 17 00:00:00 2001 From: sun Date: Wed, 17 Jul 2019 16:15:34 +0800 Subject: [PATCH] energy change --- energy/include/energy/energy.h | 6 ++++-- energy/src/energy/energy.cpp | 29 +++++++++++++++++++++++++++++ energy/src/energy/run.cpp | 9 ++++----- main.cpp | 24 +++++++++++++++++++----- 4 files changed, 56 insertions(+), 12 deletions(-) diff --git a/energy/include/energy/energy.h b/energy/include/energy/energy.h index d19c800..dd4507e 100644 --- a/energy/include/energy/energy.h +++ b/energy/include/energy/energy.h @@ -27,12 +27,14 @@ public: Energy(Serial &u, uint8_t &color);//构造函数,参数为串口和敌方颜色 ~Energy();//默认析构函数 - void run(cv::Mat &gimbal_src, cv::Mat &chassis_src); - void run(cv::Mat &gimbal_src); + void runBig(cv::Mat &gimbal_src, cv::Mat &chassis_src); + void runBig(cv::Mat &gimbal_src); void runSmall(cv::Mat &gimbal_src); Serial &serial;//串口 void setEnergyInit();//设置能量机关初始化 + void setBigEnergyInit();//设置大能量机关初始化 + void setSmallEnergyInit();//设置小能量机关初始化 void sendTarget(Serial &serial, float x, float y, float z); diff --git a/energy/src/energy/energy.cpp b/energy/src/energy/energy.cpp index f5319f1..6537d04 100644 --- a/energy/src/energy/energy.cpp +++ b/energy/src/energy/energy.cpp @@ -44,4 +44,33 @@ void Energy::setEnergyInit() { is_small = false; is_gimbal = true; is_chassis = false; +} + + +//---------------------------------------------------------------------------------------------------------------------- +// 此函数为大能量机关再初始化函数 +// --------------------------------------------------------------------------------------------------------------------- +void Energy::setBigEnergyInit() { + initEnergy(); + initEnergyPartParam(); + + is_big = true; + is_small = false; + is_gimbal = true; + is_chassis = false; +} + + + +//---------------------------------------------------------------------------------------------------------------------- +// 此函数为大能量机关再初始化函数 +// --------------------------------------------------------------------------------------------------------------------- +void Energy::setSmallEnergyInit() { + initEnergy(); + initEnergyPartParam(); + + is_big = false; + is_small = true; + is_gimbal = true; + is_chassis = false; } \ No newline at end of file diff --git a/energy/src/energy/run.cpp b/energy/src/energy/run.cpp index d8393ab..0623ec3 100644 --- a/energy/src/energy/run.cpp +++ b/energy/src/energy/run.cpp @@ -12,9 +12,9 @@ using namespace cv; //---------------------------------------------------------------------------------------------------------------------- // 此函数为能量机关模式主控制流函数,且步兵需要同时拥有云台摄像头和底盘摄像头 // --------------------------------------------------------------------------------------------------------------------- -void Energy::run(cv::Mat &gimbal_src, cv::Mat &chassis_src) { +void Energy::runBig(cv::Mat &gimbal_src, cv::Mat &chassis_src) { if (chassis_src.empty()) - run(gimbal_src);//仅拥有云台摄像头则调用单摄像头的run函数 + runBig(gimbal_src);//仅拥有云台摄像头则调用单摄像头的run函数 else if (is_gimbal) { energy_part_param_ = gimbal_energy_part_param_; clearAll(); @@ -82,7 +82,7 @@ void Energy::run(cv::Mat &gimbal_src, cv::Mat &chassis_src) { //---------------------------------------------------------------------------------------------------------------------- // 此函数为能量机关模式主控制流函数,且步兵仅拥有云台摄像头 // --------------------------------------------------------------------------------------------------------------------- -void Energy::run(cv::Mat &gimbal_src) { +void Energy::runBig(cv::Mat &gimbal_src) { energy_part_param_ = gimbal_energy_part_param_; clearAll(); initImage(gimbal_src); @@ -127,11 +127,10 @@ void Energy::run(cv::Mat &gimbal_src) { } - //---------------------------------------------------------------------------------------------------------------------- // 此函数为小能量机关模式主控制流函数,击打小符只需要拥有云台摄像头 // --------------------------------------------------------------------------------------------------------------------- -void Energy::runSmall(cv::Mat &gimbal_src){ +void Energy::runSmall(cv::Mat &gimbal_src) { energy_part_param_ = gimbal_energy_part_param_; clearAll(); initImage(gimbal_src); diff --git a/main.cpp b/main.cpp index a95dc8e..20ebc9d 100644 --- a/main.cpp +++ b/main.cpp @@ -92,11 +92,11 @@ int main(int argc, char *argv[]) { cout << "start running" << endl; do { CNT_TIME("Total", { - if (mcuData.state != ARMOR_STATE) {//能量机关模式 - if (last_state == ARMOR_STATE) {//若上一帧是自瞄模式,即刚往完成切换,则需要初始化 + if (mcuData.state == BIG_ENERGY_STATE) {//大能量机关模式 + if (last_state != BIG_ENERGY_STATE) {//若上一帧不是大能量机关模式,即刚往完成切换,则需要初始化 destroyAllWindows(); ((CameraWrapper *) video_gimbal)->changeBrightness(ENERGY_CAMERA_GAIN); - energy.setEnergyInit(); + energy.setBigEnergyInit(); checkReconnect(video_chassis->read(chassis_src)); #ifdef CHASSIS_FLIP_MODE flip(chassis_src, chassis_src, CHASSIS_FLIP_MODE); @@ -110,8 +110,22 @@ int main(int argc, char *argv[]) { 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.run(gimbal_src, chassis_src); - energy.run(gimbal_src); + energy.runBig(gimbal_src, chassis_src); + last_state = mcuData.state;//更新上一帧状态 + } else if (mcuData.state == SMALL_ENERGY_STATE) { + if (mcuData.state != SMALL_ENERGY_STATE) { + destroyAllWindows(); + ((CameraWrapper *) video_gimbal)->changeBrightness(ENERGY_CAMERA_GAIN); + energy.setSmallEnergyInit(); + } + ok = checkReconnect(video_gimbal->read(gimbal_src)); +#ifdef GIMBAL_FLIP_MODE + flip(gimbal_src, gimbal_src, GIMBAL_FLIP_MODE); +#endif + if (!from_camera) extract(gimbal_src); + if (save_video) saveVideos(gimbal_src);//保存视频 + if (show_origin) showOrigin(gimbal_src);//显示原始图像 + energy.runSmall(gimbal_src); last_state = mcuData.state;//更新上一帧状态 } else { // 自瞄模式 if (last_state != ARMOR_STATE) {