#pragma once #include "SG_algo_Export.h" #include #define _OUTPUT_DEBUG_DATA 1 typedef struct { int workpieceType; SSG_ROIRectD roi; double score2D; //2D分割信度 }WD_objArea2D; typedef struct { int workpieceType; //0:中央; 1-上边; 2-下边; 3-左边; 4-右边; 5-左上角; 6-右上角; 7-左下角; 8-右下角; SVzNL3DPoint center; SVzNL3DPoint z_dir; //z方向向量(归一化) SVzNL3DPoint y_dir; //y方向向量(归一化) SVzNL3DPoint x_dir; //x方向向量(归一化) double value; }WD_workpieceInfo; //料筐信息 typedef struct { double length; double width; double binTopZ; //料筐最高处的Z值 SVzNL3DPoint center; //中心坐标 SVzNL3DPoint bottomNormal; //底面的法向 SVzNL3DPoint x_dir; //长轴与X轴的倾斜角, SVzNL3DPoint y_dir; //长轴与X轴的倾斜角, SVzNL3DPoint minRectVertex[4]; //最小外接矩形顶点 }WD_HRM_BinInfo; typedef struct { double workpieceRadius; //圆形工件半径 double workpieceHeight; //工件高度 double layerZValue; //工件层高 SVzNL3DPoint center; //中心坐标 }WD_HRM_workpieceSizeInfo; //读版本号 SG_APISHARED_EXPORT const char* wd_hybridPositioningVersion(void); //相机水平安装计算地面调平参数。。 //旋转矩阵为调平参数,即将平面法向调整为垂直向量的参数 SG_APISHARED_EXPORT SSG_planeCalibPara wd_getGroundCalibPara( std::vector< std::vector>& scanLines); //相机水平时姿态调平,并去除地面 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>& scanLinesInput, std::vector& objROIs, const WD_HRM_BinInfo binInfo, const SSG_planeCalibPara groundCalibPara, const SWD_Cylinder workpieceParam, //圆柱形工件的标称半径和高度 std::vector< WD_workpieceInfo>& workpiecePositions, #ifdef _OUTPUT_DEBUG_DATA std::vector>& debugScanLines, #endif int* errCode); //根据2D ROI进行3D定位 SG_APISHARED_EXPORT void wd_HRM_TaperedWorkpiecePositioning( std::vector< std::vector>& scanLinesInput, std::vector& objROIs, const SSG_planeCalibPara groundCalibPara, std::vector< WD_workpieceInfo>& workpiecePositions, int* errCode); #if 0 //料筐码放:获取料筐尺寸、料筐姿态、料筐中心点坐标 SG_APISHARED_EXPORT WD_HRM_BinInfo wd_HRM_getBinSize( std::vector< std::vector>& scanLines, const SSG_cornerParam cornerPara, int* errCode); #else //检测料筐边缘,以中心点为基准进行规划 SG_APISHARED_EXPORT WD_HRM_BinInfo wd_HRM_getBinSize( std::vector< std::vector>& scanLines, const SSG_planeCalibPara calibPara, const double binHeight, //料筐高度 int* errCode); #endif //料筐码放:获取工件尺寸 SG_APISHARED_EXPORT WD_HRM_workpieceSizeInfo wd_HRM_getWorkpieceSize( std::vector< std::vector>& scanLines, std::vector& standardWorkpieceSize, const SSG_cornerParam cornerPara, const SSG_planeCalibPara calibPara, int* errCode); //料筐码放:码放位置规划 SG_APISHARED_EXPORT void wd_HRM_PlanBinPlacement( const WD_HRM_BinInfo binInfo, const SSG_size2D realBoardSize, //实际的托板大小 const WD_HRM_workpieceSizeInfo workpieceInfo, const SSG_planeCalibPara calibPara, const double guardingInterval, //工作与工件的保护间隔 std::vector< WD_workpieceInfo>& planningPositions, int* out_rows, int* out_cols, int* isLastLayere);