4. 视觉定位系统
视觉定位,说白了就是给机器装上一双眼睛。这双眼睛好不好使,直接决定了模组装配的成败。我见过太多项目,机械结构做得再精密,视觉这块没搞好,最后产品就是装不进去。今天咱们就把这双眼睛的来龙去脉捋清楚。
4.1 相机选型与标定
选相机,不是像素越高越好。我刚开始做视觉的时候,也犯过这个错,觉得2000万像素肯定比500万强。结果呢?数据量太大,处理速度跟不上,产线节拍直接崩了。
真正要看的,是这几个参数:
- 分辨率:根据你的检测精度来算。一般经验是,一个像素对应0.01mm到0.05mm就够用了。比如你要做±0.02mm的定位,选个500万像素的相机,视野控制在20mm×15mm左右,基本就稳了。
- 帧率:产线节拍决定帧率。如果一秒要拍5个产品,帧率至少得15fps以上,留点余量。
- 靶面尺寸:2/3英寸的靶面是主流,搭配12mm或16mm的镜头,视野和景深都比较均衡。
- 接口类型:现在主流是USB3.0和GigE。我个人习惯用GigE,传输距离远,抗干扰能力强。
标定这块,我踩过的坑最多。相机标定说白了就是告诉机器:像素坐标和物理坐标之间怎么换算。常用的方法是张正友标定法,用棋盘格拍几张不同角度的照片,然后算内参和外参。
这里给个简单的标定流程:
1. 打印一张7×9的棋盘格,格子大小5mm×5mm
2. 贴在平面上,确保平整
3. 相机固定,移动棋盘格,拍10-15张不同角度照片
4. 用OpenCV的calibrateCamera函数计算
5. 验证重投影误差,一般要小于0.1像素
注意:标定板一定要平整!我曾经用一张有点褶皱的纸做标定,结果标定出来的参数全是错的,浪费了两天时间。后来我都是用玻璃基板加陶瓷棋盘格,贵是贵点,但省心。
4.2 光源方案设计
光源选得好,图像处理少。这句话是我入行时师傅教的,现在我也经常跟徒弟们说。
光源的作用就是让Mark点清晰可见,背景干净。常见的方案有:
| 光源类型 | 适用场景 | 我的经验 |
|---|---|---|
| 环形光源 | PCB板、金属表面 | 角度可调,能消除反光 |
| 背光源 | 透明物体、轮廓检测 | 边缘最清晰,但看不到表面细节 |
| 同轴光源 | 高反光表面、镜面 | 能消除阴影,但亮度要控制好 |
| 条形光源 | 大视野、长条形物体 | 角度灵活,适合打斜光 |
我遇到过最头疼的情况是:手机中框的Mark点,表面是镜面不锈钢,环形光源打上去全是反光,Mark点根本看不清。后来换成同轴光源,再把亮度调到60%,问题就解决了。你想想看,有时候不是光源不够亮,而是光的方向不对。
技巧:选光源时,先用手电筒从不同角度照一下工件,看看哪个角度Mark点最清晰。这个土办法比什么仿真软件都管用。
4.3 Mark点识别算法
Mark点识别,核心就三步:找、算、判。
常用的算法有:
- 模板匹配:最传统的方法,先存一个标准Mark点的图像,然后在实际图像里找最像的地方。优点是稳定,缺点是速度慢。
- 圆拟合:如果Mark点是圆形,可以用霍夫变换或者最小二乘法拟合圆。速度快,精度高。
- 边缘检测+几何匹配:先提取边缘,再匹配几何特征。适合Mark点形状不规则的场景。
我个人习惯用圆拟合。为什么?因为大多数Mark点都是圆形,而且圆拟合对光照变化不敏感。给你看段核心代码:
// 伪代码:圆拟合Mark点识别
1. 图像预处理:高斯滤波,去除噪声
2. 阈值分割:OTSU算法,自动找阈值
3. 轮廓提取:findContours
4. 筛选轮廓:面积在100-500像素之间,圆形度>0.8
5. 最小二乘法拟合圆:得到圆心坐标和半径
6. 亚像素精度:用插值法把精度提升到0.1像素
嗯,这里要注意一点:如果Mark点周围有干扰,比如焊盘、走线什么的,一定要先做ROI(感兴趣区域)裁剪。我见过有人直接在全图做圆拟合,结果把螺丝孔当成了Mark点,定位偏了0.5mm都没发现。
4.4 定位精度验证
算法写好了,怎么知道它准不准?这就得做精度验证了。
验证方法其实很简单:
- 做一个标准件,上面有已知坐标的Mark点
- 用视觉系统测量10次,记录每次的坐标值
- 计算平均值和标准差
- 精度 = 3σ(标准差的三倍)
举个例子,我测了10次,X方向的坐标分别是:
100.01, 100.03, 99.98, 100.02, 100.00,
99.99, 100.01, 100.02, 99.97, 100.00
平均值是100.003mm,标准差是0.018mm。那么定位精度就是3×0.018 = 0.054mm。也就是说,这个视觉系统有99.7%的概率,定位误差在±0.054mm以内。
关键点:精度验证一定要在产线实际环境下做。实验室里测出来0.01mm,上了产线可能变成0.05mm。为什么?因为产线有振动、有温度变化、有光照波动。我吃过这个亏,后来学乖了,每次都在产线跑100个产品做验证。
还有一个容易被忽略的点:重复定位精度和绝对定位精度是两回事。重复定位精度是指同一个位置测多次,结果的一致性。绝对定位精度是指测量值和真实值的偏差。有些视觉系统重复性很好,但绝对精度很差,因为标定没做好。所以验证时两个都要测。
最后说一句,视觉定位不是万能的。如果机械结构本身就有间隙,或者产品来料变形严重,视觉再准也救不了。我见过有人花了几十万买最好的相机和镜头,结果装上去发现产品本身尺寸超差,视觉系统根本找不到Mark点。所以,做视觉之前,先把机械和来料的问题搞定,这才是正道。