2026-02-18 15:11:41 +08:00

4.0 KiB
Raw Permalink Blame History

VrEyeView 使用说明

功能概述

VrEyeView 是一个相机图像查看与标定板检测工具,用于:

  • 实时显示相机图像
  • 检测标定板角点
  • 计算标定板位姿(位置和姿态)
  • 将检测结果回调给 CalibView 作为相机坐标

快速开始

1. 独立运行 VrEyeView

# 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. 点击"标定"按钮执行标定

技术参数

  • 支持的图像格式: RGB3 通道)
  • 标定板类型: 棋盘格标定板
  • 内角点范围: 2-20 x 2-20
  • 格子大小范围: 1-100 mm
  • 位姿计算方法: OpenCV solvePnP (ITERATIVE)
  • 角点精细化: 亚像素级别11x11 窗口)

开发接口

如果需要在其他程序中使用 VrEyeView

#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();