rodAndBarDetection version 1.2.11 : 根据现场数据调整特征生长参数
This commit is contained in:
parent
da5b2c90a2
commit
968fd0910c
@ -878,23 +878,28 @@ void _outputRGBDScan_RGBD_weldSeam(
|
|||||||
sw.close();
|
sw.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SCREW_TEST_GROUP 3
|
#define SCREW_TEST_GROUP 7
|
||||||
void screwTest(void)
|
void screwTest(void)
|
||||||
{
|
{
|
||||||
const char* dataPath[SCREW_TEST_GROUP] = {
|
const char* dataPath[SCREW_TEST_GROUP] = {
|
||||||
"F:/ShangGu/项目/冠钦项目/螺杆测量/数据/模拟数据/", //0
|
"F:/ShangGu/项目/冠钦项目/螺杆测量/数据/模拟数据/", //0
|
||||||
"F:/ShangGu/项目/冠钦项目/螺杆测量/配天现场点云/螺杆点云2/上方两根/", //1
|
"F:/ShangGu/项目/冠钦项目/螺杆测量/配天现场点云/螺杆点云2/上方两根/", //1
|
||||||
"F:/ShangGu/项目/冠钦项目/螺杆测量/配天现场点云/螺杆点云3/", //2
|
"F:/ShangGu/项目/冠钦项目/螺杆测量/配天现场点云/螺杆点云3/", //2
|
||||||
|
"F:/ShangGu/项目/冠钦项目/螺杆测量/配天现场点云/螺杆点云4/位置1/", //3
|
||||||
|
"F:/ShangGu/项目/冠钦项目/螺杆测量/配天现场点云/螺杆点云4/位置2/", //4
|
||||||
|
"F:/ShangGu/项目/冠钦项目/螺杆测量/配天现场点云/螺杆点云4/位置2未动螺杆拧进去100mm左右/", //5
|
||||||
|
"F:/ShangGu/项目/冠钦项目/螺杆测量/配天现场点云/螺杆点云4/位置2向前100mm螺杆拧进去100mm左右/", //6
|
||||||
};
|
};
|
||||||
|
|
||||||
SVzNLRange fileIdx[SCREW_TEST_GROUP] = {
|
SVzNLRange fileIdx[SCREW_TEST_GROUP] = {
|
||||||
{1,4},{1,30},{1,11}
|
{1,4},{1,30},{1,11},
|
||||||
|
{1,20}, {1,20}, {1,5}, {1,21}
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* ver = wd_rodAndBarDetectionVersion();
|
const char* ver = wd_rodAndBarDetectionVersion();
|
||||||
printf("ver:%s\n", ver);
|
printf("ver:%s\n", ver);
|
||||||
|
|
||||||
for (int grp = 2; grp < SCREW_TEST_GROUP; grp++)
|
for (int grp = 3; grp < SCREW_TEST_GROUP; grp++)
|
||||||
{
|
{
|
||||||
for (int fidx = fileIdx[grp].nMin; fidx <= fileIdx[grp].nMax; fidx++)
|
for (int fidx = fileIdx[grp].nMin; fidx <= fileIdx[grp].nMax; fidx++)
|
||||||
{
|
{
|
||||||
@ -924,7 +929,7 @@ void screwTest(void)
|
|||||||
//double rodDiameter = 10.0;
|
//double rodDiameter = 10.0;
|
||||||
|
|
||||||
SSG_cornerParam cornerParam;
|
SSG_cornerParam cornerParam;
|
||||||
cornerParam.cornerTh = 60; //45度角
|
cornerParam.cornerTh = 30; //45度角
|
||||||
cornerParam.scale = rodDiameter/4; // algoParam.bagParam.bagH / 8; // 15; // algoParam.bagParam.bagH / 8;
|
cornerParam.scale = rodDiameter/4; // algoParam.bagParam.bagH / 8; // 15; // algoParam.bagParam.bagH / 8;
|
||||||
cornerParam.minEndingGap = 20; // algoParam.bagParam.bagW / 4;
|
cornerParam.minEndingGap = 20; // algoParam.bagParam.bagW / 4;
|
||||||
cornerParam.minEndingGap_z = 5.0;
|
cornerParam.minEndingGap_z = 5.0;
|
||||||
@ -936,12 +941,12 @@ void screwTest(void)
|
|||||||
filterParam.outlierTh = 5;
|
filterParam.outlierTh = 5;
|
||||||
|
|
||||||
SSG_treeGrowParam growParam;
|
SSG_treeGrowParam growParam;
|
||||||
growParam.maxLineSkipNum = 10;
|
growParam.maxLineSkipNum = 30;
|
||||||
growParam.yDeviation_max = 20.0;
|
growParam.yDeviation_max = 5.0;
|
||||||
growParam.maxSkipDistance = 20.0;
|
growParam.maxSkipDistance = 30.0;
|
||||||
growParam.zDeviation_max = 50.0;//
|
growParam.zDeviation_max = 50;//
|
||||||
growParam.minLTypeTreeLen = 10; //mm, 螺杆长度
|
growParam.minLTypeTreeLen = 50; //mm, 螺杆长度
|
||||||
growParam.minVTypeTreeLen = 10; //mm
|
growParam.minVTypeTreeLen = 50; //mm
|
||||||
|
|
||||||
bool isHorizonScan = true; //true:激光线平行槽道;false:激光线垂直槽道
|
bool isHorizonScan = true; //true:激光线平行槽道;false:激光线垂直槽道
|
||||||
int errCode = 0;
|
int errCode = 0;
|
||||||
@ -1025,21 +1030,22 @@ void locatingPlateTest(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ROD_POSITION_TEST_GROUP 1
|
#define ROD_POSITION_TEST_GROUP 2
|
||||||
void rodPositionTest(void)
|
void rodPositionTest(void)
|
||||||
{
|
{
|
||||||
const char* dataPath[ROD_POSITION_TEST_GROUP] = {
|
const char* dataPath[ROD_POSITION_TEST_GROUP] = {
|
||||||
"F:/ShangGu/项目/冠钦项目/棒材抓取/", //0
|
"F:/ShangGu/项目/冠钦项目/矩森棒材抓取/", //0
|
||||||
|
"F:/ShangGu/项目/冠钦项目/胶布圆棒抓取/模拟测试数据/", //1
|
||||||
};
|
};
|
||||||
|
|
||||||
SVzNLRange fileIdx[ROD_POSITION_TEST_GROUP] = {
|
SVzNLRange fileIdx[ROD_POSITION_TEST_GROUP] = {
|
||||||
{1,8},
|
{1,8}, {1,5}
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* ver = wd_rodAndBarDetectionVersion();
|
const char* ver = wd_rodAndBarDetectionVersion();
|
||||||
printf("ver:%s\n", ver);
|
printf("ver:%s\n", ver);
|
||||||
|
|
||||||
for (int grp = 0; grp < ROD_POSITION_TEST_GROUP; grp++)
|
for (int grp = 1; grp < ROD_POSITION_TEST_GROUP; grp++)
|
||||||
{
|
{
|
||||||
SSG_planeCalibPara poseCalibPara;
|
SSG_planeCalibPara poseCalibPara;
|
||||||
//初始化成单位阵
|
//初始化成单位阵
|
||||||
@ -1063,6 +1069,9 @@ void rodPositionTest(void)
|
|||||||
{
|
{
|
||||||
//fidx =1;
|
//fidx =1;
|
||||||
char _scan_file[256];
|
char _scan_file[256];
|
||||||
|
if(1 == grp)
|
||||||
|
sprintf_s(_scan_file, "%s%d_LaserData_Hi229156.txt", dataPath[grp], fidx);
|
||||||
|
else
|
||||||
sprintf_s(_scan_file, "%sLaserData_%d.txt", dataPath[grp], fidx);
|
sprintf_s(_scan_file, "%sLaserData_%d.txt", dataPath[grp], fidx);
|
||||||
|
|
||||||
std::vector<std::vector< SVzNL3DPosition>> scanLines;
|
std::vector<std::vector< SVzNL3DPosition>> scanLines;
|
||||||
@ -1075,8 +1084,16 @@ void rodPositionTest(void)
|
|||||||
long t1 = (long)GetTickCount64();//统计时间
|
long t1 = (long)GetTickCount64();//统计时间
|
||||||
|
|
||||||
SSX_rodParam rodParam;
|
SSX_rodParam rodParam;
|
||||||
|
if (0 == grp)
|
||||||
|
{
|
||||||
rodParam.diameter = 52.0; //圆棒直径
|
rodParam.diameter = 52.0; //圆棒直径
|
||||||
rodParam.len = 290;
|
rodParam.len = 290;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rodParam.diameter = 68.0; //圆棒直径
|
||||||
|
rodParam.len = 187;
|
||||||
|
}
|
||||||
|
|
||||||
SSG_cornerParam cornerParam;
|
SSG_cornerParam cornerParam;
|
||||||
cornerParam.cornerTh = 60; //45度角
|
cornerParam.cornerTh = 60; //45度角
|
||||||
@ -1231,7 +1248,7 @@ int main()
|
|||||||
locatingPlateTest();
|
locatingPlateTest();
|
||||||
#endif
|
#endif
|
||||||
#else //棒材抓取定位测试
|
#else //棒材抓取定位测试
|
||||||
#if 0
|
#if 1
|
||||||
rodPositionTest();
|
rodPositionTest();
|
||||||
#else
|
#else
|
||||||
rodWeldSeamPosition_test();
|
rodWeldSeamPosition_test();
|
||||||
|
|||||||
@ -4619,6 +4619,7 @@ void wd_getRodArcFeature_segmentPeakCornerMethod(
|
|||||||
|
|
||||||
//逐个极小值点判断
|
//逐个极小值点判断
|
||||||
int peakNum = (int)localZMin.size();
|
int peakNum = (int)localZMin.size();
|
||||||
|
SSG_intPair prePos = { -1, -1, -1 };
|
||||||
for (int i = 0; i < peakNum; i++)
|
for (int i = 0; i < peakNum; i++)
|
||||||
{
|
{
|
||||||
int pkIdx = localZMin[i].jumpPos2D.y;
|
int pkIdx = localZMin[i].jumpPos2D.y;
|
||||||
@ -4628,7 +4629,7 @@ void wd_getRodArcFeature_segmentPeakCornerMethod(
|
|||||||
ptDirAngles, lineData,
|
ptDirAngles, lineData,
|
||||||
arcPerPointCornerMinValue, arcTotalCornerMinValue,
|
arcPerPointCornerMinValue, arcTotalCornerMinValue,
|
||||||
a_rodPos);
|
a_rodPos);
|
||||||
if (true == isArc)
|
if ( (true == isArc) && (prePos.idx != a_rodPos.idx))
|
||||||
{
|
{
|
||||||
SWD_rodArcFeature a_rodArc;
|
SWD_rodArcFeature a_rodArc;
|
||||||
memset(&a_rodArc, 0, sizeof(SWD_rodArcFeature));
|
memset(&a_rodArc, 0, sizeof(SWD_rodArcFeature));
|
||||||
@ -4641,6 +4642,7 @@ void wd_getRodArcFeature_segmentPeakCornerMethod(
|
|||||||
a_rodArc.peakPt = lineData[a_rodPos.idx].pt3D;
|
a_rodArc.peakPt = lineData[a_rodPos.idx].pt3D;
|
||||||
a_rodArc.featureValue = ptDirAngles[a_rodPos.idx].corner;
|
a_rodArc.featureValue = ptDirAngles[a_rodPos.idx].corner;
|
||||||
line_rodArcs.push_back(a_rodArc);
|
line_rodArcs.push_back(a_rodArc);
|
||||||
|
prePos = a_rodPos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -19,7 +19,8 @@
|
|||||||
//version 1.2.8 : 修正螺杆定位算法中的一个Bug
|
//version 1.2.8 : 修正螺杆定位算法中的一个Bug
|
||||||
//version 1.2.9 : 修正螺杆定位算法中轴向拟合计算时方向确定的问题,保证投影后的点云与投影前的点云的Z变化趋势一致
|
//version 1.2.9 : 修正螺杆定位算法中轴向拟合计算时方向确定的问题,保证投影后的点云与投影前的点云的Z变化趋势一致
|
||||||
//version 1.2.10 : 改进螺杆定位取点算法
|
//version 1.2.10 : 改进螺杆定位取点算法
|
||||||
std::string m_strVersion = "1.2.10";
|
//version 1.2.11 : 根据现场数据调整特征生长参数
|
||||||
|
std::string m_strVersion = "1.2.11";
|
||||||
const char* wd_rodAndBarDetectionVersion(void)
|
const char* wd_rodAndBarDetectionVersion(void)
|
||||||
{
|
{
|
||||||
return m_strVersion.c_str();
|
return m_strVersion.c_str();
|
||||||
@ -242,7 +243,7 @@ void rodAarcFeatueDetection(
|
|||||||
int linePtNum = (int)scanLines[0].size();
|
int linePtNum = (int)scanLines[0].size();
|
||||||
for (int line = 0; line < lineNum; line++)
|
for (int line = 0; line < lineNum; line++)
|
||||||
{
|
{
|
||||||
if (line == 827)
|
if (line == 1304)
|
||||||
int kkk = 1;
|
int kkk = 1;
|
||||||
std::vector<SVzNL3DPosition>& lineData = scanLines[line];
|
std::vector<SVzNL3DPosition>& lineData = scanLines[line];
|
||||||
|
|
||||||
@ -632,8 +633,8 @@ SVzNL3DRangeD _getPointCloudROI(std::vector<SWD3DPointPostion>& scanData)
|
|||||||
}
|
}
|
||||||
fitPoints.erase(fitPoints.begin(), fitPoints.begin() + eraseIdx);
|
fitPoints.erase(fitPoints.begin(), fitPoints.begin() + eraseIdx);
|
||||||
fit2DPos.erase(fit2DPos.begin(), fit2DPos.begin() + eraseIdx);
|
fit2DPos.erase(fit2DPos.begin(), fit2DPos.begin() + eraseIdx);
|
||||||
fitPoints.erase(fitPoints.end() - 5, fitPoints.end());
|
fitPoints.erase(fitPoints.end() - 15, fitPoints.end());
|
||||||
fit2DPos.erase(fit2DPos.end() - 5, fit2DPos.end());
|
fit2DPos.erase(fit2DPos.end() - 15, fit2DPos.end());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -655,8 +656,8 @@ SVzNL3DRangeD _getPointCloudROI(std::vector<SWD3DPointPostion>& scanData)
|
|||||||
int eraseNum = (int)fitPoints.size() - eraseIdx;
|
int eraseNum = (int)fitPoints.size() - eraseIdx;
|
||||||
fitPoints.erase(fitPoints.end() - eraseNum, fitPoints.end());
|
fitPoints.erase(fitPoints.end() - eraseNum, fitPoints.end());
|
||||||
fit2DPos.erase(fit2DPos.end() - eraseNum, fit2DPos.end());
|
fit2DPos.erase(fit2DPos.end() - eraseNum, fit2DPos.end());
|
||||||
fitPoints.erase(fitPoints.begin(), fitPoints.begin() + 5);
|
fitPoints.erase(fitPoints.begin(), fitPoints.begin() + 15);
|
||||||
fit2DPos.erase(fit2DPos.begin(), fit2DPos.begin() + 5);
|
fit2DPos.erase(fit2DPos.begin(), fit2DPos.begin() + 15);
|
||||||
}
|
}
|
||||||
//置标志
|
//置标志
|
||||||
for (int j = 0; j < (int)fit2DPos.size(); j++)
|
for (int j = 0; j < (int)fit2DPos.size(); j++)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user