标定板摆歪之后:机器视觉测量课上那些卡住的瞬间

上周三下午,实验室那台老相机的数据线又松了。学生第三次跑程序,屏幕上量出来的孔径忽大忽小,他抬头看我,眼神里写满了“这机器坏了”。

我没接话。把标定板往台面上一搁,让他自己看。

板子是歪的。

机器视觉测量这门课,尴尬的地方就在这儿——看着像编程课,骨子里是机械课。

学生上来就 import cv2,我一般先拦一下

早年带这门课,我把内容排成“相机原理—镜头选型—标定—缺陷检测”,挺规整。结果期中作业交上来,一半人做的是同一个东西:从网上找张图,阈值分割,画轮廓,框选,输出长宽。

测什么?不知道。被测件哪儿来的?不知道。精度要求多少?也不知道。

后来我把头一节课改了。不讲算法,先发零件。一个铝合金支架,上面几个孔,让他们写清楚:要测哪个尺寸,为什么测这个尺寸,这个尺寸在装配里是干什么用的。

有个学生写了三稿。初稿写“测孔径”,第二稿写“测孔径和位置度”,第三稿他跑过来问我:老师,这个孔是给定位销用的还是给螺栓用的?如果是定位销,那我得测两个方向的偏差。

对了。这就对了。

机器视觉测量的落点,从来不在能不能出数,而在于出的数有没有对应的功能需求。机械设计里有个老概念叫设计基准,这个基准怎么转到视觉系统的坐标系里去,才是这门课真正要讲的东西。学生一旦绕过这一步,后面全是白忙。

机器视觉测量零件定位工装设计实拍
机器视觉测量零件定位工装设计实拍

“调通了”和“测得准”中间隔着一条河

讲标定那一节,我特别喜欢看学生的表情变化。

前半节:世界是光明的。张正友标定法,原理清楚,公式也推得动。

后半节:世界塌了。同一块板,同一个人拍,换一组图片,重投影误差就变。为什么?

因为板子没放平。

听上去很傻,对吧。但你去看学生怎么摆标定板:拿在手里,悬空,对着相机晃。他们脑子里想的是“我要让相机看到不同的姿态”——这没错,姿态角确实要覆盖。可他们忘了,相机看到的是三维世界往二维成像面上的投影,标定板的平面度、卡爪面跟板面的贴合、甚至板子底下垫的那本书的硬度,全都进了结果。

后来我加了一个环节,让他们用千分表打标定板四个角的高度差。打完再拍。

有个组的板子四角高度差,肉眼都能看出来。他们自己都笑了。

但这笑里有个东西被戳破了:视觉测量的精度上限,很多时候不是像素决定的,是机械结构的刚性和安装面的形位公差决定的。这条链子,机械设计专业的人比计算机专业的人更该敏感。可惜现实里,往往是机械的人把相机当成一个黑盒子,写代码的人又不知道夹具是怎么做出来的。

远心镜头也一样。学生头回接触,觉得贵得莫名其妙。我把普通镜头和远心镜头拍的同一个柱销照片并排投在屏幕上,让他们看侧壁。普通镜头下,柱销边缘是有虚影的,因为斜着看过去,还有一部分侧面被投了进来。远心镜头下,边缘干净。

为什么?光路决定的。它把“物距一变放大倍率就变”这件事从根上掐掉了。代价是视场小、工作距离固定、价格上去了。

这就是设计取舍。你要大视场还是要小畸变?要便宜方案加畸变补偿,还是要贵一点的硬件直接把误差按住?课上我把这个决策丢给学生,让他们拿一个假设的量产场景自己算账。算着算着,有人发现补偿算法要占的工时也不便宜,还得加调试人员。

机器视觉测量远心镜头与普通镜头成像对比实验
机器视觉测量远心镜头与普通镜头成像对比实验

作业从“跑通 demo”改成“交一套量具”

作业从“跑通 demo”改成“交一套量具”
作业从“跑通 demo”改成“交一套量具”

这个改动是三年前做的。改完之后学生骂了我一个学期,但后面的评教反而好看了。

原来的作业:用 OpenCV 写个尺寸测量程序,能跑就行。

现在的作业:给你一个被测件和一张工序卡,交一套可复现的测量方案。包括光照方案、相机与镜头选型依据、工装定位方式、标定流程、判定准则,还有一份“这套方案会怎么失效”的风险清单。

末了一项不好写。学生通常空着,或者写一句“光线变化”。

我说,太糊了,不行。光线怎么变?是环境灯被关了,还是下午太阳从西窗照进来了?照进来以后你测的还是同一个面吗?你的打光是背光还是同轴?背光的话,光源的漫射板脏了会怎么样?

逼到这一步,他们才开始想:原来我做的这套东西是有使用条件的。

有一组做小轴类零件的直径测量。用背光,投影边缘很锐利,看着挺美。但有个问题:轴在 V 型块上旋转的时候,如果 V 型块本身不同轴,投影会随着旋转而摆动。他们量了摆动的幅度,发现比目标公差还大。

那怎么办?他们最后的方案是:不转,改测多个固定工位;同时把 V 型块换成精密夹头。

我挺喜欢这个答案。不优雅,但诚实。工程上的很多决定,都是承认现实以后做出来的。当然也有代价,节拍变慢了,产线要重新排。他们把这一条也写进了风险清单,还标了红。

工具链这件事,我一直在摇摆

工具链这件事,我一直在摇摆
工具链这件事,我一直在摇摆

早年教 Halcon,现在主线是 Python 加 OpenCV。原因不复杂:学生装得上,跑得动,社区里搜得到东西。

但 Halcon 有它的价值。算子封装得厚,做工业项目省时间,而且它逼着你想清楚每个算子的输入输出到底是什么意思。OpenCV 有时候太自由了,自由到学生把一堆函数串起来,就说自己“做完了”。

目前的折中是:主线用 Python,把原理讲透。后半段花两三次课过一遍工业软件的思路,把他们之前手写的东西用算子重做一遍,看看差别在哪。

差在哪?差在鲁棒性。手写的阈值分割,换个批次的产品就不行了。工业算子里的自适应、亚像素拟合、边缘筛选这些机制,本来就是为了处理“现实世界不干净”这一件事。

有个学生做过一个挺有意思的对比:同一个齿轮内孔,环境光下,手动阈值。早上去测和下午去测,结果能差几个像素。后来加了遮光罩加背光,稳了,波动的量级降了一档。

我没让他继续算具体数。数不重要。重要的是他亲眼看见了环境光是一个不受控变量,而这个变量,本该在机械设计阶段就被约束住。

顺便说一句,课上我尽量不让学生把希望压在“算法调参”上。调参能救的,往往是那些本来就不该发生的误差。真正该在图纸上、夹具上解决的问题,扔给图像处理,迟早会被产线打回来。

这两年又加了一点东西:让学生把自己那份失效清单交给隔壁组的同学,让对面照着复现。能不能复现出来,一测就知道。

十次里有三次,对面组做不出来。

我觉得那三次,才是这门课真正起作用的地方。

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:标定板摆歪之后:机器视觉测量课上那些卡住的瞬间
文章链接:https://m.yqhljx.com/list_9/5870.html