diff --git a/energy/src/energy/clear/energy_init.cpp b/energy/src/energy/clear/energy_init.cpp index 80caba9..c518df5 100644 --- a/energy/src/energy/clear/energy_init.cpp +++ b/energy/src/energy/clear/energy_init.cpp @@ -82,7 +82,7 @@ void Energy::initEnergy() { void Energy::initEnergyPartParam() { // gimbal_energy_part_param_.GRAY_THRESH = 120;//home // gimbal_energy_part_param_.GRAY_THRESH = 200;//official - gimbal_energy_part_param_.GRAY_THRESH = 180;//game + gimbal_energy_part_param_.GRAY_THRESH =180;//game gimbal_energy_part_param_.SPLIT_GRAY_THRESH = 180; gimbal_energy_part_param_.FAN_GRAY_THRESH = 75; gimbal_energy_part_param_.ARMOR_GRAY_THRESH = 80; diff --git a/energy/src/energy/send/send.cpp b/energy/src/energy/send/send.cpp index 2feaa77..8da11de 100644 --- a/energy/src/energy/send/send.cpp +++ b/energy/src/energy/send/send.cpp @@ -18,34 +18,36 @@ void Energy::sendEnergy() { if (camera_cnt == 1) { sum_yaw += yaw_rotation; sum_pitch += pitch_rotation; - MINMAX(sum_yaw, -100, 100); - MINMAX(sum_pitch, -100, 100); + float yaw_I_component = BIG_YAW_AIM_KI * sum_yaw; + float pitch_I_component = BIG_PITCH_AIM_KI * sum_pitch; + MINMAX(yaw_I_component, -2, 2); + MINMAX(pitch_I_component, -2, 2); double tmp_yaw = yaw_rotation; double tmp_pitch = pitch_rotation; yaw_rotation = BIG_YAW_AIM_KP * yaw_rotation + BIG_YAW_AIM_KI * sum_yaw + BIG_YAW_AIM_KD * (yaw_rotation - last_yaw); pitch_rotation = BIG_PITCH_AIM_KP * pitch_rotation + BIG_PITCH_AIM_KI * sum_pitch + BIG_PITCH_AIM_KD * (pitch_rotation - last_pitch); + MINMAX(yaw_rotation, -6, 6); + MINMAX(pitch_rotation, -6, 6); last_yaw = tmp_yaw; last_pitch = tmp_pitch; } else if (is_chassis) { - sum_yaw += yaw_rotation - mcu_data.curr_yaw; - sum_pitch += pitch_rotation - mcu_data.curr_pitch; - double tmp_yaw = yaw_rotation; - double tmp_pitch = pitch_rotation; - yaw_rotation = BIG_YAW_AIM_KP * (yaw_rotation - mcu_data.curr_yaw) + BIG_YAW_AIM_KI * sum_yaw; - pitch_rotation = BIG_PITCH_AIM_KP * (pitch_rotation - mcu_data.curr_pitch) + BIG_PITCH_AIM_KI * sum_pitch; - last_yaw = tmp_yaw; - last_pitch = tmp_pitch; +// sum_yaw += yaw_rotation - mcu_data.curr_yaw; +// sum_pitch += pitch_rotation - mcu_data.curr_pitch; +// double tmp_yaw = yaw_rotation; +// double tmp_pitch = pitch_rotation; +// yaw_rotation = BIG_YAW_AIM_KP * (yaw_rotation - mcu_data.curr_yaw) + BIG_YAW_AIM_KI * sum_yaw; +// pitch_rotation = BIG_PITCH_AIM_KP * (pitch_rotation - mcu_data.curr_pitch) + BIG_PITCH_AIM_KI * sum_pitch; +// last_yaw = tmp_yaw; +// last_pitch = tmp_pitch; } } else if (is_small){ - sum_yaw += yaw_rotation; - sum_pitch += pitch_rotation; - MINMAX(sum_yaw, -100, 100); - MINMAX(sum_pitch, -100, 100); double tmp_yaw = yaw_rotation; double tmp_pitch = pitch_rotation; yaw_rotation = SMALL_YAW_AIM_KP * yaw_rotation + SMALL_YAW_AIM_KD * (yaw_rotation - last_yaw); pitch_rotation = SMALL_PITCH_AIM_KP * pitch_rotation + SMALL_PITCH_AIM_KD * (pitch_rotation - last_pitch); + MINMAX(yaw_rotation, -6, 6); + MINMAX(pitch_rotation, -6, 6); last_yaw = tmp_yaw; last_pitch = tmp_pitch; } diff --git a/main.cpp b/main.cpp index 10671d7..bef8e67 100644 --- a/main.cpp +++ b/main.cpp @@ -30,7 +30,7 @@ using namespace std; McuData mcu_data = { // 单片机端回传结构体 0, // 当前云台yaw角 0, // 当前云台pitch角 - ARMOR_STATE, // 当前状态,自瞄-大符-小符 + BIG_ENERGY_STATE, // 当前状态,自瞄-大符-小符 0, // 云台角度标记位 1, // 是否启用数字识别 ENEMY_RED, // 敌方颜色 @@ -66,8 +66,8 @@ int main(int argc, char *argv[]) { video_gimbal = new CameraWrapper(ARMOR_CAMERA_GAIN, 2/*, "armor"*/); video_chassis = new CameraWrapper(ENERGY_CAMERA_GAIN, 2/*, "energy"*/); } else { - video_gimbal = new VideoWrapper(PROJECT_DIR"/gimbal_video/0.avi"); - video_chassis = new VideoWrapper(PROJECT_DIR"/gimbal_video/0.avi"); + video_gimbal = new VideoWrapper("/home/sun/桌面/shiying/18.avi"); + video_chassis = new VideoWrapper("/home/sun/桌面/shiying/18.avi"); } if (video_gimbal->init()) { LOGM("video_gimbal source initialization successfully."); @@ -94,90 +94,90 @@ int main(int argc, char *argv[]) { cout << "start running" << endl; do { CNT_TIME("Total", { - if (mcu_data.state == BIG_ENERGY_STATE) {//大能量机关模式 - if (last_state != BIG_ENERGY_STATE) {//若上一帧不是大能量机关模式,即刚往完成切换,则需要初始化 - LOGM(STR_CTR(WORD_BLUE, "Start Big Energy!")); - destroyAllWindows(); - if (from_camera) { - delete video_gimbal; - video_gimbal = new CameraWrapper(ENERGY_CAMERA_GAIN, 2/*, "armor"*/); - if (video_gimbal->init()) { - LOGM("video_gimbal source initialization successfully."); - } else { - LOGW("video_gimbal source unavailable!"); + if (mcu_data.state == BIG_ENERGY_STATE) {//大能量机关模式 + if (last_state != BIG_ENERGY_STATE) {//若上一帧不是大能量机关模式,即刚往完成切换,则需要初始化 + LOGM(STR_CTR(WORD_BLUE, "Start Big Energy!")); + destroyAllWindows(); + if (from_camera) { + delete video_gimbal; + video_gimbal = new CameraWrapper(ENERGY_CAMERA_GAIN, 2/*, "armor"*/); + if (video_gimbal->init()) { + LOGM("video_gimbal source initialization successfully."); + } else { + LOGW("video_gimbal source unavailable!"); + } } + checkReconnect(video_chassis->read(chassis_src)); + energy.setBigEnergyInit(); } - checkReconnect(video_chassis->read(chassis_src)); - energy.setBigEnergyInit(); - } - last_state = mcu_data.state;//更新上一帧状态 - ok = checkReconnect(video_gimbal->read(gimbal_src)); - video_chassis->read(chassis_src); + last_state = mcu_data.state;//更新上一帧状态 + ok = checkReconnect(video_gimbal->read(gimbal_src)); + video_chassis->read(chassis_src); #ifdef GIMBAL_FLIP_MODE - flip(gimbal_src, gimbal_src, GIMBAL_FLIP_MODE); + flip(gimbal_src, gimbal_src, GIMBAL_FLIP_MODE); #endif #ifdef CHASSIS_FLIP_MODE - flip(chassis_src, chassis_src, CHASSIS_FLIP_MODE); + flip(chassis_src, chassis_src, CHASSIS_FLIP_MODE); #endif - 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.runBig(gimbal_src, chassis_src); -// energy.runBig(gimbal_src); - } else if (mcu_data.state == SMALL_ENERGY_STATE) { - if (last_state != SMALL_ENERGY_STATE) { - LOGM(STR_CTR(WORD_GREEN, "Start Small Energy!")); - destroyAllWindows(); - if (from_camera) { - delete video_gimbal; - video_gimbal = new CameraWrapper(ENERGY_CAMERA_GAIN, 2/*, "armor"*/); - if (video_gimbal->init()) { - LOGM("video_gimbal source initialization successfully."); - } else { - LOGW("video_gimbal source unavailable!"); + 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.runBig(gimbal_src, chassis_src); + energy.runBig(gimbal_src); + } else if (mcu_data.state == SMALL_ENERGY_STATE) { + if (last_state != SMALL_ENERGY_STATE) { + LOGM(STR_CTR(WORD_GREEN, "Start Small Energy!")); + destroyAllWindows(); + if (from_camera) { + delete video_gimbal; + video_gimbal = new CameraWrapper(ENERGY_CAMERA_GAIN, 2/*, "armor"*/); + if (video_gimbal->init()) { + LOGM("video_gimbal source initialization successfully."); + } else { + LOGW("video_gimbal source unavailable!"); + } + } + energy.setSmallEnergyInit(); + } + last_state = mcu_data.state;//更新上一帧状态 + 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); + } else { // 自瞄模式 + if (last_state != ARMOR_STATE) { + LOGM(STR_CTR(WORD_RED, "Start Armor!")); + destroyAllWindows(); + if (from_camera) { + delete video_gimbal; + video_gimbal = new CameraWrapper(ARMOR_CAMERA_GAIN, 2/*, "armor"*/); + if (video_gimbal->init()) { + LOGM("video_gimbal source initialization successfully."); + } else { + LOGW("video_gimbal source unavailable!"); + } } } - energy.setSmallEnergyInit(); - } - last_state = mcu_data.state;//更新上一帧状态 - ok = checkReconnect(video_gimbal->read(gimbal_src)); + last_state = mcu_data.state; + CNT_TIME(STR_CTR(WORD_GREEN, "read img"), { + if (!checkReconnect(video_gimbal->read(gimbal_src))) continue; + }); #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); - } else { // 自瞄模式 - if (last_state != ARMOR_STATE) { - LOGM(STR_CTR(WORD_RED, "Start Armor!")); - destroyAllWindows(); - if (from_camera) { - delete video_gimbal; - video_gimbal = new CameraWrapper(ARMOR_CAMERA_GAIN, 2/*, "armor"*/); - if (video_gimbal->init()) { - LOGM("video_gimbal source initialization successfully."); - } else { - LOGW("video_gimbal source unavailable!"); - } - } - } - last_state = mcu_data.state; - CNT_TIME(STR_CTR(WORD_GREEN, "read img"), { - if(!checkReconnect(video_gimbal->read(gimbal_src))) continue; - }); -#ifdef GIMBAL_FLIP_MODE - flip(gimbal_src, gimbal_src, GIMBAL_FLIP_MODE); + flip(gimbal_src, gimbal_src, GIMBAL_FLIP_MODE); #endif // CNT_TIME("something whatever", { if (!from_camera) extract(gimbal_src); if (save_video) saveVideos(gimbal_src); if (show_origin) showOrigin(gimbal_src); // }); - CNT_TIME(STR_CTR(WORD_CYAN, "Armor Time"), { - armor_finder.run(gimbal_src); - }); - } + CNT_TIME(STR_CTR(WORD_CYAN, "Armor Time"), { + armor_finder.run(gimbal_src); + }); + } // cv::waitKey(0); }); } while (ok); diff --git a/others/include/config/setconfig.h b/others/include/config/setconfig.h index 0768d1c..d0f71a5 100644 --- a/others/include/config/setconfig.h +++ b/others/include/config/setconfig.h @@ -32,34 +32,34 @@ #define ENERGY_CAMERA_GAIN (20) #endif #ifndef SMALL_YAW_AIM_KD - #define SMALL_YAW_AIM_KD (0) + #define SMALL_YAW_AIM_KD (0.35) #endif #ifndef SMALL_YAW_AIM_KP - #define SMALL_YAW_AIM_KP (4) + #define SMALL_YAW_AIM_KP (0.85) #endif #ifndef SMALL_PITCH_AIM_KD - #define SMALL_PITCH_AIM_KD (0) + #define SMALL_PITCH_AIM_KD (0.35) #endif #ifndef SMALL_PITCH_AIM_KP - #define SMALL_PITCH_AIM_KP (3.7) + #define SMALL_PITCH_AIM_KP (0.85) #endif #ifndef BIG_YAW_AIM_KD - #define BIG_YAW_AIM_KD (0) + #define BIG_YAW_AIM_KD (0.35) #endif #ifndef BIG_YAW_AIM_KP - #define BIG_YAW_AIM_KP (6.5) + #define BIG_YAW_AIM_KP (0.85) #endif #ifndef BIG_YAW_AIM_KI - #define BIG_YAW_AIM_KI (0.1) + #define BIG_YAW_AIM_KI (0) #endif #ifndef BIG_PITCH_AIM_KD - #define BIG_PITCH_AIM_KD (0) + #define BIG_PITCH_AIM_KD (0.35) #endif #ifndef BIG_PITCH_AIM_KP - #define BIG_PITCH_AIM_KP (6.5) + #define BIG_PITCH_AIM_KP (0.85) #endif #ifndef BIG_PITCH_AIM_KI - #define BIG_PITCH_AIM_KI (0.1) + #define BIG_PITCH_AIM_KI (0) #endif #ifndef COMPENSATE_YAW #define COMPENSATE_YAW (5) @@ -68,7 +68,7 @@ #define COMPENSATE_PITCH (74) #endif #ifndef EXTRA_DELTA_X - #define EXTRA_DELTA_X (10) + #define EXTRA_DELTA_X (0) #endif #ifndef EXTRA_DELTA_Y #define EXTRA_DELTA_Y (10)