220 lines
6.1 KiB
C++
Raw Permalink 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.

#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