planeLocalization
version 1.3.1 : 改进了取发动机点特征点算法
This commit is contained in:
parent
7342a322d9
commit
6e9cdf27c4
@ -543,22 +543,24 @@ SSX_planeParkingParam _readParkingPara(char* fileName)
|
||||
|
||||
#define TEST_COMPUTE_GROUND_PARA 0
|
||||
#define TEST_COMPUTE_POSITION 1
|
||||
#define TEST_GROUP 1
|
||||
#define TEST_GROUP 3
|
||||
int main()
|
||||
{
|
||||
const char* dataPath[TEST_GROUP] = {
|
||||
"F:/ShangGu/项目/水木宏创/停机位停靠引导/数据/20260613_144419-波音737/", //0
|
||||
"F:/ShangGu/项目/水木宏创/停机位停靠引导/中心线锥桶数据/", //1
|
||||
"F:/ShangGu/项目/水木宏创/停机位停靠引导/数据/现场数据/0729夜晚雷达采集数据/", //2
|
||||
};
|
||||
|
||||
SVzNLRange fileIdx[TEST_GROUP] = {
|
||||
{1,43},
|
||||
{1,43}, {1,10}, {1, 145}
|
||||
};
|
||||
|
||||
const char* ver = wd_PlaneLocalizationVersion();
|
||||
printf("ver:%s\n", ver);
|
||||
|
||||
#if TEST_COMPUTE_GROUND_PARA
|
||||
int cvtGrp = 0;
|
||||
int cvtGrp = 2;
|
||||
char _calib_datafile[256];
|
||||
sprintf_s(_calib_datafile, "%sLaserData_1.txt", dataPath[cvtGrp]);
|
||||
std::vector<std::vector< SVzNL3DPosition>> scanData;
|
||||
@ -608,7 +610,7 @@ int main()
|
||||
#endif
|
||||
|
||||
#if TEST_COMPUTE_POSITION
|
||||
for (int grp = 0; grp < TEST_GROUP; grp++)
|
||||
for (int grp = 2; grp < TEST_GROUP; grp++)
|
||||
{
|
||||
SSG_planeCalibPara groundCalibPara;
|
||||
//初始化成单位阵
|
||||
@ -633,7 +635,7 @@ int main()
|
||||
|
||||
for (int fidx = fileIdx[grp].nMin; fidx <= fileIdx[grp].nMax; fidx++)
|
||||
{
|
||||
//fidx =31;
|
||||
//fidx =32;
|
||||
char _scan_file[256];
|
||||
sprintf_s(_scan_file, "%sLaserData_%d.txt", dataPath[grp], fidx);
|
||||
|
||||
@ -648,9 +650,9 @@ int main()
|
||||
|
||||
SSG_treeGrowParam growParam;
|
||||
growParam.maxLineSkipNum = 10;
|
||||
growParam.yDeviation_max = 300.0;
|
||||
growParam.maxSkipDistance = 300.0;
|
||||
growParam.zDeviation_max = 300.0;//
|
||||
growParam.yDeviation_max = 2000.0;// 300.0;
|
||||
growParam.maxSkipDistance = 2000.0; // 300.0;
|
||||
growParam.zDeviation_max = 2000.0; // 300.0;//
|
||||
growParam.minLTypeTreeLen = 500; //mm
|
||||
growParam.minVTypeTreeLen = 500; //mm
|
||||
|
||||
|
||||
@ -9,7 +9,8 @@
|
||||
//version 1.1.0 : 优化了机鼻点提取(迭代),增加了没有飞机的输出
|
||||
//version 1.2.0 : 修正了回归测试中发现的问题
|
||||
//version 1.3.0 : 修正了取发动机点特征点的一个Bug
|
||||
std::string m_strVersion = " PlaneLocalization 1.3.0";
|
||||
//version 1.3.1 : 改进了取发动机点特征点算法
|
||||
std::string m_strVersion = " PlaneLocalization 1.3.1";
|
||||
const char* wd_PlaneLocalizationVersion(void)
|
||||
{
|
||||
return m_strVersion.c_str();
|
||||
@ -432,6 +433,9 @@ SSX_planeInfo wd_planeLocalization(
|
||||
for (int m = 0; m < (int)allClusters.size(); m++)
|
||||
{
|
||||
SVzNL3DRangeD& a_roi = allClusterROIs[m];
|
||||
double height = groundCalibParam.planeHeight - a_roi.yRange.min;
|
||||
if (height >= 2000.00) //2米高度门限, 跳过一般人身高
|
||||
{
|
||||
if ((a_roi.zRange.min - rotateParkingPoint.z) < nearFarTh)
|
||||
{
|
||||
if ((a_roi.xRange.min >= ROI_x_near.min) && (a_roi.xRange.max <= ROI_x_near.max) &&
|
||||
@ -451,6 +455,7 @@ SSX_planeInfo wd_planeLocalization(
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//分析聚类之间的关系
|
||||
//建立聚类Mask
|
||||
@ -766,18 +771,66 @@ SSX_planeInfo wd_planeLocalization(
|
||||
}
|
||||
|
||||
//取左右点集的最低点,作为左右发动机的参考点
|
||||
SVzNL3DPosition leftEnginePoint = distanceValidData[leftEngineIdx][0];
|
||||
|
||||
|
||||
SVzNL3DPosition leftNearestPoint = distanceValidData[leftEngineIdx][0];
|
||||
for (int i = 1; i < (int)distanceValidData[leftEngineIdx].size(); i++)
|
||||
{
|
||||
if (leftEnginePoint.pt3D.y < distanceValidData[leftEngineIdx][i].pt3D.y)
|
||||
leftEnginePoint = distanceValidData[leftEngineIdx][i];
|
||||
if (leftNearestPoint.pt3D.z > distanceValidData[leftEngineIdx][i].pt3D.z)
|
||||
leftNearestPoint = distanceValidData[leftEngineIdx][i];
|
||||
}
|
||||
SVzNL3DPosition rightEnginePoint = distanceValidData[rightEngineIdx][0];
|
||||
std::vector<SVzNL3DPosition> leftEengineData;
|
||||
|
||||
for (int i = 0; i < (int)distanceValidData[leftEngineIdx].size(); i++)
|
||||
{
|
||||
double zDiff = distanceValidData[leftEngineIdx][i].pt3D.z - leftNearestPoint.pt3D.z;
|
||||
if (zDiff < 500.0) //0.5米范围内
|
||||
leftEengineData.push_back(distanceValidData[leftEngineIdx][i]);
|
||||
}
|
||||
SVzNL3DPosition leftEnginePoint = leftEengineData[0];
|
||||
SVzNL3DPosition leftCentroid = { 0, {0, 0, 0} };
|
||||
for (int i = 1; i < (int)leftEengineData.size(); i++)
|
||||
{
|
||||
if (leftEnginePoint.pt3D.y < leftEengineData[i].pt3D.y)
|
||||
leftEnginePoint = leftEengineData[i];
|
||||
leftCentroid.pt3D.x += leftEengineData[i].pt3D.x;
|
||||
leftCentroid.pt3D.y += leftEengineData[i].pt3D.y;
|
||||
leftCentroid.pt3D.z += leftEengineData[i].pt3D.z;
|
||||
}
|
||||
int leftEngineDataSize = (int)leftEengineData.size();
|
||||
leftCentroid.pt3D.x = leftCentroid.pt3D.x / leftEngineDataSize;
|
||||
leftCentroid.pt3D.y = leftCentroid.pt3D.y / leftEngineDataSize;
|
||||
leftCentroid.pt3D.z = leftCentroid.pt3D.z / leftEngineDataSize;
|
||||
|
||||
SVzNL3DPosition rightNearestPoint = distanceValidData[rightEngineIdx][0];
|
||||
for (int i = 1; i < (int)distanceValidData[rightEngineIdx].size(); i++)
|
||||
{
|
||||
if (rightEnginePoint.pt3D.y < distanceValidData[rightEngineIdx][i].pt3D.y)
|
||||
rightEnginePoint = distanceValidData[rightEngineIdx][i];
|
||||
if (rightNearestPoint.pt3D.z > distanceValidData[rightEngineIdx][i].pt3D.z)
|
||||
rightNearestPoint = distanceValidData[rightEngineIdx][i];
|
||||
}
|
||||
std::vector<SVzNL3DPosition> rightEngineData;
|
||||
for (int i = 0; i < (int)distanceValidData[rightEngineIdx].size(); i++)
|
||||
{
|
||||
double zDiff = distanceValidData[rightEngineIdx][i].pt3D.z - rightNearestPoint.pt3D.z;
|
||||
if (zDiff < 500.0) //0.5米范围内
|
||||
rightEngineData.push_back(distanceValidData[rightEngineIdx][i]);
|
||||
}
|
||||
|
||||
SVzNL3DPosition rightEnginePoint = rightEngineData[0];
|
||||
SVzNL3DPosition rightCentroid = { 0, {0, 0, 0} };
|
||||
for (int i = 1; i < (int)rightEngineData.size(); i++)
|
||||
{
|
||||
if (rightEnginePoint.pt3D.y < rightEngineData[i].pt3D.y)
|
||||
rightEnginePoint = rightEngineData[i];
|
||||
|
||||
rightCentroid.pt3D.x += rightEngineData[i].pt3D.x;
|
||||
rightCentroid.pt3D.y += rightEngineData[i].pt3D.y;
|
||||
rightCentroid.pt3D.z += rightEngineData[i].pt3D.z;
|
||||
}
|
||||
int rightEngineDataSize = (int)rightEngineData.size();
|
||||
rightCentroid.pt3D.x = rightCentroid.pt3D.x / rightEngineDataSize;
|
||||
rightCentroid.pt3D.y = rightCentroid.pt3D.y / rightEngineDataSize;
|
||||
rightCentroid.pt3D.z = rightCentroid.pt3D.z / rightEngineDataSize;
|
||||
#if _OUTPUT_DEBUG_DATA
|
||||
{
|
||||
int nose_lineIdx = nosePoint.nPointIdx >> 16;
|
||||
@ -794,6 +847,9 @@ SSX_planeInfo wd_planeLocalization(
|
||||
debugData[nose_lineIdx][nose_ptIdx].nPointIdx |= 0x40000; //机鼻点
|
||||
}
|
||||
#endif
|
||||
leftEnginePoint.pt3D = leftCentroid.pt3D;
|
||||
rightEnginePoint.pt3D = rightCentroid.pt3D;
|
||||
|
||||
//计算姿态
|
||||
//axis与左右发动机连续垂直, 采用(-y,, x)形式
|
||||
SVzNL2DPointD axis = { -(rightEnginePoint.pt3D.z - leftEnginePoint.pt3D.z), rightEnginePoint.pt3D.x - leftEnginePoint.pt3D.x };
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user