The value of Zmotion is to bring customers more success!
在机器视觉项目中,我们经常采用停拍的拍照方式即检测样品运动到指定拍照位置时样品停止运动,此时触发相机拍照,对样品图像进行处理后输出检测结果,接着执行下一步动作。
这种拍照模式的实现方式和运动控制比较简单,但是生产效率较低,无法满足高速度的检测项目要求。因此需要使用视觉飞拍的功能,即检测样品运动到拍照位置不停止运行,此时相机完成瞬时拍照后样品继续沿着设定的轨迹运行。
本次课程我们将与大家一起分享机器视觉运动控制一体机实现飞拍定位的功能。
教学视频可点击→机器视觉运动控制一体机应用例程(五)飞拍定位查看。
一 检测原理
(一)原理
飞拍就是使用硬件比较输出或精准输出端口在极短时间内触发相机拍照,而被测物品在拍照过程中仍处于运动状态,与此同时被测物品通过图像处理软件计算出其位置的偏移量,执行机构获取视觉输出的偏移量后再做出相应的动作指令。
视觉飞拍功能不仅需要有硬件比较输出或精准输出功能做高速精准触发控制,而且要求相机的拍照响应时间快、曝光时间短、帧率高,软件处理时间要短。
(二)机器视觉飞拍与停拍对比
1.视觉停拍:传统的视觉定位采取停拍的方式,即工件按照既定的轨迹运动,当运行到拍照点时,运动轴速度减为0停下来进行拍照、图像采集、运算处理、纠偏,待视觉系统处理完成后,继续完成接下来的轨迹运动,v-t图如下。
2. 视觉飞拍:针对传统的视觉停拍,而造成生产效率不够高的问题。在某些生产效率高的应用场合,使用到视觉飞拍功能的很多。即机构按照既定的轨迹运动,当运行到拍照位时,运动轴不停止运动,瞬间完成高速抓拍的功能。
整个过程中移动机构不停止,从而节省机构运行时间,满足效率,并且能保证运行精度。
a.在精度保证的同时,可以不减速,v-t图如下。
b.在精度不足的情况下,可以略微降速,分段运行,但速度不降为0,v-t图如下。
★正运动技术VPLC机器视觉运动控制一体机是基于FPGA的硬件比较输出,从而实现驱动器到达拍照位置,直到相机完成触发,整个精度可以控制在: 脉冲输出方式的最小误差1个脉冲,总线控制方式的最小误差1us以内。
当电机带编码器或者光栅尺反馈时,硬件比较输出功能自动使用反馈位置MPOS来进行触发,当不带反馈时,此功能自动使用发送位置DPOS的比较触发;根据不同的驱动器差异性效果,也可以使用MOVEOP_DELAY指令来调整IO输出的准确时间。
多种实现和调整方式,极大确保了VPLC机器视觉运动控制一体机在高速运动状态下实现机器视觉飞拍时的精度。
二 软件实现
(一)准备
(二)实例演示
1.打开ZDevelop软件:点击“文件”→“打开项目”→选择“基于形状匹配的视觉定位”项目。
2.修改设计HMI界面。
3.在global_variable.bas文件中增加定义飞拍位置使用到的全局变量。
global dim Fly_Pos '飞拍位置
4.在InitLocator.bas文件中初始化飞拍运动的轴参数。
'初始化轴参数
BASE(0) '选择轴0
UNITS=100 '脉冲当量设置为100
DPOS=0 '轴位置
SPEED=20 '运动速度
ACCEL=1000 '加速度
DECEL=1000 '减速度
5.关联界面元件变量。
6.在camera.bas修改【单次采集】按钮按下时响应的函数,并修改动作函数名的格式文本。
GLOBAL SUB btn_grab()
'如果d_use_imgfile=1时使用读取本地图片功能,使用控制器时请将此部分代码注释掉
'if (d_use_imgfile=1) then
'if(d_index=3) then
'd_index=0
'endif
'File_Name="\3\"+TOSTR(d_index,1,0)+".bmp" '...\flash\3\目录下的图片所在的路径名称
'ZV_IMGREAD(grabImg,File_Name,0)
'ZV_LATCH(grabImg, 0)
'd_index=d_index+1
'return
'endif
''读取本地图片功能结束
'如果相机数量为0,提示先扫描相机,并退出子函数不往下执行
if cam_num = 0 then
?"请先扫描相机!"
return
endif
if cam_mode=0 then '如果选择软件触发模式
CAM_STOP()
CAM_START(0)
CAM_SETMODE(cam_mode) '设置软件触发模式
CAM_SETPARAM("TriggerSoftware", 0) '软件发送触发指令
elseif cam_mode=1 THEN '如果选择飞拍模式
CAM_STOP()
CAM_START(0)
CAM_SETMODE(cam_mode) '设置硬触发模式
MOVE_OP2 (0,ON,1) '将输出口0输出为on状态,1ms后再将状态翻转
endif
CAM_GET(grabImg, 0) '获取一帧图像存放到grabImg变量中
ZV_LATCH(grabImg, 0) '将图像显示到锁存通道0中
END SUB
7.在main.bas添加【飞拍测试】按钮按下时响应的函数,并关联动作函数名。
'主界面按下飞拍测试按钮时响应的函数
GLOBAL SUB Test()
if cam_mode=0 then '如果当前选择软触发模式
CAM_STOP()
CAM_START(0)
CAM_SETMODE(1) '设置硬触发模式
endif
dpos(0)=0 '位置清零
MOVE(Fly_Pos) '运动飞拍距离
MOVE_OP2(0,ON,1) '将输出口0输出为on状态,1ms后再将状态翻转
MOVE(100) '直线运动
CAM_GET(grabImg, 0) '获取一帧图像存放到grabImg变量中
ZV_LATCH(grabImg, 0) '将图像显示到锁存通道0中
btn_loc_test() '执行测试按钮响应函数进行匹配定位检测
END SUB
8.查看运行效果:将控制器接入电源,使用网线将控制器与PC连接,将相机的触发线接入控制器输出口out0→相机通电并接入控制器→连接控制器,并将项目下载到控制器→运行程序,测试程序效果。
(三)效果演示
本次,正运动技术机器视觉运动控制一体机应用例程(五)-飞拍定位,就分享到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。
本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。