hybridPosePositioning

version 1.3.4 : 修正了转子钢芯定位算法中的bug
This commit is contained in:
jerryzeng 2026-08-07 12:04:06 +08:00
parent 432c2a3289
commit ffd50bc6c5
2 changed files with 44 additions and 31 deletions

View File

@ -2087,7 +2087,7 @@ void HaiRuiMa_rotorCorePositioning_test(void)
}; };
SVzNLRange fileIdx[HRM_RotorCore_TEST_GROUP] = { SVzNLRange fileIdx[HRM_RotorCore_TEST_GROUP] = {
{1,9}, {1,10},
}; };
const char* ver = wd_hybridPositioningVersion(); const char* ver = wd_hybridPositioningVersion();
@ -2130,7 +2130,10 @@ void HaiRuiMa_rotorCorePositioning_test(void)
sprintf_s(_scan_file, "%s%d_result.txt", dataPath[grp], fidx); sprintf_s(_scan_file, "%s%d_result.txt", dataPath[grp], fidx);
std::vector<WD_objArea2D> objROIs; std::vector<WD_objArea2D> objROIs;
if( (grp == 0) && (fidx <= 9))
vzReadObj2DROI(_scan_file, objROIs); vzReadObj2DROI(_scan_file, objROIs);
else
vzReadObj2DROI_1(_scan_file, objROIs);
SWD_Cylinder workpieceParam; //圆柱形工件的标称半径和高度 SWD_Cylinder workpieceParam; //圆柱形工件的标称半径和高度
workpieceParam.radius = 45.0; workpieceParam.radius = 45.0;
@ -2523,8 +2526,8 @@ typedef enum
int main() int main()
{ {
//ESG_testMode testMode = keSG_2D3D定位_海瑞马_地面调平; //ESG_testMode testMode = keSG_2D3D定位_海瑞马_地面调平;
ESG_testMode testMode = keSG_2D3D定位_海瑞马_锥形工件; //ESG_testMode testMode = keSG_2D3D定位_海瑞马_锥形工件;
//ESG_testMode testMode = keSG_2D3D定位_海瑞马_转子芯; ESG_testMode testMode = keSG_2D3D定位_海瑞马_转子芯;
//ESG_testMode testMode = keSG_2D3D定位_海瑞马_码垛料筐定位; //ESG_testMode testMode = keSG_2D3D定位_海瑞马_码垛料筐定位;
//ESG_testMode testMode = keSG_2D3D定位_海瑞马_码垛工件尺寸测量; //ESG_testMode testMode = keSG_2D3D定位_海瑞马_码垛工件尺寸测量;
//ESG_testMode testMode = keSG_2D3D定位_海瑞马_码垛位置规划; //ESG_testMode testMode = keSG_2D3D定位_海瑞马_码垛位置规划;

View File

@ -14,7 +14,8 @@
//version 1.3.1 : 添加了海瑞马转子钢芯定位位置属性计算,区分出中央,边和角的位置,按照中心排序,先输出最中央的目标 //version 1.3.1 : 添加了海瑞马转子钢芯定位位置属性计算,区分出中央,边和角的位置,按照中心排序,先输出最中央的目标
//version 1.3.2 : 添加了海瑞马锥形工件的ID号ID号为输入的ROI下标+1从1开始 //version 1.3.2 : 添加了海瑞马锥形工件的ID号ID号为输入的ROI下标+1从1开始
//version 1.3.3 : 改进了海瑞马锥形工件定位算法优化的ROI重叠时的处理逻辑 //version 1.3.3 : 改进了海瑞马锥形工件定位算法优化的ROI重叠时的处理逻辑
std::string m_strVersion = "HybridPositioning 1.3.3"; //version 1.3.4 : 修正了转子钢芯定位算法中的bug
std::string m_strVersion = "HybridPositioning 1.3.4";
const char* wd_hybridPositioningVersion(void) const char* wd_hybridPositioningVersion(void)
{ {
return m_strVersion.c_str(); return m_strVersion.c_str();
@ -440,8 +441,10 @@ WD_workpieceInfo _computeWorkpiecePose(
exSegs.push_back(a_seg); exSegs.push_back(a_seg);
} }
} }
if (exSegs.size() == 0)
return a_pose; std::vector<SWD_indexingSeg> validExSegs;
if (exSegs.size() > 0)
{
//去除低的段如果两个段的meanZ相差达到工件高度的一半视为低的段 //去除低的段如果两个段的meanZ相差达到工件高度的一半视为低的段
int highestSeg = 0; int highestSeg = 0;
for (int m = 1; m < (int)exSegs.size(); m++) for (int m = 1; m < (int)exSegs.size(); m++)
@ -451,7 +454,7 @@ WD_workpieceInfo _computeWorkpiecePose(
} }
double highestZ = exSegs[highestSeg].segMeanZ; double highestZ = exSegs[highestSeg].segMeanZ;
std::vector<SWD_indexingSeg> validExSegs;
for (int m = 0; m < (int)exSegs.size(); m++) for (int m = 0; m < (int)exSegs.size(); m++)
{ {
double zDiff = exSegs[m].segMeanZ - highestZ; double zDiff = exSegs[m].segMeanZ - highestZ;
@ -460,6 +463,7 @@ WD_workpieceInfo _computeWorkpiecePose(
validExSegs.push_back(exSegs[m]); validExSegs.push_back(exSegs[m]);
} }
} }
}
vScanLineSegs.push_back(validExSegs); vScanLineSegs.push_back(validExSegs);
} }
@ -541,6 +545,10 @@ WD_workpieceInfo _computeWorkpiecePose(
exSegs.push_back(a_seg); exSegs.push_back(a_seg);
} }
} }
std::vector<SWD_indexingSeg> validExSegs;
if (exSegs.size() > 0)
{
//去除低的段如果两个段的meanZ相差达到工件高度的一半视为低的段 //去除低的段如果两个段的meanZ相差达到工件高度的一半视为低的段
int highestSeg = 0; int highestSeg = 0;
for (int m = 1; m < (int)exSegs.size(); m++) for (int m = 1; m < (int)exSegs.size(); m++)
@ -550,7 +558,6 @@ WD_workpieceInfo _computeWorkpiecePose(
} }
double highestZ = exSegs[highestSeg].segMeanZ; double highestZ = exSegs[highestSeg].segMeanZ;
std::vector<SWD_indexingSeg> validExSegs;
for (int m = 0; m < (int)exSegs.size(); m++) for (int m = 0; m < (int)exSegs.size(); m++)
{ {
double zDiff = exSegs[m].segMeanZ - highestZ; double zDiff = exSegs[m].segMeanZ - highestZ;
@ -559,6 +566,7 @@ WD_workpieceInfo _computeWorkpiecePose(
validExSegs.push_back(exSegs[m]); validExSegs.push_back(exSegs[m]);
} }
} }
}
hScanLineSegs.push_back(validExSegs); hScanLineSegs.push_back(validExSegs);
} }
@ -1093,6 +1101,8 @@ void wd_HRM_RotorCorePositioning(
} }
} }
} }
if (roiLineIndice.nMax < roiLineIndice.nMin)
continue;
//生成ROI中的扫描数据 //生成ROI中的扫描数据
SWDScanPosition centerPosition = { 0, 0 }; SWDScanPosition centerPosition = { 0, 0 };