修订拼写错误,增加独立config。

This commit is contained in:
xinyang
2019-07-13 13:57:26 +08:00
parent 95eb65e6f0
commit a8d24f412e
11 changed files with 184 additions and 165 deletions

View File

@@ -27,9 +27,9 @@ public:
Energy(Serial &u, uint8_t &color);//构造函数,参数为串口和敌方颜色
~Energy();//默认析构函数
void run(cv::Mat &gimble_src, cv::Mat &chassis_src);
void run(cv::Mat &gimbal_src, cv::Mat &chassis_src);
void run(cv::Mat &gimble_src);
void run(cv::Mat &gimbal_src);
Serial &serial;//串口
void setEnergyInit();//设置能量机关初始化
@@ -40,13 +40,13 @@ public:
private:
EnergyPartParam energy_part_param_;//能量机关的参数设置
EnergyPartParam gimble_energy_part_param_;//云台摄像头能量机关的参数设置
EnergyPartParam gimbal_energy_part_param_;//云台摄像头能量机关的参数设置
EnergyPartParam chassis_energy_part_param_;//底盘摄像头能量机关的参数设置
bool isMark;//若操作手正在手动标定则为true
bool isBig;//大符模式为true
bool isSmall;//小符模式为true
bool isGimble;//同时具有底盘和云台摄像头时,处于云台摄像头对心过程
bool isgimbal;//同时具有底盘和云台摄像头时,处于云台摄像头对心过程
bool isChassis;//同时具有底盘和云台摄像头时,处于底盘摄像头击打过程
bool isGuessing;//当前处于发弹到新目标出现的过程则为true此时猜测下一个目标
bool isPredicting;//当前处于新目标出现到发弹的过程则为true此时正常击打
@@ -154,7 +154,7 @@ private:
void getPredictPoint(cv::Point target_point);//获取预测点位
void getAimPoint(cv::Point target_point);//通过自瞄逻辑计算点位
void changeMark();//操作手手动修改标定值
void gimbleRotation();//计算云台旋转角度
void gimbalRotation();//计算云台旋转角度
void getAllTargetArmorCenters();//记录所有目标装甲板中心坐标
void getRecentTargetArmorCenters();//记录近30帧目标装甲板中心坐标

View File

@@ -14,7 +14,7 @@ using namespace cv;
// ---------------------------------------------------------------------------------------------------------------------
void Energy::startChassis(){
isChassis = true;
isGimble = false;
isgimbal = false;
}

View File

@@ -22,7 +22,7 @@ Energy::Energy(Serial &u, uint8_t &color) : serial(u), ally_color(color),
energy_rotation_init = false;
isBig = false;
isSmall = false;
isGimble = true;
isgimbal = true;
isChassis = false;
}
@@ -44,7 +44,7 @@ void Energy::setEnergyInit() {
energy_rotation_init = true;
isBig = false;
isSmall = false;
isGimble = true;
isgimbal = true;
isChassis = false;
}
@@ -60,7 +60,7 @@ void Energy::setBigEnergyInit() {
energy_rotation_init = true;
isBig = true;
isSmall = false;
isGimble = true;
isgimbal = true;
isChassis = false;
}
@@ -73,6 +73,6 @@ void Energy::setSmallEnergyInit() {
isBig = false;
isSmall = true;
isGimble = true;
isgimbal = true;
isChassis = false;
}

View File

@@ -38,7 +38,7 @@ void Energy::changeMark() {
//----------------------------------------------------------------------------------------------------------------------
// 此函数用于计算云台应当转到的角度
// ---------------------------------------------------------------------------------------------------------------------
void Energy::gimbleRotation() {
void Energy::gimbalRotation() {
cv::Point2f real_predict_point;//计算在真实世界中的预测点位,进而计算云台的旋转角度
stretch(predict_point, real_predict_point);
yaw_rotation = static_cast<float>(180 / PI *

View File

@@ -60,68 +60,68 @@ void Energy::initEnergy() {
// 此函数对能量机关参数进行初始化
// ---------------------------------------------------------------------------------------------------------------------
void Energy::initEnergyPartParam() {
gimble_energy_part_param_.GRAY_THRESH = 160;
gimble_energy_part_param_.SPLIT_GRAY_THRESH = 180;
gimble_energy_part_param_.FAN_GRAY_THRESH = 75;
gimble_energy_part_param_.ARMOR_GRAY_THRESH = 80;
gimbal_energy_part_param_.GRAY_THRESH = 160;
gimbal_energy_part_param_.SPLIT_GRAY_THRESH = 180;
gimbal_energy_part_param_.FAN_GRAY_THRESH = 75;
gimbal_energy_part_param_.ARMOR_GRAY_THRESH = 80;
gimble_energy_part_param_.FAN_CONTOUR_AREA_MAX = 6600;
gimble_energy_part_param_.FAN_CONTOUR_AREA_MIN = 0;
gimble_energy_part_param_.FAN_CONTOUR_LENGTH_MIN = 56;
gimble_energy_part_param_.FAN_CONTOUR_LENGTH_MAX = 88;
gimble_energy_part_param_.FAN_CONTOUR_WIDTH_MIN = 21;
gimble_energy_part_param_.FAN_CONTOUR_WIDTH_MAX = 40;
gimble_energy_part_param_.FAN_CONTOUR_HW_RATIO_MAX = 4;
gimble_energy_part_param_.FAN_CONTOUR_HW_RATIO_MIN = 1;
gimble_energy_part_param_.FAN_NON_ZERO_RATE_MAX = 0.8;
gimble_energy_part_param_.FAN_NON_ZERO_RATE_MIN = 0.48;
gimbal_energy_part_param_.FAN_CONTOUR_AREA_MAX = 6600;
gimbal_energy_part_param_.FAN_CONTOUR_AREA_MIN = 0;
gimbal_energy_part_param_.FAN_CONTOUR_LENGTH_MIN = 56;
gimbal_energy_part_param_.FAN_CONTOUR_LENGTH_MAX = 88;
gimbal_energy_part_param_.FAN_CONTOUR_WIDTH_MIN = 21;
gimbal_energy_part_param_.FAN_CONTOUR_WIDTH_MAX = 40;
gimbal_energy_part_param_.FAN_CONTOUR_HW_RATIO_MAX = 4;
gimbal_energy_part_param_.FAN_CONTOUR_HW_RATIO_MIN = 1;
gimbal_energy_part_param_.FAN_NON_ZERO_RATE_MAX = 0.8;
gimbal_energy_part_param_.FAN_NON_ZERO_RATE_MIN = 0.48;
gimble_energy_part_param_.ARMOR_CONTOUR_AREA_MAX = 100000;
gimble_energy_part_param_.ARMOR_CONTOUR_AREA_MIN = 0;
gimble_energy_part_param_.ARMOR_CONTOUR_LENGTH_MIN = 18;
gimble_energy_part_param_.ARMOR_CONTOUR_LENGTH_MAX = 32;
gimble_energy_part_param_.ARMOR_CONTOUR_WIDTH_MIN = 10;
gimble_energy_part_param_.ARMOR_CONTOUR_WIDTH_MAX = 30;
gimble_energy_part_param_.ARMOR_CONTOUR_HW_RATIO_MAX = 3;
gimble_energy_part_param_.ARMOR_CONTOUR_HW_RATIO_MIN = 1;
gimbal_energy_part_param_.ARMOR_CONTOUR_AREA_MAX = 100000;
gimbal_energy_part_param_.ARMOR_CONTOUR_AREA_MIN = 0;
gimbal_energy_part_param_.ARMOR_CONTOUR_LENGTH_MIN = 18;
gimbal_energy_part_param_.ARMOR_CONTOUR_LENGTH_MAX = 32;
gimbal_energy_part_param_.ARMOR_CONTOUR_WIDTH_MIN = 10;
gimbal_energy_part_param_.ARMOR_CONTOUR_WIDTH_MAX = 30;
gimbal_energy_part_param_.ARMOR_CONTOUR_HW_RATIO_MAX = 3;
gimbal_energy_part_param_.ARMOR_CONTOUR_HW_RATIO_MIN = 1;
gimble_energy_part_param_.CENTER_R_CONTOUR_AREA_MAX = 100000;
gimble_energy_part_param_.CENTER_R_CONTOUR_AREA_MIN = 0;
gimble_energy_part_param_.CENTER_R_CONTOUR_LENGTH_MIN = 7;
gimble_energy_part_param_.CENTER_R_CONTOUR_LENGTH_MAX = 19;
gimble_energy_part_param_.CENTER_R_CONTOUR_WIDTH_MIN = 7;
gimble_energy_part_param_.CENTER_R_CONTOUR_WIDTH_MAX = 19;
gimble_energy_part_param_.CENTER_R_CONTOUR_HW_RATIO_MAX = 3;
gimble_energy_part_param_.CENTER_R_CONTOUR_HW_RATIO_MIN = 1;
gimble_energy_part_param_.CENTER_R_CONTOUR_AREA_RATIO_MIN = 0.7;
gimble_energy_part_param_.CENTER_R_CONTOUR_INTERSETION_AREA_MIN = 10;
gimbal_energy_part_param_.CENTER_R_CONTOUR_AREA_MAX = 100000;
gimbal_energy_part_param_.CENTER_R_CONTOUR_AREA_MIN = 0;
gimbal_energy_part_param_.CENTER_R_CONTOUR_LENGTH_MIN = 7;
gimbal_energy_part_param_.CENTER_R_CONTOUR_LENGTH_MAX = 19;
gimbal_energy_part_param_.CENTER_R_CONTOUR_WIDTH_MIN = 7;
gimbal_energy_part_param_.CENTER_R_CONTOUR_WIDTH_MAX = 19;
gimbal_energy_part_param_.CENTER_R_CONTOUR_HW_RATIO_MAX = 3;
gimbal_energy_part_param_.CENTER_R_CONTOUR_HW_RATIO_MIN = 1;
gimbal_energy_part_param_.CENTER_R_CONTOUR_AREA_RATIO_MIN = 0.7;
gimbal_energy_part_param_.CENTER_R_CONTOUR_INTERSETION_AREA_MIN = 10;
gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_MAX = 17000;
gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_MIN = 0;
gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MIN = 56;
gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MAX = 88;
gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MIN = 21;
gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MAX = 40;
gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_HW_RATIO_MAX = 3;
gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_HW_RATIO_MIN = 1;
gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_RATIO_MAX = 0.55;
gimble_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_RATIO_MIN = 0.25;
gimble_energy_part_param_.FLOW_STRIP_FAN_NON_ZERO_RATE_MAX = 0.48;
gimble_energy_part_param_.FLOW_STRIP_FAN_NON_ZERO_RATE_MIN = 0.25;
gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_MAX = 17000;
gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_MIN = 0;
gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MIN = 56;
gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_LENGTH_MAX = 88;
gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MIN = 21;
gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_WIDTH_MAX = 40;
gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_HW_RATIO_MAX = 3;
gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_HW_RATIO_MIN = 1;
gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_RATIO_MAX = 0.55;
gimbal_energy_part_param_.FLOW_STRIP_FAN_CONTOUR_AREA_RATIO_MIN = 0.25;
gimbal_energy_part_param_.FLOW_STRIP_FAN_NON_ZERO_RATE_MAX = 0.48;
gimbal_energy_part_param_.FLOW_STRIP_FAN_NON_ZERO_RATE_MIN = 0.25;
gimble_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MAX = 100000;
gimble_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MIN = 0;
gimble_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MIN = 31;
gimble_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MAX = 57;
gimble_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 2;
gimble_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MAX = 13;
gimble_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MAX = 12;
gimble_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 4;
gimble_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_RATIO_MIN = 0.5;
gimble_energy_part_param_.FLOW_STRIP_CONTOUR_INTERSETION_AREA_MIN = 117;
gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MAX = 100000;
gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_MIN = 0;
gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MIN = 31;
gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_LENGTH_MAX = 57;
gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MIN = 2;
gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_WIDTH_MAX = 13;
gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MAX = 12;
gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_HW_RATIO_MIN = 4;
gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_AREA_RATIO_MIN = 0.5;
gimbal_energy_part_param_.FLOW_STRIP_CONTOUR_INTERSETION_AREA_MIN = 117;
gimble_energy_part_param_.TWIN_ANGEL_MAX = 10;
gimble_energy_part_param_.TARGET_INTERSETION_CONTOUR_AREA_MIN = 24;
gimbal_energy_part_param_.TWIN_ANGEL_MAX = 10;
gimbal_energy_part_param_.TARGET_INTERSETION_CONTOUR_AREA_MIN = 24;

View File

@@ -12,22 +12,22 @@ using namespace cv;
//----------------------------------------------------------------------------------------------------------------------
// 此函数为能量机关模式主控制流函数,且步兵需要同时拥有云台摄像头和底盘摄像头
// ---------------------------------------------------------------------------------------------------------------------
void Energy::run(cv::Mat &gimble_src, cv::Mat &chassis_src) {
void Energy::run(cv::Mat &gimbal_src, cv::Mat &chassis_src) {
if (chassis_src.empty())
run(gimble_src);//仅拥有云台摄像头则调用单摄像头的run函数
else if (isGimble) {
energy_part_param_ = gimble_energy_part_param_;
run(gimbal_src);//仅拥有云台摄像头则调用单摄像头的run函数
else if (isgimbal) {
energy_part_param_ = gimbal_energy_part_param_;
clearAll();
initImage(gimble_src);
initImage(gimbal_src);
if (findArmors(gimble_src) < 1)return;
if (!findFlowStripFan(gimble_src))return;
if (findArmors(gimbal_src) < 1)return;
if (!findFlowStripFan(gimbal_src))return;
if (!findTargetInFlowStripFan()) return;
if (!findCenterROI(gimble_src))return;
if (!findCenterR(gimble_src))return;
if (!findCenterROI(gimbal_src))return;
if (!findCenterR(gimbal_src))return;
if (show_energy)showFlowStripFan("strip", gimble_src);
if (show_energy)showCenterR("R", gimble_src);
if (show_energy)showFlowStripFan("strip", gimbal_src);
if (show_energy)showCenterR("R", gimbal_src);
if (!getOrigin())return;
startChassis();
@@ -59,7 +59,7 @@ void Energy::run(cv::Mat &gimble_src, cv::Mat &chassis_src) {
}
if (isPredicting) {
getPredictPoint(target_point);
gimbleRotation();
gimbalRotation();
judgeShoot();
sendTarget(serial, yaw_rotation, pitch_rotation, shoot);
} else if (isGuessing && stayGuessing()) {
@@ -68,7 +68,7 @@ void Energy::run(cv::Mat &gimble_src, cv::Mat &chassis_src) {
if (!guessTarget()) return;
if (show_energy)showGuessTarget("guess", chassis_src);
getPredictPoint(guess_point);
gimbleRotation();
gimbalRotation();
sendTarget(serial, yaw_rotation, pitch_rotation, false);
}
}
@@ -78,22 +78,22 @@ void Energy::run(cv::Mat &gimble_src, cv::Mat &chassis_src) {
//----------------------------------------------------------------------------------------------------------------------
// 此函数为能量机关模式主控制流函数,且步兵仅拥有云台摄像头
// ---------------------------------------------------------------------------------------------------------------------
void Energy::run(cv::Mat &gimble_src) {
energy_part_param_ = gimble_energy_part_param_;
void Energy::run(cv::Mat &gimbal_src) {
energy_part_param_ = gimbal_energy_part_param_;
clearAll();
initImage(gimble_src);
initImage(gimbal_src);
changeMark();
if (isMark)return;//操作手强制手动标定origin_yaw和origin_pitch
if (show_process)imshow("bin", gimble_src);
if (findArmors(gimble_src) < 1)return;
if (!findFlowStripFan(gimble_src))return;
if (show_process)imshow("bin", gimbal_src);
if (findArmors(gimbal_src) < 1)return;
if (!findFlowStripFan(gimbal_src))return;
if (!findTargetInFlowStripFan()) return;
if (!findCenterROI(gimble_src))return;
if (show_energy)showFlowStripFan("strip", gimble_src);
if (!findCenterR(gimble_src))return;
if (show_energy)showCenterR("R", gimble_src);
if (!findCenterROI(gimbal_src))return;
if (show_energy)showFlowStripFan("strip", gimbal_src);
if (!findCenterR(gimbal_src))return;
if (show_energy)showCenterR("R", gimbal_src);
getTargetPolarAngle();
JudgeMode();
if (energy_mode_init)return;
@@ -104,16 +104,16 @@ void Energy::run(cv::Mat &gimble_src) {
}
if (isPredicting) {
getPredictPoint(target_point);
gimbleRotation();
gimbalRotation();
judgeShoot();
sendTarget(serial, yaw_rotation, pitch_rotation, shoot);
} else if (isGuessing && stayGuessing()) {
findFans(gimble_src);
findFans(gimbal_src);
if (save_mark)writeDownMark();
guessTarget();
if (show_energy)showGuessTarget("guess", gimble_src);
if (show_energy)showGuessTarget("guess", gimbal_src);
getPredictPoint(guess_point);
gimbleRotation();
gimbalRotation();
sendTarget(serial, yaw_rotation, pitch_rotation, false);
}
}