GrabBag/BeltTearingServer/SG_baseDataType.h

338 lines
7.6 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 <VZNL_Types.h>
#include <vector>
#define PI 3.141592654
// 定义欧拉角结构体(单位:度)
typedef struct{
double roll; // 绕X轴旋转横滚
double pitch; // 绕Y轴旋转俯仰
double yaw; // 绕Z轴旋转偏航
}SSG_EulerAngles;
//以工作轴为X轴(扫描方向平行地面与Z轴垂直的轴为Y轴垂直地面的轴为Z轴
typedef struct
{
bool validFlag; //指示结果是否有效
double x;
double y;
double z;
double pitchAngle; //俯仰角绕Y轴的偏转, 弧度
double rollAngle; //滚转角绕X轴的偏转, 弧度
double yawAngle; //偏转角绕Z轴的偏转, 弧度
}SSG_6AxisAttitude;
typedef struct
{
bool validFlag; //指示结果是否有效
double x;
double y;
double z;
}SSG_3AxisAttitude;
typedef enum
{
keSG_PoseSorting_Uknown = 0,
keSG_PoseSorting_ZMin2Max, ///按Z排序
keSG_PoseSorting_L2R_T2B, ///从左到右,从上到下排序
keSG_PoseSorting_T2B_L2R, ///从上到下,从左到右排序
} ESG_poseSortingMode;
typedef struct
{
int data_0;
int data_1;
int idx;
}SSG_intPair;
typedef struct
{
double left;
double right;
double top;
double bottom;
}SSG_ROIRectD;
#define LINE_FEATURE_NUM 16
#define LINE_FEATURE_UNDEF 0
#define LINE_FEATURE_L_JUMP_H2L 1
#define LINE_FEATURE_L_JUMP_L2H 2
#define LINE_FEATURE_L_SLOPE_H2L 3
#define LINE_FEATURE_L_SLOPE_L2H 4
#define LINE_FEATURE_V_SLOPE 5
#define LINE_FEATURE_LINE_ENDING_0 6 //ending起点
#define LINE_FEATURE_LINE_ENDING_1 7 //ending终点
#define LINE_FEATURE_RGN_EDGE 8 //迭代处理时已经得到的目标的边缘点标记
#define LINE_FEATURE_RIGHT_ANGLE_HR 9 //直角特征:水平-上升
#define LINE_FEATURE_RIGHT_ANGLE_HF 10 //直角特征:水平-下降
#define LINE_FEATURE_RIGHT_ANGLE_RH 11 //直角特征:上升-水平
#define LINE_FEATURE_RIGHT_ANGLE_FH 12 //直角特征:下降-水平
#define LINE_FEATURE_PEAK_TOP 13
#define LINE_FEATURE_PEAK_BOTTOM 14
#define LINE_FEATURE_CORNER_V 15
typedef struct
{
int featureType;
SVzNL2DPoint jumpPos2D;
SVzNL3DPoint jumpPos;
}SSG_basicFeature1D;
typedef struct
{
int lineIdx;
double gap_start;
double gap_width;
double gap_depth;
SVzNL3DPosition gapPt_0; //gap的端点
SVzNL3DPosition gapPt_1; //gap的端点
SSG_ROIRectD roi;
}SSG_basicFeatureGap;
typedef struct
{
int lineIdx;
std::vector<SSG_basicFeature1D> features;
std::vector<SSG_basicFeature1D> endings;
}SSG_lineFeature;
typedef struct
{
/* 点是否连续门限,小于此门限,视为点连续 */
double continuityTh; //点连续门限。当使用z跳变判断连续性时为z跳变门限当使用点距离判断时为点距离门限
/* 噪声判断门限,当连续段的点数据小于此门限,视为噪声 */
double outlierTh;
}SSG_outlierFilterParam;
typedef struct
{
double LSlopeZWin; //对L型Slope进行坡度计算的窗口长度
double validSlopeH;
double minLJumpH;
double minEndingGap;//连续段门限。大于此门限,为不连续
}SSG_slopeParam;
typedef struct
{
double minEndingGap; //连续段门限。大于此门限,为不连续
double scale; //计算方向角的窗口比例尺
double cornerTh; //拐角门限,大于此门限,为有效拐点
double jumpCornerTh_1; //判断拐角是否为跳变的两个门限。当一个门限大于jumpCornerTh_1且另一个小于jumpCornerTh_2时跳变
double jumpCornerTh_2;
}SSG_cornerParam;
typedef struct
{
double H_len; //直角特征水平段的长度
double V_len; //直角特征垂直段的长度
double maxDelta;
}SSG_lineRightAngleParam;
typedef struct
{
double valleyMinH;
double valleyMaxW;
}SSG_VFeatureParam;
typedef struct
{
double sameGapTh;
int gapChkWin;
}SSG_tearFeatureExtactPara;
typedef struct
{
double yDeviation_max;//生长时相邻特征最大的Y偏差
double zDeviation_max; //生长时相邻特征最大的Z偏差
int maxLineSkipNum; //生长时相邻特征的最大线间隔, -1时使用maxDkipDistance
double maxSkipDistance; //若maxLineSkipNum为-1 使用此参数.设为-1时此参数无效
double minLTypeTreeLen; //生长树最少的节点数目。小于此数目的生长树被移除
double minVTypeTreeLen; //生长树最少的节点数目。小于此数目的生长树被移除
}SSG_treeGrowParam;
typedef struct
{
double bagL; //长
double bagW; //宽
double bagH; //高
}SSG_bagParam;
typedef struct
{
ESG_poseSortingMode sortMode;
}SSG_objSortParam;
typedef struct
{
double angleStep;
double radiusStep;
}SSG_polarScanParam;
typedef struct
{
int treeState;
int treeType;
int sLineIdx;
int eLineIdx;
SSG_ROIRectD roi;
std::vector< SSG_basicFeature1D> treeNodes;
}SSG_featureTree;
typedef struct
{
int vTreeFlag;
int treeIdx;
int treeType;
int sLineIdx;
int eLineIdx;
SSG_ROIRectD roi;
}SSG_treeInfo;
typedef struct
{
int seachW_lines;
int searchW_pts;
}SSG_localPkParam;
typedef struct
{
int x;
int y;
int value;
double valueD;
int sideID; //1-T, 2-B, 3-L, 4-R
}SSG_2DValueI;
typedef struct
{
int start;
int len;
int value;
}SSG_RUN;
typedef struct
{
double mean;
double var;
}SSG_meanVar;
typedef struct
{
int x;
int y;
int type;
int edgeId;
int blockFlag;//遮挡标志
double scanDist;
SVzNL3DPoint edgePt;
}SSG_contourPtInfo;
typedef struct
{
int lineIdx;
std::vector<SSG_contourPtInfo> contourPts;
}SSG_lineConotours;
typedef struct
{
int lineIdx;
int edgeId_0;
int edgeId_1;
double ptPairDist;
SSG_contourPtInfo contourPt_0;
SSG_contourPtInfo contourPt_1;
}SSG_conotourPair;
typedef struct
{
double x;
double y;
double z;
double x_roll;
double y_pitch;
double z_yaw;
}SSG_6DOF;
typedef struct
{
double L;
double W;
double H;
double angle;
SVzNL3DPoint endings[4];
} SSG_boxCarDimension;
typedef struct
{
SVzNL3DPoint opCenter; //定子中心位置
int neighbourNum; //相邻目标数量
double opAngle; //定子外部相隔120度操作点的操作角度。以Y形为基准角度0度)
double obstacleDist; //距离周边障碍的距离
}SSG_motorStatorPosition;
typedef struct
{
int pkRgnIdx;
SVzNLSizeD objSize;
SVzNL2DPoint pos2D;
SSG_6DOF centerPos;
}SSG_peakRgnInfo;
typedef struct
{
SVzNL3DPoint sPt;
SVzNL3DPoint ePt;
double scanDist;
int ptNum;
}SSG_contourEdgeInfo;
typedef struct
{
double meanDist;
double varDist;
double minDist;
double maxDist;
int matchNum;
int level2_num; //level2为高可信度(两端为Jump或Ending;
int level1_num; //level1-为中可信度一端为Jump或Ending
SSG_ROIRectD roi;
}SSG_edgeMatchInfo;
typedef struct
{
int id1;
int id2;
int matchPts;
int matchType; //可信度, 2为高可信度(两端为Jump或Ending; 1-为中可信度一端为Jump或Ending0-为低可信度
double matchValue;
double varValue;
double minMatchValue;
double maxMatchValue;
SSG_ROIRectD roi;
}SSG_matchPair;
typedef struct
{
int objIdx;
bool isValid; //是否为合格目标。顶层目标,但编织袋横放(扫描到长边)为不合格目标
SSG_ROIRectD objROI;
SVzNL3DPoint objPos;
SSG_6DOF graspPos;
}SSG_sideBagInfo;
typedef struct
{
SVzNLRect roi;
int ptCounter;
int labelID;
}SSG_Region;
typedef struct
{
double planeCalib[9]; //旋转矩阵,将点云地面调平
double planeHeight;//地面调平后的高度,用于去除地面数据
double invRMatrix[9]; //旋转矩阵,回到原坐标系
}SSG_planeCalibPara;