From 0db1fba0d8673cc562caddd8ee1ebd71373005fa Mon Sep 17 00:00:00 2001 From: xinyang <895639507@qq.com> Date: Wed, 7 Aug 2019 01:32:30 +0800 Subject: [PATCH 1/3] fix bug --- armor/include/armor_finder/armor_finder.h | 3 +-- armor/src/armor_finder/armor_finder.cpp | 5 ++--- armor/src/armor_finder/find/find_armor_box.cpp | 2 +- main.cpp | 17 +++++++++-------- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/armor/include/armor_finder/armor_finder.h b/armor/include/armor_finder/armor_finder.h index 96139be..a886655 100644 --- a/armor/include/armor_finder/armor_finder.h +++ b/armor/include/armor_finder/armor_finder.h @@ -93,7 +93,7 @@ typedef std::vector ArmorBoxes; /********************* 自瞄类定义 **********************/ class ArmorFinder{ public: - ArmorFinder(uint8_t &color, Serial &u, const string ¶s_folder, const uint8_t &use); + ArmorFinder(uint8_t &color, Serial &u, const string ¶s_folder); ~ArmorFinder() = default; private: @@ -117,7 +117,6 @@ private: int contour_area; // 装甲区域亮点个数,用于数字识别未启用时判断是否跟丢(已弃用) int tracking_cnt; // 记录追踪帧数,用于定时退出追踪 Serial &serial; // 串口对象,引用外部变量,用于和能量机关共享同一个变量 - const uint8_t &use_classifier; // 标记是否启用CNN分类器,引用外部变量,自动变化 RoundQueue top_periodms; // 陀螺周期循环队列 systime last_front_time; // 上一次发生装甲板方向切换的时间 int anti_top_cnt; // 满足条件的装甲板方向切换持续次数,用于反陀螺 diff --git a/armor/src/armor_finder/armor_finder.cpp b/armor/src/armor_finder/armor_finder.cpp index 790b16d..844d73e 100644 --- a/armor/src/armor_finder/armor_finder.cpp +++ b/armor/src/armor_finder/armor_finder.cpp @@ -46,7 +46,7 @@ std::map prior_red = { {"NO", 10}, }; -ArmorFinder::ArmorFinder(uint8_t &color, Serial &u, const string ¶s_folder, const uint8_t &use) : +ArmorFinder::ArmorFinder(uint8_t &color, Serial &u, const string ¶s_folder) : serial(u), enemy_color(color), state(STANDBY_STATE), @@ -55,7 +55,6 @@ ArmorFinder::ArmorFinder(uint8_t &color, Serial &u, const string ¶s_folder, anti_top_state(NORMAL), classifier(paras_folder), contour_area(0), - use_classifier(use), tracking_cnt(0) { } @@ -67,7 +66,7 @@ void ArmorFinder::run(cv::Mat &src) { case SEARCHING_STATE: if (stateSearchingTarget(src)) { if ((target_box.rect & cv::Rect2d(0, 0, 640, 480)) == target_box.rect) { // 判断装甲板区域是否脱离图像区域 - if (!classifier || !use_classifier) { /* 如果分类器不可用或者不使用分类器 */ + if (!classifier) { /* 如果分类器不可用 */ cv::Mat roi = src(target_box.rect).clone(), roi_gray; /* 就使用装甲区域亮点数判断是否跟丢 */ cv::cvtColor(roi, roi_gray, CV_RGB2GRAY); cv::threshold(roi_gray, roi_gray, 180, 255, cv::THRESH_BINARY); diff --git a/armor/src/armor_finder/find/find_armor_box.cpp b/armor/src/armor_finder/find/find_armor_box.cpp index 4caa4a9..25f6364 100644 --- a/armor/src/armor_finder/find/find_armor_box.cpp +++ b/armor/src/armor_finder/find/find_armor_box.cpp @@ -140,7 +140,7 @@ bool ArmorFinder::findArmorBox(const cv::Mat &src, ArmorBox &box) { cv::waitKey(1); } - if (classifier && use_classifier) { + if (classifier) { CNT_TIME("classify: %d", { for (auto &armor_box : armor_boxes) { cv::Mat roi = src(armor_box.rect).clone(); diff --git a/main.cpp b/main.cpp index 1e604fe..39086a2 100644 --- a/main.cpp +++ b/main.cpp @@ -44,7 +44,7 @@ WrapperHead *video_chassis = nullptr; // 底盘摄像头视频源 Serial serial(115200); // 串口对象 uint8_t last_state = INIT_STATE; // 上次状态,用于初始化 // 自瞄主程序对象 -ArmorFinder armor_finder(mcu_data.enemy_color, serial, PROJECT_DIR"/tools/para/", mcu_data.use_classifier); +ArmorFinder armor_finder(mcu_data.enemy_color, serial, PROJECT_DIR"/tools/para/"); // 能量机关主程序对象 Energy energy(serial, mcu_data.enemy_color); @@ -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(PROJECT_DIR"/26.avi"); - video_chassis = new VideoWrapper(PROJECT_DIR"/26.avi"); + video_gimbal = new VideoWrapper(PROJECT_DIR"/5.avi"); + video_chassis = new VideoWrapper(PROJECT_DIR"/5.avi"); } if (video_gimbal->init()) { LOGM("video_gimbal source initialization successfully."); @@ -93,8 +93,9 @@ int main(int argc, char *argv[]) { bool ok = true; cout << "start running" << endl; do { + auto curr_state = mcu_data.state; CNT_TIME("Total", { - if (mcu_data.state == BIG_ENERGY_STATE) {//大能量机关模式 + if (curr_state == BIG_ENERGY_STATE) {//大能量机关模式 if (last_state != BIG_ENERGY_STATE) {//若上一帧不是大能量机关模式,即刚往完成切换,则需要初始化 LOGM(STR_CTR(WORD_BLUE, "Start Big Energy!")); destroyAllWindows(); @@ -110,7 +111,7 @@ int main(int argc, char *argv[]) { checkReconnect(video_chassis->read(chassis_src)); energy.setBigEnergyInit(); } - last_state = mcu_data.state;//更新上一帧状态 + last_state = curr_state;//更新上一帧状态 ok = checkReconnect(video_gimbal->read(gimbal_src)); video_chassis->read(chassis_src); #ifdef GIMBAL_FLIP_MODE @@ -124,7 +125,7 @@ int main(int argc, char *argv[]) { if (show_origin) showOrigin(gimbal_src, chassis_src);//显示原始图像 energy.runBig(gimbal_src, chassis_src); // energy.runBig(gimbal_src); - } else if (mcu_data.state == SMALL_ENERGY_STATE) { + } else if (curr_state == SMALL_ENERGY_STATE) { if (last_state != SMALL_ENERGY_STATE) { LOGM(STR_CTR(WORD_GREEN, "Start Small Energy!")); destroyAllWindows(); @@ -139,7 +140,7 @@ int main(int argc, char *argv[]) { } energy.setSmallEnergyInit(); } - last_state = mcu_data.state;//更新上一帧状态 + last_state = curr_state;//更新上一帧状态 ok = checkReconnect(video_gimbal->read(gimbal_src)); #ifdef GIMBAL_FLIP_MODE flip(gimbal_src, gimbal_src, GIMBAL_FLIP_MODE); @@ -162,7 +163,7 @@ int main(int argc, char *argv[]) { } } } - last_state = mcu_data.state; + last_state = curr_state; CNT_TIME(STR_CTR(WORD_GREEN, "read img"), { if(!checkReconnect(video_gimbal->read(gimbal_src))) continue; }); From 77841bfe3945adeacef760f4340831e99eb3f2c3 Mon Sep 17 00:00:00 2001 From: xinyang <895639507@qq.com> Date: Wed, 7 Aug 2019 02:11:28 +0800 Subject: [PATCH 2/3] fix bug. --- main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.cpp b/main.cpp index 39086a2..2e498ec 100644 --- a/main.cpp +++ b/main.cpp @@ -93,7 +93,7 @@ int main(int argc, char *argv[]) { bool ok = true; cout << "start running" << endl; do { - auto curr_state = mcu_data.state; + char curr_state = mcu_data.state; CNT_TIME("Total", { if (curr_state == BIG_ENERGY_STATE) {//大能量机关模式 if (last_state != BIG_ENERGY_STATE) {//若上一帧不是大能量机关模式,即刚往完成切换,则需要初始化 From 05b7991d571b662814a7499dddb7ede831d59a5a Mon Sep 17 00:00:00 2001 From: xinyang <895639507@qq.com> Date: Wed, 7 Aug 2019 02:18:10 +0800 Subject: [PATCH 3/3] some small change. --- armor/src/armor_finder/tracking_state/tracking_state.cpp | 4 ++-- tools/create-startup.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/armor/src/armor_finder/tracking_state/tracking_state.cpp b/armor/src/armor_finder/tracking_state/tracking_state.cpp index 53689dc..be3d0b0 100644 --- a/armor/src/armor_finder/tracking_state/tracking_state.cpp +++ b/armor/src/armor_finder/tracking_state/tracking_state.cpp @@ -25,8 +25,8 @@ bool ArmorFinder::stateTrackingTarget(cv::Mat &src) { bigger_rect.width = pos.width * 2; bigger_rect &= cv::Rect2d(0, 0, 640, 480); - if(show_armor_box) - showTrackSearchingPos("track", src, bigger_rect); +// if(show_armor_box) +// showTrackSearchingPos("track", src, bigger_rect); cv::Mat roi = src(bigger_rect).clone(); diff --git a/tools/create-startup.sh b/tools/create-startup.sh index fad1680..f8703d9 100755 --- a/tools/create-startup.sh +++ b/tools/create-startup.sh @@ -5,5 +5,5 @@ echo "echo sjturm | sudo -S cpufreq-set -g performance" >> $2/startup-run echo "mkdir $1/Mark" >> $2/startup-run echo "mkdir $1/gimbal_video" >> $2/startup-run echo "mkdir $1/armor_box_photo" >> $2/startup-run -echo "gnome-terminal -- bash -c \"echo sjturm | sudo -S $1/tools/monitor.sh \\\"$2/run --run-with-camera --save-video --wait-uart --save-labelled-boxes\\\"\"" >> $2/startup-run +echo "gnome-terminal -- bash -c \"echo sjturm | sudo -S $1/tools/monitor.sh \\\"$2/run --run-with-camera --save-video --wait-uart --save-labelled-boxes --show-armor-box\\\"\"" >> $2/startup-run chmod +x $2/startup-run