# BinocularMarkApp 配置说明 ## 配置文件结构 BinocularMarkApp 使用两个配置文件: ### 1. config.xml(应用配置) 存储应用运行参数,**需要修改**的参数在此文件中配置。 **文件位置**: `BinocularMarkApp/Config/config.xml` **格式说明**: 使用 XML 格式,与其他项目(WorkpieceProject)保持一致 **配置示例**: ```xml ``` **参数说明**: - **ServerConfig**: TCP 服务器配置 - `port`: 服务器端口(默认5901) - **Cameras**: 相机配置 - `index`: 相机索引(0-左相机,1-右相机) - `name`: 相机名称 - `exposureTime`: 曝光时间(微秒) - `gain`: 增益 - **CalibrationFile**: 标定文件路径 - `path`: 相对路径或绝对路径 - **MarkInfo**: Mark 板参数 - `patternWidth`: Mark板列数 - `patternHeight`: Mark板行数 - `checkerSize`: 棋盘格尺寸(mm) - `markerSize`: ArUco标记尺寸(mm) - `dictType`: ArUco字典类型(1=DICT_6x6) - **BoardInfo**: Board 配置 - `totalBoardNum`: Board总数 - `boardIdInterval`: Board ID间隔 - `boardCharucoIdNum`: 每个Board的Charuco角点数 - **AlgorithmParams**: 算法参数 - `disparityOffset`: 视差偏移(用于微调深度计算) - **DebugParam**: 调试参数 - `enableDebug`: 是否启用调试模式 - `saveDebugImage`: 是否保存调试图像 - `printDetailLog`: 是否打印详细日志 - `debugOutputPath`: 调试输出路径 ### 2. StereoCamera.xml(双目标定参数) 存储双目相机标定参数,**只读文件**,由标定工具生成,不应手动修改。 **默认路径**: `App/BinocularMark/Calib/Mark_13度/StereoCamera.xml` **文件内容**(OpenCV标准格式): - ``: 左相机内参、畸变系数、图像尺寸 - ``: 右相机内参、畸变系数、图像尺寸 - ``: 双目标定参数(旋转矩阵R、平移向量T、基线Baseline等) - ``: 校正参数(R1, R2, P1, P2, Q矩阵) ## 配置加载流程 1. 程序启动时加载 `config.xml` 2. 使用 QDomDocument 解析 XML 文件 3. 读取应用配置(端口、相机参数、Mark参数等) 4. 从 `` 标签读取标定文件路径(必须配置) 5. 验证标定文件路径是否有效 6. 自动加载双目标定文件 StereoCamera.xml 7. 验证所有标定参数是否完整 8. 输出加载日志 **重要**:`` 标签及其 `path` 属性为必填项,如果缺失或为空,程序将无法启动。 ## 标定文件路径配置 必须在 `config.xml` 中明确配置标定文件路径: ```xml ``` **路径规则**: - 相对路径:相对于 `config.xml` 所在目录解析 - 绝对路径:直接使用完整路径 - 路径中使用正斜杠 `/` 或反斜杠 `\` 均可 ## 切换不同角度的标定参数 如果有多个角度的标定文件(如 Mark_13度、Mark_15度),只需修改 `config.xml` 中的 `` 路径: ```xml ``` ## 日志输出示例 成功加载配置后,日志输出: ``` Configuration loaded from .../config.xml Server port: 5901 Camera indices: L=0, R=1 Mark pattern: 3x3, checker=60.000000mm, marker=45.000000mm Board info: total=1, interval=8, charucoNum=4 Disparity offset: 0.000000 Loading calibration from OpenCV XML file: .../StereoCamera.xml Left camera matrix loaded: [4999.02, 2250.30, 4999.26, 2060.09] Right camera matrix loaded: [4992.95, 2287.94, 4993.71, 2079.38] Stereo baseline: 769.59 mm Q matrix loaded: [0.001299, -2214.277710, -2076.116623, 4996.487863] Calibration loaded successfully from .../StereoCamera.xml ``` ## 错误处理 ### 缺少标定文件配置 如果 `config.xml` 中缺少 `` 标签: ``` ERROR: Missing element in config file! ERROR: Please add: ``` **解决方法**:在 `config.xml` 中添加标定文件路径配置 ### 标定文件路径为空 如果 `path` 属性为空: ``` ERROR: CalibrationFile path is empty in config file! ERROR: Please set path attribute: ``` **解决方法**:设置有效的标定文件路径 ### 标定文件不存在 如果指定的标定文件不存在: ``` ERROR: Failed to open calibration file: .../StereoCamera.xml ERROR: Failed to load calibration file: .../StereoCamera.xml ``` **解决方法**:检查文件路径是否正确,文件是否存在 ## 常见问题 ### Q1: 标定参数加载失败 检查: 1. 标定文件是否存在于正确路径 2. 文件格式是否正确(OpenCV XML格式) 3. 文件是否包含所有必需的参数节点 ### Q2: 需要修改标定参数 不要直接修改 `StereoCamera.xml` 文件,应该: 1. 使用标定工具重新标定 2. 生成新的 `StereoCamera.xml` 文件 3. 替换原文件或修改 `config.xml` 中的路径指向新文件 ### Q3: 视差偏移参数的作用 `disparity_offset` 用于微调深度计算,通常用于: - 补偿环境温度变化导致的基线微小变化 - 微调深度测量精度 - 默认值为 0.0,需要时再调整 ### Q4: 标定参数获取方法 使用OpenCV进行双目标定,生成StereoCamera.xml文件: ```cpp // 1. 棋盘格标定 cv::calibrateCamera(...); // 单独标定左右相机 // 2. 双目标定 cv::stereoCalibrate(...); // 获取R, T, E, F // 3. 双目校正 cv::stereoRectify( cameraMatrixL, distCoeffsL, cameraMatrixR, distCoeffsR, imageSize, R, T, R1, R2, P1, P2, Q, // 输出参数 ... ); // 4. 保存到XML文件 cv::FileStorage fs("StereoCamera.xml", cv::FileStorage::WRITE); fs << "LeftCamera" << "{"; fs << "CameraMatrix" << cameraMatrixL; fs << "DistCoeffs" << distCoeffsL; // ... fs.release(); ```