21 标定系统 · 手眼标定

返回 00 - 项目总览与学习路线 | 前置 19 视觉基础 - 相机模型与内参标定 | 下一节 22 标定系统 - 支点标定、重力姿态与Quest-标记标定

为什么学这个(项目关联)

本项目四种标定方法中唯一的”教科书标准方法”。原文用它 + Tsai 求解器 + OpenCV 完成标定,并作为自研方法的交叉验证基准(平移结果被手眼佐证)。

知识点清单

1. 问题定义:AX = XB

  • setup:相机与控制器(“手”)刚性固连,一起运动
  • 已知:每时刻 棋盘→相机 变换 A_i = T_cam_board(i)、控制器相对运动 B_i = T_ctrl(i+1→i)
  • 求解:相机相对控制器的固定变换 X = T_ctrl_cam
  • 直觉:刚性固连的两个传感器,各自看到的相对运动必须一致 → 解出它们的相对安装

2. 经典求解器(OpenCV calibrateHandEye 全部内置)

方法思路
TSAI_LENZ(原文用)旋转/平移分离:先解旋转轴(Rodrigues),再线性解平移
PARK类似 Tsai,李代数表述
HORAUD非线性闭式
ANDREFF同时线性化旋转平移
DANIILIDIS对偶四元数,旋转平移统一

3. 数据采集要求(原文实践)

  • 运动必须绕两个不平行轴旋转(否则只有平移可观、旋转病态)
  • 理论 3 组快照足够;实际 20 组/轮大量平均抑制噪声(原文每轮 20 组,共 10 轮)
  • 姿态变化幅度要大、覆盖各方向

4. 完整 pipeline(复刻路线)

1. 相机内参标定(omnidir,见 19)        → K, D
2. 采集:手持 UMI 对 ChArUco 做多姿态运动,同步记录 相机帧 + Quest 位姿流
3. 每帧:ChArUco 位姿估计 → T_cam_board
4. 时间对齐:图像帧 ↔ 位姿流(时延补偿,见 18)
5. calibrateHandEye(boards, grippers) → X = T_ctrl_cam
6. 链式合成:T_ctrl_tool = T_ctrl_cam · T_cam_tool(后者需贴齐标定等给出相机→工具关系)
7. 评估:bootstrap 仿真 99 分位误差(见 23)

5. 原文的评估与发现(重要)

  • 没有绝对真值 → 用 10 次独立标定的均值代替真值,bootstrap 蒙特卡洛仿真估计 99 分位误差半径;10 次平均显著降误差
  • 仿真无法捕捉全局固定 bias(Quest 追踪误差、3D 打印偏差)——所以单方法统计好 ≠ 准
  • 原文发现:手眼的偏差一部分来自”用理论光轴倾角做相机→工具转换”,而贴齐标定实测倾角不同 → 链式合成的每一环都是误差源
  • 可视化校验结论:原始手眼结果在 CAD 渲染对比中全部视角都对不上,但”手眼平移 + 重力姿态旋转”组合可以——启发:方法组合可能优于单方法

学习资源

资源用途
Tsai & Lenz 1989《A New Technique for Fully Autonomous and Efficient 3D Robotics Hand/Eye Calibration》经典原文
OpenCV calibrateHandEye 文档 + 官方示例动手
检索 “hand eye calibration AX=XB tutorial”多角度讲解

实践任务

  1. 💻 跑通 OpenCV 手眼标定官方示例(webcam + 棋盘 + 模拟”手”的已知位姿)
  2. 💻 变量实验 A:采集时只平移不旋转 vs 只绕一轴旋转 vs 充分旋转——观察求解退化
  3. 💻 变量实验 B:快照数 3/5/10/20 → X 的稳定性曲线(体会”理论 3 组够,实际要平均”)
  4. ✍️ 手推 AX=XB 的旋转部分分离(用旋转轴向量构造线性系统,2 自由度练习)
  5. 💻(复刻时)在真机上完成 10 轮手眼标定 + bootstrap 评估,记录进 31 复刻路线图与里程碑 M3

掌握标准(自测)

  • 能写出 AX=XB 中 A、B、X 各是什么(用本项目坐标系命名)
  • 能解释为什么运动必须含两个不平行旋转轴
  • 能用 OpenCV 独立完成手眼标定并评估
  • 能解释”统计误差小但方法间偏差大”说明什么

关联笔记

实践记录

(学习时在这里追加:日期 / 做了什么 / 踩坑 / 疑问)