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