# WorkpieceProject 配置说明 ## 概述 WorkpieceProjectConfig 是 WorkpieceProject 系列应用的共享配置库,提供了统一的 XML 配置文件加载和保存功能。 ## 配置结构 配置文件使用 XML 格式,包含以下四个主要部分: ### 1. BinocularMark TCP 客户端配置 用于配置 BinocularMarkReceiver 模块连接到 BinocularMarkApp 服务器的参数。 ```xml serverPort="5901" reconnectInterval="5000" heartbeatInterval="30000"/> ``` **对应数据结构**: `BinocularMarkClientConfig` ### 2. EpicEye 3D 相机配置 仅 WorkpiecePositionApp 需要,用于配置 EpicEye 3D 相机设备列表。 ```xml ``` **对应数据结构**: `std::vector` ### 3. 调试配置 控制调试模式、日志输出和数据保存行为。 ```xml saveDebugImage="false" savePointCloud="false" printDetailLog="true" debugOutputPath="./debug"/> ``` **对应数据结构**: `VrDebugParam`(定义在 AppCommon/Inc/VrCommonConfig.h) ### 4. 串口配置 用于机械臂通信的串口参数(可选)。 ```xml baudRate="115200" dataBits="8" stopBits="1" parity="0" flowControl="0" enabled="true"/> ``` **对应数据结构**: `SerialConfig`(定义在 AppCommon/Inc/VrCommonConfig.h) ## 配置加载示例 ```cpp #include "IVrConfig.h" // 创建配置管理器 IVrConfig* pConfig = nullptr; IVrConfig::CreateInstance(&pConfig); // 加载配置 ConfigResult configResult; int ret = pConfig->LoadConfig("./config/config.xml", configResult); if (ret == LOAD_CONFIG_SUCCESS) { // 访问 BinocularMark 配置 std::string serverIP = configResult.binocularMarkConfig.serverIP; int serverPort = configResult.binocularMarkConfig.serverPort; // 访问 EpicEye 设备列表(WorkpiecePositionApp) if (configResult.epicEyeDeviceList.size() > 0) { std::string epicEyeIP = configResult.epicEyeDeviceList[0].ip; } // 访问调试参数 bool enableDebug = configResult.debugParam.enableDebug; } ``` ## 应用使用情况 ### WorkpiecePositionApp 使用配置项: - ✅ BinocularMark TCP 客户端配置 - ✅ EpicEye 设备列表 - ✅ 调试配置 - ⚪ 串口配置(可选) 工作流程: 1. 通过 BinocularMarkReceiver 连接到 BinocularMarkApp(使用 binocularMarkConfig) 2. 连接到 EpicEye 3D 相机(使用 epicEyeDeviceList[0]) 3. 接收 Mark 坐标 + 点云数据 4. 计算工件抓取位置 ### WorkpieceSpliceApp 使用配置项: - ✅ BinocularMark TCP 客户端配置 - ❌ EpicEye 设备列表(不需要) - ✅ 调试配置 - ⚪ 串口配置(可选) 工作流程: 1. 通过 BinocularMarkReceiver 连接到 BinocularMarkApp(使用 binocularMarkConfig) 2. 接收 Mark 坐标数据 3. 通过串口控制机械臂调整工件位置 ## 简化历史 ### 移除的参数 以下参数在简化过程中被移除(这些是算法内部计算的参数,不应由配置文件提供): - ❌ `VrOutlierFilterParam` - 离群点过滤参数 - ❌ `VrCornerParam` - 角点检测参数 - ❌ `VrTreeGrowParam` - 区域生长参数 - ❌ `VrWorkpieceParam` - 工件参数 ### 原因 binocularMark 算法接口需要的是预先标定好的相机校准矩阵,而不是这些算法调优参数。标定矩阵应该通过专门的标定工具生成,并在 BinocularMarkApp 的配置中设置。 WorkpieceProject 系列应用只需要: 1. **连接参数**:如何连接到数据源(BinocularMarkApp、EpicEyeDevice) 2. **调试参数**:是否保存调试数据 3. **通信参数**:如何控制机械臂(串口) ## 参考文件 - 配置模板:`config_example.xml` - 接口定义:`Inc/IVrConfig.h` - 实现代码:`Src/VrConfig.cpp` - 公共数据结构:`AppUtils/AppCommon/Inc/VrCommonConfig.h`