7.1 KiB
BinocularMarkApp 配置说明
配置文件结构
BinocularMarkApp 使用两个配置文件:
1. config.xml(应用配置)
存储应用运行参数,需要修改的参数在此文件中配置。
文件位置: BinocularMarkApp/Config/config.xml
格式说明: 使用 XML 格式,与其他项目(WorkpieceProject)保持一致
配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<BinocularMarkConfig>
<!-- TCP服务器配置 -->
<ServerConfig port="5901" />
<!-- 相机配置 -->
<Cameras>
<Camera index="0" name="LeftCamera" exposureTime="10000.0" gain="1.0" />
<Camera index="1" name="RightCamera" exposureTime="10000.0" gain="1.0" />
</Cameras>
<!-- 双目标定文件路径 -->
<CalibrationFile path="../Calib/Mark_13度/StereoCamera.xml" />
<!-- Mark板参数 -->
<MarkInfo patternWidth="3" patternHeight="3" checkerSize="60.0" markerSize="45.0" dictType="1" />
<!-- Board配置 -->
<BoardInfo totalBoardNum="1" boardIdInterval="8" boardCharucoIdNum="4" />
<!-- 算法参数 -->
<AlgorithmParams disparityOffset="0.0" />
<!-- 调试参数 -->
<DebugParam enableDebug="true" saveDebugImage="false" printDetailLog="true" debugOutputPath="" />
</BinocularMarkConfig>
参数说明:
-
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标准格式):
<LeftCamera>: 左相机内参、畸变系数、图像尺寸<RightCamera>: 右相机内参、畸变系数、图像尺寸<Stereo>: 双目标定参数(旋转矩阵R、平移向量T、基线Baseline等)<Rectification>: 校正参数(R1, R2, P1, P2, Q矩阵)
配置加载流程
- 程序启动时加载
config.xml - 使用 QDomDocument 解析 XML 文件
- 读取应用配置(端口、相机参数、Mark参数等)
- 从
<CalibrationFile>标签读取标定文件路径(必须配置) - 验证标定文件路径是否有效
- 自动加载双目标定文件 StereoCamera.xml
- 验证所有标定参数是否完整
- 输出加载日志
重要:<CalibrationFile> 标签及其 path 属性为必填项,如果缺失或为空,程序将无法启动。
标定文件路径配置
必须在 config.xml 中明确配置标定文件路径:
<!-- 相对路径(推荐):相对于 config.xml 所在目录 -->
<CalibrationFile path="../Calib/Mark_13度/StereoCamera.xml" />
<!-- 或使用绝对路径 -->
<CalibrationFile path="C:/BinocularMark/Calib/Mark_13度/StereoCamera.xml" />
路径规则:
- 相对路径:相对于
config.xml所在目录解析 - 绝对路径:直接使用完整路径
- 路径中使用正斜杠
/或反斜杠\均可
切换不同角度的标定参数
如果有多个角度的标定文件(如 Mark_13度、Mark_15度),只需修改 config.xml 中的 <CalibrationFile> 路径:
<!-- 切换到 Mark_15度 标定文件 -->
<CalibrationFile path="../Calib/Mark_15度/StereoCamera.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 中缺少 <CalibrationFile> 标签:
ERROR: Missing <CalibrationFile> element in config file!
ERROR: Please add: <CalibrationFile path="path/to/StereoCamera.xml" />
解决方法:在 config.xml 中添加标定文件路径配置
标定文件路径为空
如果 path 属性为空:
ERROR: CalibrationFile path is empty in config file!
ERROR: Please set path attribute: <CalibrationFile path="../Calib/Mark_13度/StereoCamera.xml" />
解决方法:设置有效的标定文件路径
标定文件不存在
如果指定的标定文件不存在:
ERROR: Failed to open calibration file: .../StereoCamera.xml
ERROR: Failed to load calibration file: .../StereoCamera.xml
解决方法:检查文件路径是否正确,文件是否存在
常见问题
Q1: 标定参数加载失败
检查:
- 标定文件是否存在于正确路径
- 文件格式是否正确(OpenCV XML格式)
- 文件是否包含所有必需的参数节点
Q2: 需要修改标定参数
不要直接修改 StereoCamera.xml 文件,应该:
- 使用标定工具重新标定
- 生成新的
StereoCamera.xml文件 - 替换原文件或修改
config.xml中的路径指向新文件
Q3: 视差偏移参数的作用
disparity_offset 用于微调深度计算,通常用于:
- 补偿环境温度变化导致的基线微小变化
- 微调深度测量精度
- 默认值为 0.0,需要时再调整
Q4: 标定参数获取方法
使用OpenCV进行双目标定,生成StereoCamera.xml文件:
// 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();