From ffd50bc6c5c69b34aa873662557759f97a9b9df0 Mon Sep 17 00:00:00 2001 From: jerryzeng Date: Fri, 7 Aug 2026 12:04:06 +0800 Subject: [PATCH] =?UTF-8?q?hybridPosePositioning=20version=201.3.4=20:=20?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=BA=86=E8=BD=AC=E5=AD=90=E9=92=A2=E8=8A=AF?= =?UTF-8?q?=E5=AE=9A=E4=BD=8D=E7=AE=97=E6=B3=95=E4=B8=AD=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hybridPosePositioning_test.cpp | 11 ++-- sourceCode/hybridPosePositioning.cpp | 64 +++++++++++-------- 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/hybridPosePositioning_test/hybridPosePositioning_test.cpp b/hybridPosePositioning_test/hybridPosePositioning_test.cpp index ca70445..d672eca 100644 --- a/hybridPosePositioning_test/hybridPosePositioning_test.cpp +++ b/hybridPosePositioning_test/hybridPosePositioning_test.cpp @@ -2087,7 +2087,7 @@ void HaiRuiMa_rotorCorePositioning_test(void) }; SVzNLRange fileIdx[HRM_RotorCore_TEST_GROUP] = { - {1,9}, + {1,10}, }; 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); std::vector objROIs; - vzReadObj2DROI(_scan_file, objROIs); + if( (grp == 0) && (fidx <= 9)) + vzReadObj2DROI(_scan_file, objROIs); + else + vzReadObj2DROI_1(_scan_file, objROIs); SWD_Cylinder workpieceParam; //圆柱形工件的标称半径和高度 workpieceParam.radius = 45.0; @@ -2523,8 +2526,8 @@ typedef enum 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定位_海瑞马_码垛位置规划; diff --git a/sourceCode/hybridPosePositioning.cpp b/sourceCode/hybridPosePositioning.cpp index 32ab8ba..3d6a600 100644 --- a/sourceCode/hybridPosePositioning.cpp +++ b/sourceCode/hybridPosePositioning.cpp @@ -14,7 +14,8 @@ //version 1.3.1 : ˺תӸоλλԼ㣬ֳ룬ߺͽǵλãĿ //version 1.3.2 : ˺׶ιIDţIDΪROI±+11ʼ //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) { return m_strVersion.c_str(); @@ -440,24 +441,27 @@ WD_workpieceInfo _computeWorkpiecePose( exSegs.push_back(a_seg); } } - if (exSegs.size() == 0) - return a_pose; - //ȥ͵ĶΣεmeanZﵽ߶ȵһ룬Ϊ͵Ķ - int highestSeg = 0; - for (int m = 1; m < (int)exSegs.size(); m++) - { - if (exSegs[highestSeg].segMeanZ > exSegs[m].segMeanZ) - highestSeg = m; - } - double highestZ = exSegs[highestSeg].segMeanZ; std::vector validExSegs; - for (int m = 0; m < (int)exSegs.size(); m++) + if (exSegs.size() > 0) { - double zDiff = exSegs[m].segMeanZ - highestZ; - if (zDiff < workpieceParam.height / 2) + //ȥ͵ĶΣεmeanZﵽ߶ȵһ룬Ϊ͵Ķ + int highestSeg = 0; + for (int m = 1; m < (int)exSegs.size(); m++) { - validExSegs.push_back(exSegs[m]); + if (exSegs[highestSeg].segMeanZ > exSegs[m].segMeanZ) + highestSeg = m; + } + + double highestZ = exSegs[highestSeg].segMeanZ; + + for (int m = 0; m < (int)exSegs.size(); m++) + { + double zDiff = exSegs[m].segMeanZ - highestZ; + if (zDiff < workpieceParam.height / 2) + { + validExSegs.push_back(exSegs[m]); + } } } vScanLineSegs.push_back(validExSegs); @@ -541,22 +545,26 @@ WD_workpieceInfo _computeWorkpiecePose( exSegs.push_back(a_seg); } } - //ȥ͵ĶΣεmeanZﵽ߶ȵһ룬Ϊ͵Ķ - int highestSeg = 0; - for (int m = 1; m < (int)exSegs.size(); m++) - { - if (exSegs[highestSeg].segMeanZ > exSegs[m].segMeanZ) - highestSeg = m; - } - double highestZ = exSegs[highestSeg].segMeanZ; std::vector validExSegs; - for (int m = 0; m < (int)exSegs.size(); m++) + if (exSegs.size() > 0) { - double zDiff = exSegs[m].segMeanZ - highestZ; - if (zDiff < workpieceParam.height / 2) + //ȥ͵ĶΣεmeanZﵽ߶ȵһ룬Ϊ͵Ķ + int highestSeg = 0; + for (int m = 1; m < (int)exSegs.size(); m++) { - validExSegs.push_back(exSegs[m]); + if (exSegs[highestSeg].segMeanZ > exSegs[m].segMeanZ) + highestSeg = m; + } + + double highestZ = exSegs[highestSeg].segMeanZ; + for (int m = 0; m < (int)exSegs.size(); m++) + { + double zDiff = exSegs[m].segMeanZ - highestZ; + if (zDiff < workpieceParam.height / 2) + { + validExSegs.push_back(exSegs[m]); + } } } hScanLineSegs.push_back(validExSegs); @@ -1093,6 +1101,8 @@ void wd_HRM_RotorCorePositioning( } } } + if (roiLineIndice.nMax < roiLineIndice.nMin) + continue; //ROIеɨ SWDScanPosition centerPosition = { 0, 0 };