220 lines
6.1 KiB
C++
220 lines
6.1 KiB
C++
#ifndef IVRCONFIG_H
|
||
#define IVRCONFIG_H
|
||
|
||
#include <string>
|
||
#include <vector>
|
||
#include <utility>
|
||
#include <algorithm>
|
||
#include "VrCommonConfig.h" // 使用公共配置结构体定义
|
||
|
||
/**
|
||
* @brief 项目类型枚举
|
||
*/
|
||
enum class ProjectType
|
||
{
|
||
LapWeld = 0, // 激光焊接
|
||
DirectBag = 1, // 带方向的编织袋
|
||
};
|
||
|
||
/**
|
||
* @brief 项目类型字符串转换函数
|
||
*/
|
||
inline std::string ProjectTypeToString(ProjectType type)
|
||
{
|
||
switch (type) {
|
||
case ProjectType::LapWeld:
|
||
return "LapWeld";
|
||
case ProjectType::DirectBag:
|
||
return "DirectBag";
|
||
default:
|
||
return "Unknown";
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 字符串转项目类型函数
|
||
*/
|
||
inline ProjectType StringToProjectType(const std::string& str)
|
||
{
|
||
if (str == "LapWeld" || str == "0") {
|
||
return ProjectType::LapWeld;
|
||
} else if (str == "DirectBag" || str == "1") {
|
||
return ProjectType::DirectBag;
|
||
} else {
|
||
return ProjectType::LapWeld; // 默认返回激光焊接
|
||
}
|
||
}
|
||
|
||
// DeviceInfo, SerialConfig 已在 VrCommonConfig.h 中定义
|
||
|
||
/**
|
||
* @brief 离群点滤波参数
|
||
*/
|
||
struct VrOutlierFilterParam
|
||
{
|
||
double continuityTh = 20.0; // 连续性阈值
|
||
int outlierTh = 5; // 离群点判断阈值
|
||
};
|
||
|
||
/**
|
||
* @brief 斜坡参数
|
||
*/
|
||
struct VrSlopeParam
|
||
{
|
||
double LSlopeZWin = 10.0; // 斜坡计算的窗口长度
|
||
double validSlopeH = 5.0; // 有效斜坡高度
|
||
double minLJumpH = 3.0; // 最小L跳跃高度
|
||
double minEndingGap = 2.0; // 最小结束间隔
|
||
};
|
||
|
||
/**
|
||
* @brief 拐角参数
|
||
*/
|
||
struct VrCornerParam
|
||
{
|
||
double cornerTh = 25; // 拐角阈值
|
||
double scale = 4; // 计算方向角的窗口比例因子
|
||
double minEndingGap = 6; // Y方向最小结束间隔
|
||
double minEndingGap_z = 1.5; // Z方向最小结束间隔
|
||
double jumpCornerTh_1 = 10; // 跳跃拐角阈值1
|
||
double jumpCornerTh_2 = 25; // 跳跃拐角阈值2
|
||
};
|
||
|
||
/**
|
||
* @brief 树生长参数
|
||
*/
|
||
struct VrTreeGrowParam
|
||
{
|
||
int maxLineSkipNum = 5; // 生长时允许跳过的最大线条数
|
||
double yDeviation_max = 1.0; // 生长时允许的最大Y偏差
|
||
double maxSkipDistance = 5.0; // 最大跳跃距离
|
||
double zDeviation_max = 2; // 生长时允许的最大Z偏差
|
||
double minLTypeTreeLen = 30.0; // L型树的最小长度
|
||
double minVTypeTreeLen = 30.0; // V型树的最小长度
|
||
};
|
||
|
||
/**
|
||
* @brief 焊接扫描模式枚举
|
||
*/
|
||
enum class WeldScanMode
|
||
{
|
||
ScanMode_V = 0, // 垂直线垂直方向扫描
|
||
ScanMode_H = 1, // 水平线平行水平扫描
|
||
ScanMode_Both = 2 // 既有垂直扫描,也有水平扫描
|
||
};
|
||
|
||
/**
|
||
* @brief 焊接扫描模式字符串转换函数
|
||
*/
|
||
inline std::string WeldScanModeToString(WeldScanMode mode)
|
||
{
|
||
switch (mode) {
|
||
case WeldScanMode::ScanMode_V:
|
||
return "ScanMode_V";
|
||
case WeldScanMode::ScanMode_H:
|
||
return "ScanMode_H";
|
||
case WeldScanMode::ScanMode_Both:
|
||
return "ScanMode_Both";
|
||
default:
|
||
return "Unknown";
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 字符串转焊接扫描模式函数
|
||
*/
|
||
inline WeldScanMode StringToWeldScanMode(const std::string& str)
|
||
{
|
||
if (str == "ScanMode_V" || str == "0") {
|
||
return WeldScanMode::ScanMode_V;
|
||
} else if (str == "ScanMode_H" || str == "1") {
|
||
return WeldScanMode::ScanMode_H;
|
||
} else if (str == "ScanMode_Both" || str == "2") {
|
||
return WeldScanMode::ScanMode_Both;
|
||
} else {
|
||
return WeldScanMode::ScanMode_V; // 默认返回垂直扫描
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 激光焊接参数
|
||
*/
|
||
struct VrLapWeldParam
|
||
{
|
||
double lapHeight = 2.0; // 搭接厚度
|
||
double weldMinLen = 2.0; // 最小焊缝长度,用于过滤可能的虚假焊缝
|
||
int weldRefPoints = 2; // 输出的直线焊缝的参考点,默认是2个(起点和终点)
|
||
WeldScanMode scanMode = WeldScanMode::ScanMode_V; // 焊接扫描模式
|
||
};
|
||
|
||
// VrCameraPlaneCalibParam, VrPlaneCalibParam, VrDebugParam 已在 VrCommonConfig.h 中定义
|
||
|
||
/**
|
||
* @brief 算法参数配置结构
|
||
*/
|
||
struct VrAlgorithmParams
|
||
{
|
||
VrOutlierFilterParam filterParam; // 滤波参数
|
||
VrSlopeParam slopeParam; // 斜坡参数
|
||
VrCornerParam cornerParam; // 拐角参数
|
||
VrTreeGrowParam growParam; // 增长参数
|
||
VrPlaneCalibParam planeCalibParam; // 平面校准参数
|
||
VrLapWeldParam lapWeldParam; // 激光焊接参数
|
||
};
|
||
|
||
/**
|
||
* @brief 配置加载结果
|
||
*/
|
||
struct ConfigResult
|
||
{
|
||
std::vector<DeviceInfo> cameraList;
|
||
std::vector<DeviceInfo> deviceList;
|
||
VrAlgorithmParams algorithmParams; // 算法参数
|
||
VrDebugParam debugParam; // 调试参数
|
||
SerialConfig serialConfig; // 串口配置
|
||
ProjectType projectType; // 项目类型
|
||
};
|
||
|
||
// IVrConfigChangeNotify 已在 VrCommonConfig.h 中定义
|
||
|
||
/**
|
||
* @brief VrConfig接口类
|
||
*/
|
||
class IVrConfig
|
||
{
|
||
public:
|
||
/**
|
||
* @brief 虚析构函数
|
||
*/
|
||
virtual ~IVrConfig() {}
|
||
|
||
/**
|
||
* @brief 创建实例
|
||
* @return 实例
|
||
*/
|
||
static bool CreateInstance(IVrConfig** ppVrConfig);
|
||
|
||
/**
|
||
* @brief 加载配置文件
|
||
* @param filePath 配置文件路径
|
||
* @return 加载的配置结果
|
||
*/
|
||
virtual ConfigResult LoadConfig(const std::string& filePath) = 0;
|
||
|
||
/**
|
||
* @brief 保存配置文件
|
||
* @param filePath 配置文件路径
|
||
* @param configResult 配置结果
|
||
* @return 是否保存成功
|
||
*/
|
||
virtual bool SaveConfig(const std::string& filePath, ConfigResult& configResult) = 0;
|
||
|
||
/**
|
||
* @brief 设置配置改变通知回调
|
||
* @param notify 通知接口指针
|
||
*/
|
||
virtual void SetConfigChangeNotify(IVrConfigChangeNotify* notify) = 0;
|
||
};
|
||
|
||
#endif // IVRCONFIG_H
|