2D视觉定位引导系列 7 先取后拍原理及动画模拟仿真

往期回顾:

上篇文章 主要讲的先拍后抓的的定位引导模式,用来引导机械手取物料。
今天主要讲解先先取后拍的方式,下相机拍照,引导机器人去固定点放物料。
机械手抓取物料后移动到下相机拍照位置拍照,计算放料误差,然后去放料点放置物料。
先抓后拍和先拍后抓 区别不大,前面的处理方式基本一致,在计算偏移量的时候有少许区别。
本篇文章贴心的做了个动画效果,方便大家理解。

仿真部件

和上篇一样,先来认识下各个部件(和上篇文章基本一致)
仿真部件的认识。
  1. 蓝色矩形框表示相机
  2. 绿色矩形表示示教的标准模板物料,例如 手机屏幕
  3. 红色矩形表示实际来料的情况,相对与模板已经发生了角度和位置偏移。
  4. 粉红色的表示机械手 带一个 矩形吸盘,其中圆形表示法兰盘。这个可以看看以前几期文章
                                             

5.目标放料位置:

                                   

应用场景

6轴 机械手,4轴scara机器人,龙门机械手。
机械手 丛上游取料 移动到下相机上方,相机拍照,软件计算放片位置,机械手放片。

引导定位流程

这种使用场景的定位引导分三步走
  1. 示教 做 基准
  2. 实际来料 获取特征坐标和角度
  3. 偏差计算
其中1,2 2步,基本所有定位引导都基本一样,只是第3步有点区别。1,2 简单复制以前的,第3步展开讲。
1.示教    记住基准,以便后面来料比较计算
示教主要确定来料的基准位置,以后每次实际来料和基准比较,计算出偏差,反向补偿到放片位置上,确保能准确放置。
示教要记住几组关键数据。
第一组:模板上特征点(可能是十字Mark等特征Mark图案,也可能是线的交点)的坐标和角度,本例取蓝色矩形A点作为特征点PA 记为(Mode_X,Mode_Y),取AB线段连接的角度为特征角度记为 Mode_Phi,如下图
第二组:示教的机械坐标,就是拍照位置的机械坐标 即为(TeachPos_X,TeachPos_Y).这里大家应该思考下,为什么 记住示教位置的机械坐标。
第三组:本例不用

1.示教

*这里演示做模板的过程,正常的模板图片有个模板点,一般是十字Mark 或者 边线交点。还有模板角度,取一个边能反映模板的角度变化角度就行。
*这里步不去求边线交点了,直接拿上面的(mode_row[0],mode_col[0])作为模板点。第一点和第二点连线角度作为模板角度,计算如下

*模拟取模板点的像素坐标
Mode_X:=mode_row[0]-cam_origin_row
Mode_Y:=mode_col[0]-cam_origin_col

*模拟取模板角度
angle_lx(mode_row[0],mode_col[0],mode_row[1],mode_col[1],Mode_Phi)

*模拟取示教物理坐标
TeachPos_X:=3000
TeachPos_Y:=5000
一般示教流程;
现场的示教流程一般是丛后往前示教。物料先放到放料位置放好,机械手过去将料吸起来,然后移动移动到拍照位置(拍照位置定好以后,以后每次都是这个位置拍照),记住此时的示教位置为(TeachPos_X,TeachPos_Y)。相机拍照,拍照后,计算模板的特征点和角度,记下来(Mode_X,Mode_Y) 角度Mode_Phi。

2.来料拍照

计算来料的特征点和角度 如上图红框的C点位来料特征点(Current_X,Current_Y),直线CD的角度 记为Current_Phi。如上图
特征点的选取一般选2条边的交点。
*假设来料绕左上顶点旋转5°,平移(40,50)
*定义实际来料,区域,通过上面坐标平移旋转得到,分2步,第一步饶第一点(mode_row[0], mode_col[0])旋转5°,第二步,平移(40,50)
hom_mat2d_identity(HomMat2DIdentity)
hom_mat2d_rotate(HomMat2DIdentity, rad(5), mode_row[0], mode_col[0], HomMat2DRotate)
hom_mat2d_translate(HomMat2DRotate, 40, 50, HomMat2DTranslate1)
*模拟来料旋转和平移
affine_trans_pixel(HomMat2DTranslate1,mode_row,mode_col,RowTrans, ColTrans)
gen_region_polygon(ProductRegion, RowTrans, ColTrans)
dev_set_color ('red')
dev_display(ProductRegion)

*模拟取来料的特征点坐标,这里为了简单,直接获取了,实际工作中要通过模板匹配或者模板匹配加边线交点来获取坐标
Current_X:=RowTrans[0]-cam_origin_row
Current_Y:=ColTrans[0]-cam_origin_col
angle_lx(RowTrans[0],ColTrans[0],RowTrans[1],ColTrans[1],Current_Phi)

3.计算偏移量

此种模式可以这样考虑,拍照位置拍完,计算出角度偏移以后,先将物料角度调整到和基准一致,然后再看看来料的那个特征点被旋转到哪里了,计算新的特征点坐标和基准偏差,反向补偿到放片位置。
如下图:
A点: 模板点,示教时候获得
B点: 实际来料特征点 实际拍照 经过边线交点计算得到
C点: 是机械手旋转一定角度得到,这个可以通过绕点旋转计算公式可得到。
计算代码
*模板特征点
affine_trans_point_2d(HomMat2D1,Mode_X,Mode_Y,Wmodex,Wmodey)
*来料实际特征点
affine_trans_point_2d(HomMat2D1,Current_X,Current_Y,Wcurx,Wcury)
*
DeltaPhi:=Mode_Phi-Current_Phi

newModeX:=(Wcurx-TeachPos_X)*cos(DeltaPhi)-(Wcury-TeachPos_Y)*sin(DeltaPhi)+TeachPos_X
newModeY:=(Wcurx-TeachPos_X)*sin(DeltaPhi)+(Wcury-TeachPos_Y)*cos(DeltaPhi)+TeachPos_Y

*计算最终位置偏移
Dx:=newModeX-Wmodex
Dy:=newModeY-Wmodey

 

*放料位置确定: 原始放料位置 (Wdestx,Wdesty) 现在的放料位置为(Wdestx-Dx,Wdesty-Dy)
角度DeltaPhi。在角度数据发送给机械手之前可能要做些处理,有些机械手不能接受角度数据,只能接受位置数据(如脉冲数)。dphi需要乘以系数,这个系数需要标定或    者设备提供
实际使用中可能出现最终发送的角度要取反的问题,需要现场灵活应对。

4.验证

1. 如下图,红色是来料,黄色是红色先旋转DeltaPhi角度,将来料角度调整到和基准模板一致,计算此时基准模板特征点与来料旋转后特征点XY的偏移。
2.上面计算偏移反向补偿到放片位置,能看到黄色框框刚好能移入目标框。

总结:

1.先拍后取,和先取后拍的处理方式差别不是很大。区别主要是再纠偏计算。先拍后取 旋转的是基准模板(这个是想象的旋转,实际不旋转)
先取后拍 旋转的是实际来料,这个容易理解。
2.旋转的时候都是绕着固定机械点旋转的。可以认为绕那个点旋转就设定那个点为(TeachPos_X,TeachPos_Y)。务必理解这个旋转的点。

暂无评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注