第二章 相机选型与标定:工业相机分类、镜头参数、手眼标定原理
做视觉引导抓取,第一步就是选相机。这一步要是走偏了,后面算法调得再好也白搭。我见过不少项目,前期随便买了个相机,结果到了现场发现视野不够、分辨率跟不上、或者帧率太低,最后只能返工。嗯,今天咱们就把这事聊透。
2.1 工业相机分类
工业相机说白了就两大类:面阵相机和线阵相机。抓取场景里,95% 以上用的是面阵相机。为什么?因为抓取需要的是二维图像里的位置和姿态信息,面阵相机一拍一个准。
但面阵相机内部还有讲究。我按传感器类型给你分一下:
| 类型 | 特点 | 适用场景 |
|---|---|---|
| CCD | 噪声低、动态范围高、帧率一般 | 高精度检测、静态抓取 |
| CMOS | 帧率高、功耗低、成本低 | 高速抓取、动态场景 |
| 全局快门 | 整帧同时曝光,无畸变 | 运动物体抓取 |
| 卷帘快门 | 逐行曝光,成本低 | 静态场景 |
2.2 镜头参数
镜头这东西,很多人觉得随便配一个就行。其实不然。镜头选错了,相机再好也白费。我重点讲几个关键参数:
2.2.1 焦距
焦距决定了视野大小。公式很简单:
焦距 = 工作距离 × 传感器尺寸 / 视野宽度
举个例子:你需要在1米外拍一个0.5米宽的工件,传感器宽度是6.4mm(1/2英寸),那焦距就是 1000 × 6.4 / 500 ≈ 12.8mm。选12mm或16mm的镜头都行。
2.2.2 光圈
光圈影响进光量和景深。抓取场景里,我建议光圈设在F4到F8之间。太小了进光不够,太大了景深太浅,工件稍微一偏就模糊了。
2.2.3 接口类型
现在主流是C接口和CS接口。C接口的后焦是17.526mm,CS接口是12.5mm。买的时候注意匹配,不然装不上。我见过有人买了C接口镜头配CS接口相机,结果怎么调都调不清楚——嗯,这就是接口不匹配。
2.3 手眼标定原理
手眼标定,说白了就是让机器人知道「相机看到的物体,在机器人坐标系里到底在哪」。这是整个系统的核心环节。标定不准,后面抓取全是瞎抓。
2.3.1 两种标定模式
手眼标定分两种:眼在手上(Eye-in-Hand)和眼在手外(Eye-to-Hand)。
- 眼在手上:相机装在机器人末端,跟着机械臂一起动。优点是灵活,可以近距离拍摄工件。缺点是标定复杂,每次换工具都得重新标。
- 眼在手外:相机固定安装,不随机器人动。优点是标定一次管很久,适合固定工位的抓取。缺点是视野固定,工件位置变化大时可能拍不到。
我个人习惯用眼在手上的方案。为什么?因为抓取场景里工件位置经常变,相机跟着机械臂走,总能找到最佳拍摄角度。不过标定确实麻烦一些,咱们接着看。
2.3.2 标定方程
手眼标定的核心方程是:
AX = XB
其中:
- A:机器人末端的位姿变换(从机器人控制器读取)
- B:相机看到的标定板位姿(通过图像计算)
- X:待求解的手眼变换矩阵
这个方程怎么解?常用的方法有Tsai两步法和非线性优化法。我一般用OpenCV的calibrateHandEye()函数,直接传入多组A和B,就能算出X。
2.3.3 标定流程
我总结了一套标准流程,照着做基本不会出问题:
- 固定标定板在工作台上,确保它不动
- 控制机器人移动到第一个位置,记录末端位姿A1
- 相机拍照,检测标定板角点,计算位姿B1
- 改变机器人姿态,重复步骤2-3,至少采集10组数据
- 调用标定算法,求解手眼矩阵X
- 验证:用一组新数据,计算重投影误差,应小于0.5像素
2.4 知识体系总览
为了让你更直观地理解本章的知识结构,我画了一张图:
你看,整个体系其实就三大块:相机分类、镜头参数、手眼标定。每一块都有坑,但只要你按我说的来,基本能一次搞定。
- 相机选型:优先全局快门CMOS,面阵相机够用
- 镜头参数:焦距算清楚,光圈F4-F8,接口别搞错
- 手眼标定:多采数据,固定标定板,验证重投影误差
好了,这一章就聊到这儿。下一章咱们讲光源选型和打光方案——嗯,那又是另一个有意思的话题了。