238 lines
6.9 KiB
Markdown
Raw 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.

# BinocularMarkApp 配置说明
## 配置文件结构
BinocularMarkApp 使用两个配置文件:
### 1. config.xml应用配置
存储应用运行参数,**需要修改**的参数在此文件中配置。
**文件位置**: `BinocularMarkApp/Config/config.xml`
**格式说明**: 使用 XML 格式与其他项目WorkpieceProject保持一致
**配置示例**:
```xml
<?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矩阵
## 配置加载流程
1. 程序启动时加载 `config.xml`
2. 使用 QDomDocument 解析 XML 文件
3. 读取应用配置端口、相机参数、Mark参数等
4.`<CalibrationFile>` 标签读取标定文件路径(必须配置)
5. 验证标定文件路径是否有效
6. 自动加载双目标定文件 StereoCamera.xml
7. 验证所有标定参数是否完整
8. 输出加载日志
**重要**`<CalibrationFile>` 标签及其 `path` 属性为必填项,如果缺失或为空,程序将无法启动。
## 标定文件路径配置
必须在 `config.xml` 中明确配置标定文件路径:
```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>` 路径:
```xml
<!-- 切换到 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: 标定参数加载失败
检查:
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();
```