From 9b3178753f7500db530791813c66b5cd258f7403 Mon Sep 17 00:00:00 2001 From: xinyang Date: Tue, 7 May 2019 23:25:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=9B=91=E8=A7=86=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E7=BB=91=E5=AE=9A=E6=96=B9=E5=BC=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- armor/src/armor_finder/armor_finder.cpp | 3 +- main.cpp | 119 ++++++++++++------------ tools/bind-monitor.sh | 3 +- 3 files changed, 64 insertions(+), 61 deletions(-) diff --git a/armor/src/armor_finder/armor_finder.cpp b/armor/src/armor_finder/armor_finder.cpp index b37461d..2c2b492 100644 --- a/armor/src/armor_finder/armor_finder.cpp +++ b/armor/src/armor_finder/armor_finder.cpp @@ -57,7 +57,7 @@ void ArmorFinder::run(cv::Mat &src) { } } -#define FOCUS_PIXAL (0.36/0.48*640) +#define FOCUS_PIXAL (800) bool ArmorFinder::sendBoxPosition() { static int dx_add = 0; @@ -68,6 +68,7 @@ bool ArmorFinder::sendBoxPosition() { double dy = rect.y + rect.height/2 - 240 - 30; double yaw = atan(dx / FOCUS_PIXAL) * 180 / 3.14159265459; double pitch = atan(dy / FOCUS_PIXAL) * 180 / 3.14159265459; + cout << yaw << endl; uart.sendTarget(yaw, -pitch, 0); return true; } \ No newline at end of file diff --git a/main.cpp b/main.cpp index 8406a57..98345b9 100644 --- a/main.cpp +++ b/main.cpp @@ -15,7 +15,7 @@ #include #include -//#define DO_NOT_CNT_TIME +#define DO_NOT_CNT_TIME #include #define PROJECT_DIR PATH @@ -26,115 +26,116 @@ using namespace cv; using namespace std; -int state = ENERGY_STATE; -float curr_yaw=0, curr_pitch=0; -float mark_yaw=0, mark_pitch=0; +int state = ARMOR_STATE; +float curr_yaw = 0, curr_pitch = 0; +float mark_yaw = 0, mark_pitch = 0; int mark = 0; -void uartReceive(Uart* uart); +void uartReceive(Uart *uart); -int main(int argc, char *argv[]){ +int main(int argc, char *argv[]) { process_options(argc, argv); Uart uart; - thread receive(uartReceive, &uart); - bool flag = true; +// thread receive(uartReceive, &uart); + bool flag = true; - while (flag){ + while (flag) { int ally_color = ALLY_RED; int energy_part_rotation = CLOCKWISE; - int from_camera = 1; - if(!run_with_camera) { + int from_camera = 1; + if (!run_with_camera) { cout << "Input 1 for camera, 0 for video files" << endl; cin >> from_camera; } - WrapperHead *video_armor; + WrapperHead *video_armor; WrapperHead *video_energy; - if(from_camera) { -// video_armor = new CameraWrapper(0); - video_energy = new CameraWrapper(1); - }else { - video_armor = new VideoWrapper("r_l_640.avi"); - video_energy = new VideoWrapper("r_l_640.avi"); + if (from_camera) { + video_armor = new CameraWrapper(0); +// video_energy = new CameraWrapper(1, "energy"); + } else { + video_armor = new VideoWrapper("/home/xinyang/Desktop/DataSets/video/blue_4.mp4"); + video_energy = new VideoWrapper("/home/xinyang/Desktop/DataSets/video/blue_4.mp4"); + } + if (video_armor->init()) { + cout << "Video source initialization successfully." << endl; } - if (video_energy->init()) { - cout << "Video source initialization successfully." << endl; - } - Mat energy_src, armor_src; - - ArmorFinder armorFinder(ENEMY_BLUE, uart, PROJECT_DIR"/tools/para/"); + Mat energy_src, armor_src; + ArmorFinder armorFinder(ENEMY_BLUE, uart, PROJECT_DIR"/tools/para/"); Energy energy(uart); energy.setAllyColor(ally_color); energy.setRotation(energy_part_rotation); - bool ok=true; + bool ok = true; - while (ok){ -// CNT_TIME(WORD_LIGHT_CYAN, "Total", { -// ok = video_energy->read(energy_src) && video_energy->read(armor_src); - ok = video_energy->read(energy_src); - if (show_origin) { - imshow("enery src", energy_src); - imshow("armor src", armor_src); - } + while (ok) { + CNT_TIME(WORD_LIGHT_CYAN, "Total", { if (state == ENERGY_STATE) { + ok = video_energy->read(energy_src); + if (show_origin) { + imshow("energy src", energy_src); + } if (from_camera == 0) { energy.extract(energy_src); } energy.run(energy_src); } else { -// CNT_TIME(WORD_LIGHT_BLUE, "Armor Time", { -// armorFinder.run(armor_src); -// }); + ok = video_armor->read(armor_src); + if (show_origin) { + imshow("armor src", armor_src); + } + CNT_TIME(WORD_LIGHT_BLUE, "Armor Time", { + armorFinder.run(armor_src); + }); } if (waitKey(1) == 'q') { flag = false; break; } -// }); - } - delete video_energy; - cout << "Program fails. Restarting" << endl; - } + }); + } + delete video_armor; + cout << "Program fails. Restarting" << endl; + } - return 0; + return 0; } -#define RECEIVE_LOG_LEVEL LOG_MSG +#define RECEIVE_LOG_LEVEL LOG_NOTHING -void uartReceive(Uart* uart){ +void uartReceive(Uart *uart) { char buffer[100]; - int cnt=0; - while(true){ + int cnt = 0; + while (true) { char data; - while((data=uart->receive()) != '\n'){ + while ((data = uart->receive()) != '\n') { buffer[cnt++] = data; - if(cnt >= 100){ + if (cnt >= 100) { LOG(RECEIVE_LOG_LEVEL, "data receive over flow!"); - cnt = 0; + cnt = 0; } } - if(cnt == 10){ - if(buffer[8] == 'e'){ + if (cnt == 10) { + if (buffer[8] == 'e') { state = ENERGY_STATE; -// LOG(RECEIVE_LOG_LEVEL, "Energy state"); - }else if(buffer[8] == 'a'){ + LOG(RECEIVE_LOG_LEVEL, "Energy state"); + } else if (buffer[8] == 'a') { state = ARMOR_STATE; -// LOG(RECEIVE_LOG_LEVEL, "Armor state"); + LOG(RECEIVE_LOG_LEVEL, "Armor state"); } memcpy(&curr_yaw, buffer, 4); - memcpy(&curr_pitch, buffer+4, 4); -// LOG(RECEIVE_LOG_LEVEL, "Get yaw:%f pitch:%f", curr_yaw, curr_pitch); - if(buffer[9] == 1){ - if(mark == 0){ + memcpy(&curr_pitch, buffer + 4, 4); + LOG(RECEIVE_LOG_LEVEL, "Get yaw:%f pitch:%f", curr_yaw, curr_pitch); + if (buffer[9] == 1) { + if (mark == 0) { mark = 1; mark_yaw = curr_yaw; mark_pitch = curr_pitch; } -// LOG(RECEIVE_LOG_LEVEL, "Marked"); + LOG(RECEIVE_LOG_LEVEL, "Marked"); } } cnt = 0; diff --git a/tools/bind-monitor.sh b/tools/bind-monitor.sh index 42f0cba..5e27975 100755 --- a/tools/bind-monitor.sh +++ b/tools/bind-monitor.sh @@ -1,4 +1,5 @@ #!/bin/bash -echo "$1/tools/monitor.sh \"$2/run --run-with-camera\" &" > $2/monitor-run +echo "#!/bin/bash" > $2/monitor-run +echo "$1/tools/monitor.sh \"$2/run --run-with-camera\"" >> $2/monitor-run chmod +x $2/monitor-run