做机械设计做久了,容易对电气软件产生一种错觉——觉得那边应该挺简单,尤其是机器视觉检测。不就是相机拍张照,电脑判断OK还是NG么?
我第一次干这个,就被现实狠狠抽了一巴掌。一个焊锡检测工位,客户要求0.1mm的检测精度,节拍还要跑到每分钟600件。我本着机械工程师“能动手就不多废话”的思路,直接在工装上怼了个1200万像素的工业相机,配了16mm定焦镜头,两条条形光源。当时觉得,这配置够豪华了吧?
结果,调试图像出来那一刻,我整个人都懵了。焊点上的反光亮得能照出天花板,边缘全是锯齿。算法工程师在旁边骂骂咧咧:“这图你让我怎么提特征?”我盯着屏幕看了半天,憋出一句:“要不,换个角度?”
后来我才明白,机器视觉检测,真正决定成败的往往不是相机多贵,而是你怎么把光打对、把东西放稳、把变量控制死。今天这篇,就当是给同在坑里的机械工程师们,倒倒苦水,也留点干货。
打光,才是视觉检测的命根子
你信不信,同一个工件,白天和晚上拍出来的图像可能是两张脸。我踩过最大的坑,就是低估了光源。
一开始那两条条形光源,前端工装又是高反光的不锈钢,打出来的光均匀得像探照灯攻击。后来换成低角度的漫射光,边缘才像人。哦,对,打光这东西,不是越亮越好,角度决定你看到的是表面还是轮廓。
举个例子,检测端子压接高度,你要的是边缘轮廓清晰,那就得用背光。工件后方放个平行光源,相机透过轮廓看剪影,边缘锐度瞬间翻倍。而检测表面划痕、凹坑,就得用低角度光,让缺陷产生阴影。要是像我们那样用高角度环形光,光滑表面就成了镜面,亮瞎一切。
再聊聊光源颜色。彩色检测要求光源的显色指数(CRI)高,一般不低于80,不然颜色都偏了。纯灰度检测就无所谓吗?不是。红外光配合滤光片,能滤掉环境光的干扰,对于深色工件反而更好用。这些都要提前试过,别等到现场再临时抱佛脚。
更阴间的是环境光。现场车间里荧光灯总会有50Hz/60Hz的频闪,如果你没用DC供电的光源,或者相机不是全局曝光,图像亮度就会周期性跳变。有一次我们熬夜调试,明明机构和参数都没动,检测误报率忽高忽低。最后发现是头顶一盏老式荧光灯在作妖。气得我直接用遮光罩把整个工位罩了起来,世界瞬间清净!
所以,视觉检测的光源,不是选一个就完事。你得先问自己:检测特征到底要反光还是吃阴影?背景要不要压暗?工件的材质、颜色、粗糙度都影响打光方案。这里没道理可讲,全靠试错。

相机和镜头:先算账,后下单
很多机械工程师选相机,第一反应是像素越高越好。但像素高了价格翻倍,数据量大了,检测速度还掉下去。
这里有个最简单的公式:分辨率 = 视野范围 / 最小精度。比如你要检测一个20mm宽的端子,要求0.1mm精度,那就是200像素。但别天真,这是理论极限。真到了图像上,边缘的灰度是渐变过渡的,加上景深、运动模糊,实际能拿到的有效分辨率只有理论值的20%~30%。
我的习惯是:按理论值的3倍来选。200像素的东西,我至少按600像素规划。所以那个项目,我用的是500万像素的相机(2448×2048),实际视野大概30mm,算下来单像素尺寸约12μm,比精度要求高了一个数量级,这才稳。
镜头更是个拧巴的东西。焦距越短,视野越大,但畸变也越明显;焦距越长,工作距离就得拉远,机构尺寸跟着膨胀。有时候你辛辛苦苦把相机装好,调焦时发现景深只有区区的0.5mm,稍微有一点装歪,图像就糊了。这里有个公式倒是很实用:焦距 f = 工作距离D × 靶面尺寸S / 视野F。假如你用的是1/1.8英寸靶面(约7.2mm宽),工作距离100mm,视野想拍50mm,那f = 100 × 7.2 / 50 ≈ 14.4mm。那就选12mm或16mm的镜头,然后微调工作距离来匹配。
还有光圈。光圈收小了,进光量少了,但景深大;开大了,图像亮,但景深薄如纸。调试现场你拧一下光圈,发现边缘又虚了,那种抓狂,干过都懂。另外,传感器类型也要留个心眼。CCD和CMOS现在差距不大,但尽量选全局曝光(Global Shutter)的型号,不然运动中的工件拍出来会“歪斜”,卷帘曝光会让你哭。
传输接口也别瞎选。GigE Vision传输距离长,适合分散的工位;USB3 Vision速度快,但线缆要短、要屏蔽好。我们当初贪便宜用了普通USB3线,结果图像间歇性丢包,排查了半天,最后换了个带锁紧的工业camera link线才消停。总之,选型前先把这些物理量写在纸上,别像我当初那样,装完发现相机靶面太小,镜头全是暗角,还要拆了重装。

算法和机构,是互相成就的冤家

光学方案定了,算法也就成功了多半。但我见过太多项目,排人员工时,算法工程师急得跳脚,机构那边却三天两头改尺寸——检测工装的定位偏差0.2mm,算法就得去“猜”工件在哪。这很扯。
视觉算法说白了,就是从图像里找你关心的特征。传统方法有阈值分割、边缘提取、模板匹配,对图像质量要求极高;深度学习虽然不挑畸变,但需要海量带标注的样本,调参麻烦,推理还得靠GPU,成本直接起飞。作为机械工程师,咱们能做的,就是给算法一个“乖”的输入——稳定的定位、稳定的光照、干净的环境。
比如,工件在传送带上漂移,那就在工位上加个二次定位挡块。相机支架一定要刚性十足,别用那种铝型材加手拧螺丝,一拍就震。注意,检测时还要做一下“防荧光灯干扰”的物理隔离。这些细节,比算法工程师调十次代码都管用。
标定也不能跳过。相机拍到的像素坐标,要转换成机械坐标才能给机器人或PLC用。用标准的棋盘格标定板,算一下内参外参和畸变系数。这块别省,打印纸标定出来的精度就那么回事,能骗过自己可骗不过产线。
还有就是,别总想着让算法“万能”。设计机构时,把工件送到视野正中央,让检测区域避开镜头边缘畸变区。这比你后期上什么“智能算法”都靠谱。
做机器视觉检测,说到底,就是你跟物理规律、生产节拍、算法胃口之间的博弈。没什么玄学,多踩几次坑,就知道给每个环节留够余量。
现在再看到有人拿个相机随便一装就说“搞定了”,我只能说:祝你好运,朋友!