本文最后更新于:2025年6月6日 下午
在机器人学和数学中,手眼标定问题(也成为“机器人-传感器”或“机器人-世界”标定问题)是确定机器人末端执行器与传感器(相机或激光扫描仪)之间或机器人底座与世界坐标系之间的转换的问题。
简介
手眼标定是确定视觉传感器(如相机、3D扫描仪)坐标系与机器人坐标系之间空间转换关系的过程,核心目标是实现视觉数据与机械臂操作的精准关联35。根据传感器安装位置分为两类:
- **Eye-in-Hand(眼在手上)**:相机固定于机械臂末端,随臂运动38;
- **Eye-to-Hand(眼固定)**:相机独立安装于环境中,观测机械臂运动56。
核心目的
通过标定矩阵(旋转矩阵与平移向量)实现:
- 将相机捕获的点云数据映射至机器人坐标系,指导机械臂执行抓取、装配等任务46;
- 减少因视觉误差导致的机械臂定位偏差,提升工业自动化精度17。
关键技术方法
- 传统标定算法
- 基于 AX=XB 方程求解变换矩阵,需结合机械臂末端位姿(TEndBase)与标定板位姿(TCalTargetCam)构建方程组38;
- 通过多次运动采集多组数据,利用最小二乘法或奇异值分解(SVD)优化解算35。
- 现代优化方法
- 动态环境感知:引入振动补偿与闭环重投影误差优化,降低环境干扰导致的标定失败率2;
- 路径规划增强:采用螺旋/网格运动路径,提升标定数据采集的效率和覆盖范围
方法说明: https://campar.in.tum.de/Chair/HandEyeCalibration
眼在手上 (Eye In Hand)
相机(眼睛)安装在机器人夹具末端(手),估计末端坐标系到相机坐标系的变换 $^gT_c$ 称为“眼在手上”的标定.
公式符号与意义
$^bT_g$ 指的是机械臂末端坐标系在机械臂基座坐标系下的变换关系,可以使用机械臂的正运动学得到:
$$ \begin{bmatrix}X_b\\Y_b\\Z_b\\1\end{bmatrix}=\begin{bmatrix}{}^bR_g&{}^bt_g\\0_{1\times3}&1\end{bmatrix}\begin{bmatrix}X_g\\Y_g\\Z_g\\1\end{bmatrix} $$$^cT_t$ 指的是标定板目标坐标系在相机坐标系下的变换关系,可以使用PNP方法估计得到 :
$$ \begin{bmatrix}X_{c}\\Y_{c}\\Z_{c}\\1\end{bmatrix}=\begin{bmatrix}{}^{c}R_{t}&{}^{c}t_{t}\\0_{1\times3}&1\end{bmatrix}\begin{bmatrix}X_{t}\\Y_{t}\\Z_{t}\\1\end{bmatrix} $$ 而 $^bT_t$ 和 $^gT_c$ 是常量, 可以列出等式: $$ \begin{aligned}^bT_t = &^bT_g^{(1)}\times^gT_c\times^cT_t^{(1)}=^bT_g^{(2)}\times^gT_c\times^cT_t^{(2)}\end{aligned} $$ 调整后得到: $$ \\&(^bT_g^{(2)})^{-1}\times^bT_g^{(1)}\times^gT_c=^gT_c\times^cT_t^{(2)}\times(^cT_t^{(1)})^{-1} $$ 问题就转换为 $AX=XB$ 的公式求解。眼在手外 (Eye To Hand)
眼在手外的手眼标定, 通过固定相机和机械臂基坐, 用相机拍摄机械臂末端, 末端粘贴标定板, 此时记录机械臂夹爪位姿, 相机通过 PnP 解算出标定板位姿, 利用标定板与夹爪之间的转换矩阵是常量来建立约束, 求解相机与基坐之间的位姿关系, 估计相机坐标系在机器人基座坐标系下的变换关系 $^bT_c$ ,这个过程称为“眼在手外”的标定。
每次移动时, $^bT_c$ 和 $^gT_t$ 是保持不动的。
$$
^gT_t = gT_b{(1)}\timesbT_c\timescT_t{(1)}=gT_b{(2)}\timesbT_c\timescT_t{(2)}
$$
调整后得到:
$$
(gT_b{(2)}){-1}\timesgT_b{(1)}\timesbT_c=bT_c\timescT_t{(2)}\times(cT_t{(1)}){-1}
$$
再次转换为 $AX=XB$ 的公式求解。
求解AX=XB
按照实现原理可以将所有方法分为三类:
- 独立闭式解 (seperable closed-form solutions): 与位移分量分开求解旋转分量。
缺点: 旋转分量Rx的计算误差会被带入位移分量tx的计算中。
- 同时闭式解 (simultaneous closed-form solutions): 同时求解位移分量和旋转分量
缺点: 由于噪声的影响,旋转分量Rx的求解可能不一定是正交矩阵。因此,必须对旋转分量采取正交化步骤。然而,相应的位移分量没有被重新计算,这会导致求解错误。
- 迭代方法 (iterative solutions): 使用优化技术迭代求解旋转分量和平移分量。
缺点: 这种方式计算量可能很大,因为这些方法通常包含复杂的优化程序。此外,随着方程数量(n)变大,迭代解与封闭式解之间的差异通常会变小。因此,使用此方法前必须决定迭代解决方案的准确性是否值得计算成本。
OpenCV 实现
OpenCV 中的 calibrateHandEye
方法实现了手眼标定的功能.
1 |
|
-
参数说明:
参数 说明 R_gripper2base 夹爪到机械臂基坐的旋转矩阵 t_gripper2base 夹爪到机械臂基坐的平移向量 R_target2cam 标定板到相机的旋转矩阵 t_target2cam 标定板到相机的平移向量 method 可选算法 -
可选方法:
官方文档: https://docs.opencv.org/4.x/d9/d0c/group__calib3d.html#gad10a5ef12ee3499a0774c7904a801b99
参数 说明 CALIB_HAND_EYE_TSAI Python: cv.CALIB_HAND_EYE_TSAI A New Technique for Fully Autonomous and Efficient 3D Robotics Hand/Eye Calibration [275]. CALIB_HAND_EYE_PARK Python: cv.CALIB_HAND_EYE_PARK Robot Sensor Calibration: Solving AX = XB on the Euclidean Group [214]. CALIB_HAND_EYE_HORAUD Python: cv.CALIB_HAND_EYE_HORAUD Hand-eye Calibration [127]. CALIB_HAND_EYE_ANDREFF Python: cv.CALIB_HAND_EYE_ANDREFF On-line Hand-Eye Calibration [12]. CALIB_HAND_EYE_DANIILIDIS Python: cv.CALIB_HAND_EYE_DANIILIDIS Hand-Eye Calibration Using Dual Quaternions [65]. 其中默认方法为TSAI独立闭式解方法,PARK,HORAUD也是独立解方法,ANDREFF,DANIILIDIS等是同时闭式解,(从同一组数据实验中得到结论,认为独立解中TSAI方法求得解的误差较大)。
参数澄清
这里有必要为刚刚使用该函数的同学澄清一下, 这个函数的本质为求解以下方程 (其中 $a, b,c,d $ 为一般坐标系变量, 没有特指的物理意义) :
$$ ^dT_a = ^dT_c\times^cT_b\times^bT_a $$当 $^dT_a$ 和 $^cT_b$ 为常量时, 向函数分别输入 $^dT_c$ 和 $^bT_a$, 函数就会输出一个计算好的 $^cT_b$ .
我们套用函数的原始命名名称:
眼在手上
$$
^bT_t = ^bT_g \times ^gT_c \times ^cT_t
$$
输入 $^bT_g $ 和 $^cT_t$, 输出 $ ^gT_c $
这个流程就是函数中的变量名称所表示的含义, 但是该功能也可以解决眼在手外的情形.
眼在手外
$$ ^gT_t = ^gT_b\times^bT_c\times^cT_t $$ 输入 $^gT_b $ 和 $^cT_t$, 输出 $ ^bT_c $这种使用方法的输入和输出的物理含义就与函数变量名不一致了,弄清原理, 放心使用, 认清本质, 变量名的物理含义不重要.
常见问题排查
-
错误 :标定结果不稳定或误差大
原因: 数据噪声大或运动不足(如仅平移无旋转)。
解决: 增加数据量,确保机械臂运动覆盖 6 自由度。
-
错误: 输出的旋转矩阵非正交
原因: 输入数据存在坐标系方向错误 (小心 xyz 和 zyx 旋转定义)。
解决: 检查
R_gripper2base
和R_target2cam
是否为合法旋转矩阵(正交且行列式为 1)。
参考资料
- https://zhuanlan.zhihu.com/p/673041492
- https://campar.in.tum.de/Chair/HandEyeCalibration
- https://docs.opencv.org/4.x/d9/d0c/group__calib3d.html#gad10a5ef12ee3499a0774c7904a801b99
文章链接:
https://www.zywvvd.com/notes/3d/opencv/cali-hand-eye-cv-intr/cali-hand-eye-cv-intr/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信支付

支付宝支付