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)。务必理解这个旋转的点。

往期文章

2D视觉定位引导系列 1 图解9点标定及仿真

2D视觉定位引导系列 2 图解12点标定及仿真

2D视觉定位引导系列 3 探讨海康 VisionMaster N点标定的内部原理

2D视觉定位引导系列 4 相机运动模式下的标定和仿真

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

完整仿真代码,请加qun索取 (277957302)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值