手眼标定是什么,用在哪些工况
相机算出的是工件在图像坐标系里的位置, 机器人却按自己的基坐标系去抓, 两者之间的刚体变换矩阵就是手眼标定要求解的东西。
按相机安装位置分两种:Eye-to-Hand(眼在手外)相机固定在机架上,
求解「相机 → 机器人基坐标系」;
Eye-in-Hand(眼在手上)相机装在法兰上随臂运动,
求解「相机 → 法兰坐标系」。
典型工况:机床上下料、传送带抓取、拆码垛、引导装配、涂胶纠偏。
敏洽 机器视觉检测软件
内置手眼标定,两种方式都支持,底层用 OpenCV 的 calibrateHandEye。
实际会遇到的几个坑
1. 标定姿态取得太保守
最主要的误差来源。很多人把机器人在一个水平面上平移几个位置就完事, 旋转几乎没变化,这会让方程条件数很差, 旋转分量缺少约束,误差大且在残差里体现不明显。 正确做法:不少于 10 组、更稳妥是 15 到 20 组;平移覆盖整个作业范围; 三个旋转轴上都要有明显变化。
2. 先做内参与畸变,再做手眼
手眼标定用的是标定板在相机坐标系下的位姿,靠内参从图像反算, 内参不准或畸变没校正,输入本身就是错的。 畸变影响在视野边缘最大,表现为「中间抓得准、边缘抓偏」,容易误判成机器人精度问题。 顺序必须是:内参与畸变标定 → 验证重投影误差 → 再做手眼标定。 标定板要注意平整度,精密场合用玻璃基板。
3. 机械松动让标定结果失效
Eye-to-Hand 的相机支架刚性不足时,振动、温变、有人碰一下, 相机相对机器人基座的位置就变了,标出的矩阵直接失效。 Eye-in-Hand 更敏感:安装板与法兰的松动、末端工具更换与磨损都会引入误差。 对策:支架用刚性结构并加定位销,再做快速复检—— 拍固定基准件比对标定时的差异,超差报警重标。
4. 平面假设不成立
单相机 Eye-to-Hand 抓取隐含假设: 工件都在同一个已知高度的平面上——单目图像没有深度信息, 只有假定平面已知才能把像素反算成三维坐标。 来料厚度差、料堆高低、传送带起伏、工件斜放都会破坏它, 表现是抓取位置沿视野径向偏移,越靠边缘偏得越多。 办法:按实际工作面高度重新标定、对不同厚度的料做分层配方、 或引入第二视角或高度传感器提供 Z 值。
5. 机器人位姿的读取时机
每组标定数据都要求「拍照那一刻」的图像和机器人位姿严格对应, 如果拍照与读位姿之间机器人还在运动或振动,两组数据就不匹配。 规范做法是:运动到位、延时稳定、再触发拍照。 敏洽软件支持硬件 IO、编码器、通讯软触发、连续采集四种, 引导抓取一般用通讯软触发或硬件 IO。
6. 用残差自证,不做实抓验证
标定算完给出的残差只说明「这组数据内部自洽」, 不说明系统在实际作业条件下抓得准—— 标定平面与工作面不一致、机器人自身绝对精度、 工具坐标系(TCP)标定误差都不体现在里面。 真正的验证要做实抓:在作业区四角与中心各放工件, 定位后引导机器人去抓或用尖端工具去点,记录偏差。 验收条款应写成「指定作业范围内多点定位偏差不超过 X」并写明测量方法。
两种方式的对比与硬件条件
| 维度 | Eye-to-Hand(眼在手外) | Eye-in-Hand(眼在手上) |
|---|---|---|
| 相机位置 | 固定在机架 / 龙门上 | 装在机器人法兰或末端工具上 |
| 求解对象 | 相机 → 机器人基坐标系 | 相机 → 法兰坐标系 |
| 适用场景 | 固定平面上的来料浮动:上下料、传送带抓取、拆码垛 | 需凑近看细节:插装对位、料箱内取件 |
| 节拍 | 快,一次成像覆盖作业区 | 慢,每次定位需移动机器人 |
| 视野与精度 | 大视野,像素当量较粗 | 小视野高分辨,局部精度好 |
| 布线 | 固定走线 | 随臂运动,需拖链与耐弯折线缆 |
| 主要风险 | 支架刚性与平面高度假设 | 安装重复性、线缆疲劳、节拍 |
| 项目 | 要求与说明 |
|---|---|
| 标定实现 | 内置手眼标定,支持两种方式,底层用 OpenCV calibrateHandEye |
| 前置标定 | 先完成相机内参与畸变标定;精密场合用玻璃基板标定板 |
| 姿态数 | 不少于 10 组,建议 15~20 组;平移铺满作业范围,三轴旋转均有明显变化 |
| 定位输出 | 模板匹配 / 特征点 / 几何基准 / Mark 点统一输出 Offset_X Offset_Y Angle_θ |
| 触发 | 引导抓取建议用通讯软触发或硬件 IO,确保图像与位姿时刻对应 |
| 相机 | USB/UVC、大华、海康、度申已适配;Mock 虚拟相机可离线复现标定数据 |
| 运行环境 | Qt 6.9.2 + C++17 + OpenCV 4.x;Windows 10/11 x64 与 Ubuntu 22.04 x64 |
| 客户准备 | 刚性相机支架、机器人位姿读取与坐标下发接口、标定板工装、工件高度变化范围 |
通讯接口要在开发前定好:机器人侧怎么读位姿、视觉侧以什么格式下发目标坐标。 角度定义与旋转顺序最容易出错, 不同机器人品牌的欧拉角约定不一样,接口文档里必须写死。
相关交付情况
引导抓取项目的交付除了检测与定位软件,还包括 标定流程本身的界面化——现场维护人员要能自己重做标定。 敏洽把标定做成向导式流程:提示移动机器人到下一姿态、自动采图并记录位姿、 显示姿态分布、算完给出残差与建议,并支持保存多套标定结果按工作面切换。
架构上 C++ 侧只输出原始定位数据(偏移与角度),
是否在允许范围内、要不要补偿,由 C# 侧或客户上位机决定。
需要嵌进客户已有机器人上位机时,可用跨语言 SDK
(mqvision.dll / libmqvision.so,支持 C、C++、C#、Java JNI、Python,另有 Qt-free 版本),
算法按模块授权。
更多算法说明见 内置算法库, 合作与验收标准的写法见 上位机软件外包怎么切分。
常见问题
有具体设备清单或工件样品,可以直接给判断
提供设备型号、PLC 品牌与需要采集的数据项,或提供被检工件照片与精度要求,敏洽可先给出可行性判断与硬件前置条件,再谈软件工作量与报价。