algoLib/sourceCode/hybridPosePositioning_Export.h

113 lines
3.3 KiB
C
Raw Normal View History

#pragma once
#include "SG_algo_Export.h"
#include <vector>
#define _OUTPUT_DEBUG_DATA 1
typedef struct
{
int workpieceType;
SSG_ROIRectD roi;
double score2D; //2D<32>ָ<EFBFBD><D6B8>Ŷ<EFBFBD>
}WD_objArea2D;
typedef struct
{
int workpieceType; //0:<3A><><EFBFBD><EFBFBD>; 1-<2D>ϱ<EFBFBD>; 2-<2D>±<EFBFBD>; 3-<2D><><EFBFBD><EFBFBD>; 4-<2D>ұ<EFBFBD>; 5-<2D><><EFBFBD>Ͻ<EFBFBD>; 6-<2D><><EFBFBD>Ͻ<EFBFBD>; 7-<2D><><EFBFBD>½<EFBFBD>; 8-<2D><><EFBFBD>½<EFBFBD>;
SVzNL3DPoint center;
SVzNL3DPoint z_dir; //z<><7A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
SVzNL3DPoint y_dir; //y<><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
SVzNL3DPoint x_dir; //x<><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
double value;
}WD_workpieceInfo;
//<2F>Ͽ<EFBFBD><CFBF><EFBFBD>Ϣ
typedef struct
{
double length;
double width;
double binTopZ; //<2F>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>
SVzNL3DPoint center; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SVzNL3DPoint bottomNormal; //<2F><><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>
SVzNL3DPoint x_dir; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>ǣ<EFBFBD>
SVzNL3DPoint y_dir; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>ǣ<EFBFBD>
SVzNL3DPoint minRectVertex[4]; //<2F><>С<EFBFBD><D0A1><EFBFBD>Ӿ<EFBFBD><D3BE>ζ<EFBFBD><CEB6><EFBFBD>
}WD_HRM_BinInfo;
typedef struct
{
double workpieceRadius; //Բ<>ι<EFBFBD><CEB9><EFBFBD><EFBFBD>
double workpieceHeight; //<2F><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
double layerZValue; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SVzNL3DPoint center; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}WD_HRM_workpieceSizeInfo;
//<2F><><EFBFBD><EFBFBD><E6B1BE>
SG_APISHARED_EXPORT const char* wd_hybridPositioningVersion(void);
//<2F><><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><E6B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
SG_APISHARED_EXPORT SSG_planeCalibPara wd_getGroundCalibPara(
std::vector< std::vector<SVzNL3DPosition>>& scanLines);
//<2F><><EFBFBD><EFBFBD>ˮƽʱ<C6BD><CAB1>̬<EFBFBD><CCAC>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT void wd_lineDataR(
std::vector< SVzNL3DPosition>& a_line,
const double* camPoseR,
double groundH);
SG_APISHARED_EXPORT void wd_HRM_RotorCorePositioning(
std::vector< std::vector<SVzNLPositionD>>& scanLinesInput,
std::vector<WD_objArea2D>& objROIs,
const WD_HRM_BinInfo binInfo,
const SSG_planeCalibPara groundCalibPara,
const SWD_Cylinder workpieceParam, //Բ<><D4B2><EFBFBD>ι<EFBFBD><CEB9><EFBFBD><EFBFBD>ı<EFBFBD><C4B1>ư뾶<C6B0>͸߶<CDB8>
std::vector< WD_workpieceInfo>& workpiecePositions,
#ifdef _OUTPUT_DEBUG_DATA
std::vector<std::vector<SVzNL3DPosition>>& debugScanLines,
#endif
int* errCode);
//<2F><><EFBFBD><EFBFBD>2D ROI<4F><49><EFBFBD><EFBFBD>3D<33><44>λ
SG_APISHARED_EXPORT void wd_HRM_TaperedWorkpiecePositioning(
std::vector< std::vector<SVzNLPositionD>>& scanLinesInput,
std::vector<WD_objArea2D>& objROIs,
const SSG_planeCalibPara groundCalibPara,
std::vector< WD_workpieceInfo>& workpiecePositions,
int* errCode);
#if 0
//<2F>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>ȡ<EFBFBD>Ͽ<EFBFBD><CFBF>ߴ<DFB4>Ͽ<EFBFBD><CFBF><EFBFBD>̬<EFBFBD><CCAC><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
SG_APISHARED_EXPORT WD_HRM_BinInfo wd_HRM_getBinSize(
std::vector< std::vector<SVzNL3DPosition>>& scanLines,
const SSG_cornerParam cornerPara,
int* errCode);
#else
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>Ϊ<EFBFBD><CEAA>׼<EFBFBD><D7BC><EFBFBD>й滮
SG_APISHARED_EXPORT WD_HRM_BinInfo wd_HRM_getBinSize(
std::vector< std::vector<SVzNL3DPosition>>& scanLines,
const SSG_planeCalibPara calibPara,
const double binHeight, //<2F>Ͽ<EFBFBD><CFBF>߶<EFBFBD>
int* errCode);
#endif
//<2F>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD>
SG_APISHARED_EXPORT WD_HRM_workpieceSizeInfo wd_HRM_getWorkpieceSize(
std::vector< std::vector<SVzNL3DPosition>>& scanLines,
std::vector<WD_HRM_workpieceSizeInfo>& standardWorkpieceSize,
const SSG_cornerParam cornerPara,
const SSG_planeCalibPara calibPara,
int* errCode);
//<2F>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ù滮
SG_APISHARED_EXPORT void wd_HRM_PlanBinPlacement(
const WD_HRM_BinInfo binInfo,
const SSG_size2D realBoardSize, //ʵ<>ʵ<EFBFBD><CAB5>а<EFBFBD><D0B0><EFBFBD>С
const WD_HRM_workpieceSizeInfo workpieceInfo,
const SSG_planeCalibPara calibPara,
const double guardingInterval, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB9A4><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::vector< WD_workpieceInfo>& planningPositions,
int* out_rows,
int* out_cols,
int* isLastLayere);