#ifndef IVRCONFIG_H #define IVRCONFIG_H #include #include #include struct DeviceInfo { std::string name; std::string ip; }; /** * @brief 编织袋参数 */ struct VrBagParam { double bagL = 650.0; // 长 double bagW = 450.0; // 宽 double bagH = 160.0; // 高 }; /** * @brief 离群点滤波参数 */ struct VrOutlierFilterParam { double continuityTh = 20.0; // 连续性阈值 int outlierTh = 5; // 离群点判断阈值 }; /** * @brief 角点参数 */ struct VrCornerParam { double minEndingGap = 20.0; // 最小结束间隙 double scale = 15.0; // 计算方向角的窗口比例因子 double cornerTh = 30.0; // 角点阈值 double jumpCornerTh_1 = 60.0; // 判断角点是否为跳跃的第一阈值 double jumpCornerTh_2 = 15.0; // 判断角点是否为跳跃的第二阈值 }; /** * @brief 斜率参数 */ struct VrSlopeParam { double LSlopeZWin = 10.0; // 计算L型Slope特征高度计算的窗口长度 double validSlopeH = 10.0; // 有效斜率高度 double minLJumpH = 20.0; // 最小L跳跃高度 double minEndingGap = 20.0; // 最小结束间隙 }; /** * @brief V特征参数 */ struct VrVFeatureParam { double valleyMinH = 10.0; // 山谷最小高度 double valleyMaxW = 80.0; // 山谷最大宽度 }; /** * @brief 树生长参数 */ struct VrTreeGrowParam { double yDeviation_max = 20.0; // 生长时允许的最大Y偏差 double zDeviation_max = 80.0; // 生长时允许的最大Z偏差 int maxLineSkipNum = 5; // 生长时允许跳过的最大线条数 double maxSkipDistance = 20.0; // 最大跳跃距离 double minLTypeTreeLen = 50.0; // L型树的最小长度 double minVTypeTreeLen = 50.0; // V型树的最小长度 }; /** * @brief 平面校准参数 */ struct VrPlaneCalibParam { double planeCalib[9]; // 旋转矩阵,将数据调平 double planeHeight = -1.0; // 参考平面的高度,用于去除地面数据 double invRMatrix[9]; // 逆旋转矩阵,回到原坐标系 }; /** * @brief 算法参数配置结构 */ struct VrAlgorithmParams { VrBagParam bagParam; // 编织袋参数 VrOutlierFilterParam filterParam; // 滤波参数 VrCornerParam cornerParam; // 角点特征参数 VrSlopeParam slopeParam; // 斜率参数 VrVFeatureParam valleyParam; // 山谷参数 VrTreeGrowParam growParam; // 增长参数 VrPlaneCalibParam planeCalibParam; // 平面校准参数 }; /** * @brief 配置加载结果 */ struct ConfigResult { std::vector cameraList; std::vector deviceList; VrAlgorithmParams algorithmParams; // 算法参数 }; /** * @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; }; #endif // IVRCONFIG_H