修订拼写错误,增加独立config。
This commit is contained in:
@@ -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帧目标装甲板中心坐标
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ using namespace cv;
|
||||
// ---------------------------------------------------------------------------------------------------------------------
|
||||
void Energy::startChassis(){
|
||||
isChassis = true;
|
||||
isGimble = false;
|
||||
isgimbal = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 *
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user