algoLib/sourceCode/hybridPosePositioning_Export.h
jerryzeng 7342a322d9 hybridPosePositioning
version 1.3.1 : 添加了海瑞马转子钢芯定位位置属性计算,区分出中央,边和角的位置,按照中心排序,先输出最中央的目标
2026-07-29 08:34:39 +08:00

113 lines
3.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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; //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<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 WD_HRM_BinInfo binInfo,
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);