112 lines
3.2 KiB
C++
112 lines
3.2 KiB
C++
#pragma once
|
||
|
||
#include "SG_algo_Export.h"
|
||
#include <vector>
|
||
|
||
#define _OUTPUT_DEBUG_DATA 1
|
||
|
||
typedef struct
|
||
{
|
||
int workpieceType;
|
||
SSG_ROIRectD roi;
|
||
double score2D; //2D分割信度
|
||
}WD_objArea2D;
|
||
|
||
typedef struct
|
||
{
|
||
int workpieceType;
|
||
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<SVzNL3DPosition>>& 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<SVzNLPositionD>>& scanLinesInput,
|
||
std::vector<WD_objArea2D>& objROIs,
|
||
const SSG_planeCalibPara groundCalibPara,
|
||
const SWD_Cylinder workpieceParam, //圆柱形工件的标称半径和高度
|
||
std::vector< WD_workpieceInfo>& workpiecePositions,
|
||
#ifdef _OUTPUT_DEBUG_DATA
|
||
std::vector<std::vector<SVzNL3DPosition>>& debugScanLines,
|
||
#endif
|
||
int* errCode);
|
||
|
||
//根据2D ROI进行3D定位
|
||
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
|
||
//料筐码放:获取料筐尺寸、料筐姿态、料筐中心点坐标
|
||
SG_APISHARED_EXPORT WD_HRM_BinInfo wd_HRM_getBinSize(
|
||
std::vector< std::vector<SVzNL3DPosition>>& scanLines,
|
||
const SSG_cornerParam cornerPara,
|
||
int* errCode);
|
||
#else
|
||
//检测料筐边缘,以中心点为基准进行规划
|
||
SG_APISHARED_EXPORT WD_HRM_BinInfo wd_HRM_getBinSize(
|
||
std::vector< std::vector<SVzNL3DPosition>>& scanLines,
|
||
const SSG_planeCalibPara calibPara,
|
||
const double binHeight, //料筐高度
|
||
int* errCode);
|
||
#endif
|
||
|
||
//料筐码放:获取工件尺寸
|
||
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);
|
||
|
||
//料筐码放:码放位置规划
|
||
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); |