147 lines
4.0 KiB
Markdown
147 lines
4.0 KiB
Markdown
|
|
# VrEyeView 使用说明
|
|||
|
|
|
|||
|
|
## 功能概述
|
|||
|
|
|
|||
|
|
VrEyeView 是一个相机图像查看与标定板检测工具,用于:
|
|||
|
|
- 实时显示相机图像
|
|||
|
|
- 检测标定板角点
|
|||
|
|
- 计算标定板位姿(位置和姿态)
|
|||
|
|
- 将检测结果回调给 CalibView 作为相机坐标
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### 1. 独立运行 VrEyeView
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Windows
|
|||
|
|
cd Tools/VrEyeView
|
|||
|
|
VrEyeView.exe
|
|||
|
|
|
|||
|
|
# Linux
|
|||
|
|
cd Tools/VrEyeView
|
|||
|
|
./VrEyeView
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 在 CalibView 中使用
|
|||
|
|
|
|||
|
|
1. 启动 CalibView
|
|||
|
|
2. 菜单栏 -> 工具 -> 相机标定板检测
|
|||
|
|
3. VrEyeView 窗口会打开
|
|||
|
|
|
|||
|
|
## 操作步骤
|
|||
|
|
|
|||
|
|
### 步骤 1: 连接相机
|
|||
|
|
|
|||
|
|
1. 输入相机 IP 地址(默认: 192.168.1.100)
|
|||
|
|
2. 点击"连接"按钮
|
|||
|
|
3. 等待连接成功,状态显示"已连接"
|
|||
|
|
|
|||
|
|
### 步骤 2: 配置相机参数
|
|||
|
|
|
|||
|
|
- **曝光**: 调整曝光时间(100-10000),默认 1000
|
|||
|
|
- **增益**: 调整增益值(0-255),默认 100
|
|||
|
|
|
|||
|
|
### 步骤 3: 配置标定板参数
|
|||
|
|
|
|||
|
|
- **内角点宽度**: 标定板内部角点的列数(默认 9)
|
|||
|
|
- **内角点高度**: 标定板内部角点的行数(默认 6)
|
|||
|
|
- **格子大小**: 标定板每个格子的边长,单位 mm(默认 30.0)
|
|||
|
|
|
|||
|
|
> **注意**: 内角点数量 = 格子数量 - 1
|
|||
|
|
> 例如:10x7 的格子标定板,内角点为 9x6
|
|||
|
|
|
|||
|
|
### 步骤 4: 配置相机内参
|
|||
|
|
|
|||
|
|
相机内参需要提前标定,或使用默认值:
|
|||
|
|
- **fx**: 焦距 x(默认 1000.0)
|
|||
|
|
- **fy**: 焦距 y(默认 1000.0)
|
|||
|
|
- **cx**: 主点 x(默认 640.0)
|
|||
|
|
- **cy**: 主点 y(默认 480.0)
|
|||
|
|
|
|||
|
|
### 步骤 5: 开始采集
|
|||
|
|
|
|||
|
|
1. 点击"开始采集"按钮
|
|||
|
|
2. 图像会实时显示在窗口中
|
|||
|
|
3. 状态显示"采集中"
|
|||
|
|
|
|||
|
|
### 步骤 6: 检测标定板
|
|||
|
|
|
|||
|
|
**手动检测**:
|
|||
|
|
1. 将标定板放置在相机视野内
|
|||
|
|
2. 点击"检测标定板"按钮
|
|||
|
|
3. 如果检测成功,角点会以绿色圆圈标记在图像上
|
|||
|
|
4. 检测结果显示在界面底部
|
|||
|
|
|
|||
|
|
**自动检测**:
|
|||
|
|
1. 勾选"自动检测"复选框
|
|||
|
|
2. 每次获取新图像时会自动检测标定板
|
|||
|
|
3. 检测成功后自动回调到 CalibView
|
|||
|
|
|
|||
|
|
### 步骤 7: 查看检测结果
|
|||
|
|
|
|||
|
|
检测成功后,界面会显示:
|
|||
|
|
```
|
|||
|
|
检测结果: 位置(x, y, z) 姿态(rx°, ry°, rz°)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- **位置**: 标定板中心在相机坐标系下的坐标(单位:mm)
|
|||
|
|
- **姿态**: 标定板的欧拉角(单位:度)
|
|||
|
|
|
|||
|
|
## 检测选项
|
|||
|
|
|
|||
|
|
- **自适应阈值**: 使用自适应阈值算法,提高不同光照条件下的检测率
|
|||
|
|
- **归一化图像**: 对图像进行归一化处理,提高检测稳定性
|
|||
|
|
- **自动检测**: 每次获取新图像时自动检测标定板
|
|||
|
|
|
|||
|
|
## 与 CalibView 集成
|
|||
|
|
|
|||
|
|
当在 CalibView 中打开 VrEyeView 时:
|
|||
|
|
|
|||
|
|
1. 检测到标定板后,结果会自动回调到 CalibView
|
|||
|
|
2. 标定板的位置和姿态会自动填充到 CalibView 的相机坐标输入框
|
|||
|
|
3. 可以配合机器人控制工具(RobotView)进行手眼标定
|
|||
|
|
|
|||
|
|
### 手眼标定流程
|
|||
|
|
|
|||
|
|
1. 在 CalibView 中选择标定模式(Eye-To-Hand 或 Eye-In-Hand)
|
|||
|
|
2. 打开 VrEyeView 和 RobotView
|
|||
|
|
3. 移动机器人到不同位置
|
|||
|
|
4. 在每个位置:
|
|||
|
|
- RobotView 获取机器人位姿 -> 自动填充到 CalibView
|
|||
|
|
- VrEyeView 检测标定板 -> 自动填充到 CalibView
|
|||
|
|
- 点击"添加"按钮添加数据点
|
|||
|
|
5. 收集足够数据点后(建议 10 组以上)
|
|||
|
|
6. 点击"标定"按钮执行标定
|
|||
|
|
|
|||
|
|
## 技术参数
|
|||
|
|
|
|||
|
|
- **支持的图像格式**: RGB(3 通道)
|
|||
|
|
- **标定板类型**: 棋盘格标定板
|
|||
|
|
- **内角点范围**: 2-20 x 2-20
|
|||
|
|
- **格子大小范围**: 1-100 mm
|
|||
|
|
- **位姿计算方法**: OpenCV solvePnP (ITERATIVE)
|
|||
|
|
- **角点精细化**: 亚像素级别(11x11 窗口)
|
|||
|
|
|
|||
|
|
## 开发接口
|
|||
|
|
|
|||
|
|
如果需要在其他程序中使用 VrEyeView:
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
#include "VrEyeViewWidget.h"
|
|||
|
|
|
|||
|
|
// 创建窗口
|
|||
|
|
VrEyeViewWidget* viewer = new VrEyeViewWidget();
|
|||
|
|
|
|||
|
|
// 设置回调
|
|||
|
|
viewer->SetDetectionCallback([](const ChessboardDetectionData& data) {
|
|||
|
|
if (data.detected) {
|
|||
|
|
// 处理检测结果
|
|||
|
|
qDebug() << "位置:" << data.x << data.y << data.z;
|
|||
|
|
qDebug() << "姿态:" << data.rx << data.ry << data.rz;
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 显示窗口
|
|||
|
|
viewer->show();
|
|||
|
|
```
|