最近在做个案子。耽误了更新。
今天分享2个固定纠偏案例。一个是基础,一个是扩展。都是真实案例。
典型案例1:
1,项目需求。贴膜定位。机器人盲取一片膜,然后到侧相机拍照位置拍照,再去膜位置贴膜。(由于空间限制,拍照位置,与贴膜位置,机械轴要转90度,如下图示意)
2,首先要明确,相机纠正的是盲取来料的误差。保证不管盲取来料的如何,都能让机器人把膜贴到同一位置。(注意,是保证贴到同一位置,至于贴到哪里,相机是不管的)
3,做动静态,
静态:让机器人,取一片料。来到拍照位置,每个1s 拍照,获取mark点坐标,并记录。得到32组数据,取极差作为静态误差。
动态:让机器人,取一片料。设置2个位置,一个是拍照位置,一个是预贴合位置。按照正常的工作速度,往复运动,每到拍照位置,拍一张照,获取mark点坐标,并记录。得到32组数据,取极差作为动态误差。
4,标定。做数据。
取一片料,做9点标定,加旋转标定。得到转换矩阵 以及 旋转中心。这里要注意,标定时候使用的是xz轴,工作的时候使用的是yz轴。默认xy 轴比例一致。
注意,虽然相机模式,有相机静止下相机的选项。但我还是选择上相机位。因为上相机位的仿射变换,是正常的仿射变换。下相机位,是xy取反了。这个应用场景xy确实要取反,但是我不需要自动帮我取反,我自己取值的时候,可以取反。比如偏移-1,我可以写成偏移1。 我自己取反的目的是,我要清晰可控。VM只需要提供一个正常的求解仿射变换方法就可以。我认为多出来的几种模式,完全是没有必要,反而容易搞错。我不管怎么标定,都只用相机静止上相机机位。
这里取反指的是,x或y轴,标定的时候,实际是反向移动(-1),如图三,我填的偏移值是正向的(1)。
求旋转中心:
通过途中圈的方法,可以让输出变成数组。直接添加到圆拟合。
这里计算的是图像坐标系下的旋转中心。使用的时候,也要在图像坐标下使用。计算旋转中心是让机械轴在拍照位置,只旋转u轴,相机取图,获得mark点,拟合出圆心。角度跨度越大,拟合的圆心,越精准。
以上就是标定过程。
做数据:
标定后,让机械轴,走16宫格,再用相机拍照,对比计算坐标,与实际坐标,计算极差。
使用计算圆形的图片,计算以旋转中心旋转到固定角度,mark点的新坐标,理论这组mark点应该在同一坐标,因为是在同一位置拍照。计算出极差。
4。使用。
如图所示,匹配获得mark点坐标(x,y),然后,角度取反(具体要根据现场旋转方向决定是否要取反,通常逆时针为正,就要取反)计算,旋转后的mark点新坐标(xnew,ynew)。再用(xnew,ynew)代入标定转换,得到 实际的 X,Y 坐标发送给机械手。(这个项目中,x对应的是y, y对应的是z)
以上就是该项目的全部。
扩展案例2:
1,项目需求,机器人盲取物料,下相机拍照,然后给治具上料。
扩展性:有5个吸头,吸头还分,正向,反向取料。治具有20个穴位,每个吸头可以放任意穴位,10个正向穴位,10个反向穴位。而且要给2个轨道的治具上料。左轨右轨不可能完全平行。
以上就是项目的扩展性。
分析:原理与案例1 一模一样。不一样的是,你要考虑,多吸头,正反向,多穴位,左右轨。
这就回到我之前的帖子。“浅谈 VisionMaster 中的流程控制”
这个案例,复杂度不在定位原理本身。而是在流程控制本身。这个案子,就需要在VM的框架下,编写对应的流程控制。
该案子,标定,只了5个吸嘴正面标定,对于反向。只是用反相与正向做一个offset补偿。
使用的时候,要分好,正向还是反相。
做示教位的时候,要分哪个吸嘴,对于哪个穴位。
VM做逻辑分支,不方便做的时候,可以考虑用脚本。本案例,就用到比较多的脚本,里面都是做逻辑判断。
以上就是第二个案例。
2个项目,用到的工具,有:图像采集,图像保存,数据接收,数据发送,数据保存,分支模块,脚本,模板匹配,N点标定,圆拟合,旋转计算,标定转换。 唯一属于图像处理的,只有模板匹配。剩下的就一个N点标定,圆拟合,旋转计算,标定转换 属于纯计算。剩下的 全部是流程逻辑控制。
PS
固定纠偏案子,微调offset 统一添加到最后,就是标定转换后,加上各自的offset 作为点位微调。
callback: