C#编写运动控制:自定义回原(五) 验证自定义回原精度,并提出解决方案

勇哥注:
设备的动作可以是plc,或者是运动控制来完成。
后者是一台工业电脑配上运动板卡来完成。
在有些工厂里,可能由客户喜好更喜欢用运动控制(比如富士康的苹果客户,
因为PC机和工厂的生产系统进行通讯要更方便一些,并且对视觉的配合要更好些)。
基于IPC和windows的运动控制,可靠性是没有plc好的。
因为plc相当于是一个专用小系统,并且是实时扫描的。可靠性是相当高。
但是PC有自己的优势,比如复杂和精密的视觉处理的设备都是离不开运动控制的,
因为运动卡能提供更复杂的运动能力和精度保证,plc只能做一些简单的ptp运动。


系列贴子导航:


C#编写运动控制:自定义回原(五) 验证自定义回原精度,并提出解决方案

C#编写运动控制:自定义回原(四) 完善回原功能

C#编写运动控制:自定义回原(三) 回原时为什么会出现运动指令无效跳过的现象

C#编写运动控制:自定义回原(二) 限位做为回原、限位反找回原

C#编写运动控制:自定义回原(一) 5种轴位置下的回原


C#编写运动控制:自定义回原(五) 验证回原功能


自定义回原是靠C#代码循环扫描感应器来回原的。

而C#的线程调度都是看操作系统自由发挥,因为windows是抢占式多任务系统。

因此你无法保证1毫秒准时去做什么事情。

一般的订时器或者Thread.Sleep()都无法保证上面的要求。

所以,你回原的时候,可能停止的位置是飘乎不定的。至于这种误差是否接受,要看你的设备的精度要求了。


勇哥的测试方式是用相机拍,多次回原后,我们看图片的同一个标志位置,看其坐标的变化。

为了方便测试,我挂了一个普通的高清摄像头,而非工业级相机。

因此下面只是说明方法,测试精度有限。


image.png


测试结果

行方向上三次回原结果最大不超过0.5个像素。

因为标定板两个圆的圆心距离是10mm,所以每个像素是0.1434mm

所以行方向上的回原误差约7条,小于0.1mm

image.png


回原不准的若干原因,全部是经验:

 1.  对于距离比较长的轴,如果是一次回原,则长距离回原跟短距离回原位置不同

 2.  回原后发现脉冲位置可能不是0,这个往往跟在ui线程中调用回原方法有关系,属于程序编写考虑不周全。

 3.  回原是高速还是低速回原,对精度有影响

 4.  原点感应器是有响应速度的指标的

 

对于回原精度的改进意见:

  1.   做两次回原,第一次高速回原,第二次在原点上慢速度回原

  2.   使用回原+EZ回原,EZ即Z相信号。

     Z相是零位信号,编码器旋转一周输出一个脉冲,一般在机械回零时应用。

        有关Z相信号请参见勇哥写的另一个贴子:http://47.98.154.65/?id=1918

   3.  每一根轴都必须先做重复性测试,排除机械问题。

  


本文视频讲解:



视频中的halcon测试代码:

read_image (T1, 'D:/org3.bmp')
gen_rectangle1 (ROI_0, 416.042, 499.542, 546.212, 590.855)

reduce_domain(T1, ROI_0, ImageReduced)
rgb1_to_gray(ImageReduced, GrayImage)
threshold (GrayImage, Regions, 0, 119)
connection(Regions, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, \
             ['area','width','height'], 'and', [110,8,8], [125,15,15])
count_obj(SelectedRegions, Number)
area_center(SelectedRegions, Area, Row, Column)
//517.873,559.966
//518.0,559.916
//517.916,560
//0.5, 0.2
gen_rectangle1 (ROI_0, 259.332, 470.816, 371.881, 520.446)
reduce_domain(T1, ROI_0, ImageReduced1)
rgb1_to_gray(ImageReduced1, GrayImage1)
threshold (GrayImage1, Regions1, 0, 81)
connection(Regions1, ConnectedRegions1)
area_center(ConnectedRegions1, Area1, Row1, Column1)
row2:=Row1[1]-Row1[0]
//69.7
res:=10/69.7



--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864