当前位置:首页 > 嵌入式 > 嵌入式分享

很多人第一次接触"视觉定位"这个词,会觉得它离日常很远。其实它做的事情和人伸手去拿桌上的杯子很像:先看到杯子在哪个方向、偏了多少,再指挥手往那个方向伸。区别只在于,人用的是眼睛和大脑,而工业机械臂用的是相机、镜头和一套视觉算法。本文用一个"机械臂抓取传送带上塑料方块"的小案例,把 2D 定位引导拆成几步讲清楚,帮助零基础读者建立完整的认识。

一、先看一个简单的抓取案例

想象这样一个工位:一条传送带匀速往前送料,上面每隔一段距离放一个方形塑料块;机械臂站在传送带旁边,头顶上方装着一台工业相机;塑料块走到相机下方时,机械臂要在几百毫秒内抓住它,搬到旁边的料盒里。

麻烦的地方在于,每个塑料块停在相机下方时,位置并不完全一致:有时偏左 3 毫米,有时偏右 5 毫米,有时还顺时针转了一个小角度。如果机械臂每次都按固定位置去抓,要么抓空,要么把方块推飞。这时候就需要相机"看一眼",告诉机械臂:"这个方块相对标准位置偏了 X 毫米、Y 毫米、转了 theta 度,你按这个偏差去调整。"

这就是 2D 定位引导在做的事情:在一张平面图像里找到目标,算出它相对基准位置的偏移量,再把这个偏移量告诉机械臂。它输出的是平面内两个方向的平移和一个绕光轴的旋转,不涉及目标在空间里的高度和俯仰。

二、一套典型的 2D 定位系统由哪些硬件组成

对零基础读者来说,先把硬件清单认识一遍,后面理解流程会轻松很多。

工业相机:负责把光信号转成数字图像。常见的有面阵相机,按分辨率区分,比如 130 万、200 万、500 万像素。分辨率越高,能看清的细节越多,单张图也越大。

镜头:决定相机能看多宽、看多清晰。根据工作距离(相机到目标的距离)和视野大小来选。视野太大会让像素变粗,定位精度下降;视野太小又容易让目标跑出画面。

光源:2D 视觉里常被低估,但对成败影响很大。常见的有环形光、条形光、同轴光、背光。目标不同,选光方式也不同:金属件容易反光,可能要用低角度暗场光;黑色橡胶件吸光,可能要提高亮度或换波段。

机械臂与控制器:执行抓取动作的本体。视觉系统算出的偏移量,需要通过串口、以太网或现场总线发给控制器,控制器再驱动机械臂走到调整后的目标点。

视觉处理单元:可以是装在相机里的智能相机,也可以是一台工业电脑跑视觉软件。前者部署简单,后者灵活性高,适合多品种、多算法的场合。

三、从拍照到抓取,一整套流程怎么走

还是回到那个塑料方块的案例。从相机触发拍照,到机械臂完成抓取,大致经过下面几步。

3.1 触发拍照

传送带上装一个光电传感器,当方块走到相机正下方时,传感器给相机发一个触发信号,相机拍一张图。这个过程和人听到"东西来了"抬头看一眼类似。

3.2 视觉算法找目标

拿到图像后,视觉软件要在整张图里认出哪个是要抓的方块。常用方法是模板匹配:事先拍一张标准方块的图像存成"模板",新图进来后,算法在整张图上滑动比对,找到相似度高的位置,就是目标所在。算法同时会返回一个旋转角,因为方块可能转了一个小角度。

3.3 把像素坐标换算成物理坐标

算法找到的位置,本质上是图像里的像素坐标,比如"距离图像左上角 523 像素、318 像素"。机械臂听不懂像素,它只认毫米。这时候要用到一个事先标定好的参数,叫"像素当量",意思是 1 个像素对应实际多少毫米。比如标定出来是 0.05 毫米/像素,那 100 像素就对应 5 毫米。

3.4 计算相对基准位置的偏移

系统里事先存了一个"基准目标位置",也就是方块在标准状态下应该出现的像素坐标。新算出来的目标坐标和基准坐标一减,就得到偏移量:X 方向偏了多少、Y 方向偏了多少、旋转角差了多少。

3.5 把偏移量发给机械臂并执行

视觉软件把"X 偏 -2.3 mm、Y 偏 +3.1 mm、theta 偏 1.5 度"这样的数据发给机械臂控制器。机械臂原本要去抓基准点,现在在基准点上叠加这个偏移量,再调整一下末端姿态,就走到了方块实际所在的位置,完成抓取。

四、两个绕不开的标定环节

零基础读者容易跳过"标定"这一步,但它直接决定了定位准不准。下面两个环节在项目里几乎都会遇到。

4.1 相机标定:搞清楚一个像素等于多少毫米

做法是把一张已知尺寸的标定板(比如棋盘格)放在目标平面上,相机拍一张,数出标定板某条边在图像里占多少像素,再除以它的实际长度,就得到了像素当量。如果镜头有畸变,还要顺便做畸变校正,让图像边缘的像素也能换算得准。

这一步完成后,系统才知道"图像里偏了 20 个像素"到底对应工件偏了几毫米。

4.2 手眼标定:搞清楚相机看到的和机械臂抓到的是不是同一个位置

相机装在机械臂旁边,它看到的世界坐标和机械臂自己的坐标系并不重合。手眼标定要解决的就是这两套坐标系之间的换算关系。常见做法是让机械臂拿着一个标定针或标定块,在不同位置多次拍照,算法根据这几组数据反推出相机坐标到机械臂坐标的转换矩阵。

手眼标定不准,典型表现就是:相机明明说目标在那儿,机械臂抓过去总是偏固定方向一段距离。

五、光源为什么经常决定成败

同样是塑料方块,打光方式不同,图像对比度差别很大。如果光从正上方均匀打下去,方块和传送带之间可能只有很弱的灰度差,算法很难把方块从背景里分出来;如果从低角度斜着打,方块边缘会形成亮边,算法更容易抓到轮廓。

对零基础项目,建议先在真实工件上试几种光源:环形光、条形光、背光各拍一组图,看哪种背景干净、目标边缘清晰。光源选对了,后面算法能省很多事;光源没选对,再复杂的算法也很难补回来。

六、用一组简单数字走一遍案例

假设标定得到像素当量是 0.05 毫米/像素,基准目标在图像里的坐标是 (400, 300) 像素。这次拍进来的新图里,算法找到的方块中心在 (446, 238) 像素,旋转角比基准多了 1.2 度。

像素差是 (446 − 400, 238 − 300) = (46, −62) 像素。乘以像素当量,得到物理偏移 (2.3, −3.1) 毫米。也就是说,方块相对基准位置在 X 方向偏了 2.3 毫米、Y 方向偏了 −3.1 毫米,同时顺时针转了 1.2 度。视觉软件把这组数据发给机械臂,机械臂在原本要去的抓取点上叠加这个偏移,并把末端转 1.2 度,就完成了一次引导抓取。

七、初学者常见的几个坑

结合上面的流程,下面这些问题在入门项目里出现频率较高。

•       只关心相机分辨率,忽略镜头和视野。视野太大时,单个像素对应的实际尺寸变大,定位精度反而下降。

•       光源随便拿一个白光就上阵,结果金属件反光严重、算法稳定率低。建议先在工件上做光源对比测试。

•       手眼标定只做一次、随手抓几组数据,结果不同工作距离下偏差明显。建议按实际作业范围分散取点。

•       机械臂抓取高度没有预先保证。2D 方案默认目标在一个平面上,如果方块厚度不一致、高度差没处理,抓取容易失败。

•       把模板做得太复杂。模板里如果带了背景纹理或灰尘,换个光照条件就匹配不上。模板尽量只保留目标本身的稳定特征。

八、小结

2D 定位引导可以理解为"用相机在平面上找目标、算偏移、指挥机械臂去调整"。它的核心是四个环节:选好硬件、完成相机与手眼标定、用合适的算法在图像里认出目标、把像素偏移换算成机械臂能听懂的物理偏移。对一个简单的传送带上抓取方块的案例来说,这套流程已经足够;当目标出现立体堆叠、姿态倾斜、高度变化等情况时,再考虑引入 3D 视觉。零基础入门阶段,建议先用一个简单工件把标定、光源、算法、通信这条链路完整走一遍,再逐步扩展到更复杂的任务。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭