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 };