基于LabVIEW的机器视觉检测追踪系统

摘要

本文设计并实现了一套基于LabVIEW的机器视觉检测系统,该系统由计算机、800万像素工业相机和龙门式三轴运动平台构成,通过USB和RS232接口实现硬件通信。针对传统圆形检测算法在视角变化和遮挡情况下的局限性,提出了一种改进的连通域分析方法:首先采用红色通道增强技术提高目标对比度,经阈值分割(0-55)和形态学处理后,通过分析最大连通域重心实现精确定位。在运动控制方面,建立了基于视觉反馈的比例控制模型(Kp=22),设计了包含坐标转换(相对→绝对)、无效坐标过滤和安全延时的控制策略。实验表明,该系统在1080P@30fps条件下可实现33ms的检测周期,定位精度达±0.5像素,成功解决了二值化图像处理(0→255转换)、串口通信(Hex字符串转U8数组)和机械共振等关键技术难题,为工业自动化检测提供了高性价比的解决方案。

创作声明:本文由作者原创,由Deepseek进行排版并总结,摘要由deepseek生成。

:DEEPSEEK在排版时为部分文章生成了总结,我将其保留在我写的内容上方,上半部分为deepseek,中间是横线,下半部分是我写的内容。

一、硬件

本次机器视觉检测系统包括计算机、相机和龙门式三轴运动系统组成。其中,相机通过USB接口与计算机连接,运动系统通过USB转RS232与计算机连接。

二、软件

本系统的软件部分基于 LabVIEW 2018 开发,运行于 Windows 11 操作系统。主要使用的工具包为:

  • NI Vision Development Module
  • NI VISA

三、程序

3.1 程序组成及设计思路

本次机器视觉检测系统的软件采用Labview软件实现,主要由机械回原点、图像采集与处理、查找圆心、转换坐标、坐标发送子VI等模块组成。

主要设计思路为:将输入图像先进行预处理,然后视觉检测模块检测出目标工件坐标,运动控制模块根据目标工件坐标计算出运动平台的运动坐标,然后发送给运动平台,延时后进行下一次检测。

图1 全部程序

图1 系统整体程序框图

3.2 机械回原点

摄像头不能在机械原点进行视觉检测,必须移到运动空间内进行检测。因此,使用顺序结构在程序开始设置一机械回原点程序,给运动平台发送一个初始位置,等待其运行到初始位置后再进行视觉检测。

图2 回原点程序

图2 机械回原点程序

3.3 图像采集与处理模块

图3 图像预处理部分

图3 图像预处理程序框图
  1. 通过视觉采集系统获取原始图像数据。
  2. 采用 IMAQ ExtractSingleColorPlane 控件从 RGB 彩色图像中提取单颜色通道。针对检测目标(浅蓝色瓶盖)的光学特性进行优化:
    已知蓝色目标对红色通道的反射率最低,因此工件与背景在红色通道下的对比度最高。通过实际测试验证,蓝、绿色通道提取,工件均显示浅色,而提取红色通道时,工件显示为深黑色。并且红色通道的提取可显著增强目标边缘的区分度,因此选择红色通道实现彩色图像到灰度图像的转换。
  3. 对灰度图像进行阈值分割(0-55经验值)
  4. 使用 IMAQ RemoveParticle 控件去除小连通域

3.4 视觉检测模块

图4 检测工件坐标

图4 工件坐标检测算法实现

初始阶段采用基于灰度图像的圆形检测方法:

  1. 转换为灰度图像
  2. 边缘检测提取轮廓
  3. 计算圆心坐标

实际应用中发现的问题:

  1. 视角影响导致形变
  2. 遮挡导致轮廓粘连

改进方案:

  • 采用连通域分析方法
  • 提取最大连通域重心作为追踪点

初始阶段采用基于灰度图像的圆形检测方法,通过以下步骤实现工件定位:

  1. 将彩色图像转换为灰度图像,增强后应用边缘检测算法提取轮廓特征
  2. 识别圆形轮廓
  3. 计算识别圆的中心坐标作为工件位置
    该方法对于正对摄像头、独立放置的圆柱形工件具有良好的检测效果。但在实际应用中发现该方法存在显著局限性:
  4. 视角影响:当摄像头距离工件较远或视角倾斜时,工件的圆形投影发生形变,导致边缘检测失效。
  5. 遮挡问题:工件相互接触或与其他物体相邻时,轮廓粘连使得圆形特征无法准确提取。

因此,针对上述问题,我们组选择采用连通域方法对图像进行处理。先将灰度图像二值化,再进行形态学操作去除较小连通域(噪声影响)部分,然后分析连通域,将最大连通域的重心作为追踪点处理。使用IMAQ Particle Analysis控件查找连通域,并输出连通域相关信息。输入图像后,控件将输出簇数组,按顺序提取每个连通域的面积进行比较,保留最大面积的连通域的坐标,并与下一个连通域再进行比较,最后输出面积最大连通域的坐标,供运动控制模块处理。

3.5 运动控制模块

运动控制思路:

  • 基于视觉反馈的纯比例控制
  • 高频修正策略
  • 适用于低延迟、高精度场景

坐标有效性检测:

  • 有效坐标:正常发送
  • 无效坐标(0,0):暂停500ms后重试

坐标转换方法:

  1. 以图像中心(860,540)为相对零点
  2. 计算相对坐标
  3. 乘以调整系数(22)
  4. 转换为绝对坐标

运动控制思路为基于视觉反馈的纯比例控制加高频修正,适用于低延迟、高精度场景的简化闭环控制策略。该系统稳态误差较小,外部扰动少,并且目标运动较平缓且无强扰动,无需快速跟踪,因此适用于该控制思路。该思路优点为简单、响应快,适合线性系统。若将来要实现运动快速、扰动强的跟踪,则可以考虑加入PID控制。

当检测到多个目标时,视觉检测模块会输出每个目标的坐标和每个目标的面积。系统优先选择连通域面积最大的目标作为追踪对象,提取其坐标进行后续处理。

若目标检测失败,模块默认输出坐标 (0, 0)。然而,若直接将 (0, 0) 作为有效坐标发送至运动控制模块,系统会误判目标位于图像左上角,导致执行机构持续向该方向运动,直至触发机械限位。为避免此问题,系统对输出坐标进行有效性检测:
有效坐标((x, y) ≠ (0, 0)):正常发送至控制模块,执行追踪动作。
无效坐标((x, y) = (0, 0)):暂停数据发送,延时 500 ms 后重新进行视觉检测,以避免误动作。

运动平台使用的坐标为绝对坐标格式,原点为(0,0)点。而摄像头由运动平台控制运动,导致检测到的圆心数据为相对坐标,我的解决办法为:相对坐标以画面最中心(860,540)(1920,1080的一半)作为零点,用860减去检测到的连通域重心X坐标,用540减去连通域重心Y坐标,得到连通域重心在检测画面中的相对坐标;再用计算之后的相对坐标乘以调整系数再加上运动平台的当前坐标,得到连通域重心的绝对坐标,再将此坐标调用串口发送子VI发送至运动平台。
一次坐标发送后,延时30毫秒,进行下一次目标检测、坐标处理及发送。

图5 追踪控制模块

图5 运动追踪控制算法实现

图6 无效坐标处理

图6 图像识别模块输出(0,0)坐标时的处理逻辑

3.6 串口发送子VI

图7 串口发送子VI

图7 串口通信子VI实现

数据帧结构:

  1. 帧头:0xF301(2字节)
  2. 帧长度:0x0E(1字节)
  3. X坐标(3字节)
  4. Y坐标(3字节)
  5. 分隔区:0x000000(3字节)
  6. 速度值(1字节)
  7. 帧尾:0xF4(1字节)

采用字符串拼接方式生成完整帧,得到一个16进制字符串,再将此16进制字符串转为16进制值。如图所示,For循环的循环次数是字符串除以2的数量,即该16进制字符串包含两位16进制数的数量。循环内,每次从2倍循环次数的位置开始,一次截取2位。截取的字符串输入16进制字符串转换为数值函数,输出即为16进制数值,再将数值转为U8数组,输出即为所需的16进制数值。将得到的数值输入串口发送函数,波特率设置为固定19200,数据位为8位。

四、总结

遇到的问题及解决方案:

  1. 串口通信问题:
    • 需转换16进制字符串为数值
  2. 图像处理问题:
    • 二值化图像需转换为(0,255)格式
  3. 控制参数优化:
    • 比例系数设为22效果最佳

在实验过程中,我也遇到了一些问题,如一开始,我发送串口坐标后并没有反应,后来发现如果直接把16进制字符串输入,程序会直接发送16进制字符串,而不是16进制数值,而接收端必须读取16进制数值格式的指令,因此我们又设计了16进制字符串转16进制数值的程序;二值化图像后,检测连通域的控件输出全部为0,表示找不到连通域。但经过我们的尝试,发现二值化图像乘以255就可以检测。即(0,1)格式二值化图像lavbiew无法处理,需要转换为(0,255)格式二值化图像才可以处理;在比例控制的比例系数方面,我们经过多次尝试,发现比例系数设为22最合适(即摄像头检测到相差一个像素的距离,运动平台运动22个坐标),这样既能减小超调,又能使步长尽量大,尽量防止步长过小导致整台机器出现共振的现象。

posted @ 2025-06-23 00:27  黑猫警长8283  阅读(273)  评论(0)    收藏  举报