机器视觉定位入门三步走-第一步

一个中心 两个基本点 四项基本原则

       一个中心,就是旋转中心,旋转中心的确定在一次定位中非常重要(一次定位指的是只进行一次拍照,针对当前点进行运算,多次定位广泛指先拍照进行角度纠偏,纠偏结束后再次拍照进行平移纠偏),旋转中心未校准正确时最常见的表相就是:1在只进行xy纠偏时,数据准确。2当旋转角度较小时,单个轴纠偏数据准确。3当旋转角度较大时两个轴纠偏都不准确。

       两个基本,主要记录xy的方向与比例,我们进行的三点标定、九点标定、十二点标定其主要目的就是为了获得这两个基准:1目标坐标系的xy方向与当前坐标系的夹角(为什么说当前坐标系而不说图像坐标系,可思考一下)。2目标坐标系的实际尺寸与当前坐标系的比例关系。与此同时这两个基本也道明了,坐标系与坐标系之间的标定只能获取均值,而不能因图像不同区域有不同数据与之对应,所以工欲善其事必先利其器,两个坐标系之间的标定在开始前,先要进行畸变矫正。

       四项基本原则,可能有些人不能苟同这个四个基本原则,但是这个四个基本原则可以解决你当前90%的定位、抓取、引导问题。这四个基本原则主旨只有一个,那就是SAME。

       SAME-S原则:surface要一致,不论标定还是实物抓取,我们的相机、镜头、以及被拍照的表面需要关系一致。

       SAME-A原则:apply要一致,所有的数据应该在同样的坐标系环境进行运算。

       SAME-M原则:move要一致,在你标定的时候,做了哪些用于映射的动作,在应用的时候,这些动作也要保持一致,或者将这些值添加到运算当中。

       SAME-E原则:extent要一致,你使用的范围就是你标定的范围,超过这个标定范围,你就应该怀疑它的准确性。

      接下来,对每个关键点进行详细的解释和案例分析

      一个中心,旋转中心是否需要确定,取决于当前定位项目是否有用到旋转中心。常见的同轴、uvw(示教定位点)、振镜、多次拍照纠偏是不用旋转中心的,其他但凡与角度沾边都要有旋转中心的确认。

山不转水转

        一个中心常见案例壹:一次饼干流水线动态抓取装盒的项目,李四使用机器手带真空吸板来抓取饼干,一个固定下相机拍照吸板中的饼干,另一边使用机械纠正的方法将饼干盒固定在平台上。我们每隔2秒就去流水线上盲吸饼干,靠真空压力判断如果吸到饼干就去下相机拍照,获得饼干位置,然后数据整合获取最终纠偏数据引导机械手去放料。接下来我们看怎么实现(准备过程和标定不进行叙述):

机械手动作图:

机器视觉定位入门三步走-第一步_第1张图片

相机捕捉图:

机器视觉定位入门三步走-第一步_第2张图片

理论图:

            机器视觉定位入门三步走-第一步_第3张图片

       理论基础:首先我们将示C点示教为基准位置,我们可以默认为任何饼干只要保证姿态、位置与C相同就可以放置在饼干盒里。此时来料姿态为A与C姿态相差角度为a,如果直接将A平移到C那么就会因为姿态不同而无法放置,而且对姿态进行纠正后,又需要二次平移纠正。于是,我们把A围绕旋转中心O旋转,获得旋转后的的位置B,B与C姿态相同,只进行平移纠偏就可达到目的,我们只需要发送d2和夹角a即可。

       实际操作:先将饼干放在饼干盒子,机械手将饼干吸住然后拿出来,移动到下相机上方。我们先进行一次定义,将机械手吸取饼干的位置视为机械手纠偏基准位(Xrb,Yrb)-RobotBase,将机械手在下相机上方的拍照位视为拍照位(Xrc,Yrc)-RobotCamera。一切就绪,相机拍照获得当前的饼干坐标(Xcb,Ycb,Rcb)-CookieBase,以及当前的旋转中心(Xc,Yc)-Center。此时我们的示教就已经结束,开始实际测试。流水线来料后,机械手盲吸移动到(Xrb,Yrb)位置拍照得到当前饼干坐标(Xcc,Ycc,Rcc)-CookieCurrent。开始计算:

       首先我们获取角度(弧度)偏差:

       //统一目标,以基准为目标进行移动,由基准值减去当前值。

       //饼干角度偏差

       OffsetR=Rcb-Rcc//CookieBase-CookieCurrent

       //首先将饼干的姿态与饼干盒的姿态纠正到统一姿态,实际动作为饼干围绕机械手旋转中心旋转OffsetR

       RotationX=(Xcc-Xc)*CosOffsetR-(Ycc-Yc)*SinOffstR+Xc;

       RotationY=(Xcc-Xc)*SinOffsetR+(Ycc-Yc)*CosOffstR+Yc;

       //现在姿态已经相同了,就剩平移了,先将饼干移动到示教基准位(Xcb,Ycb)

       OffsetX =Xcb- RotationX//Cookie- Rotation

       OffsetY =Ycb- RotationY//Cookie- Rotation

       所以最终的发送值为(OffsetX,OffsetY,OffsetR)。

       总结:旋转中心不变,目标位置不变,来料在变,夹取后纠偏

        好的问题解决,支付宝到账五百万。

不破不立

       一个中心常见案例贰:还是这项目,经过一段时间使用后发现出现了许多碎饼干,主观臆断的认为是往饼干盒里放的时候擦到饼干盒碎了,客户说要解决啊,于是李四又添加了一个相机,来定位饼干盒。那么开始示教首先使用机器手带真空吸板来抓取饼干,一个固定下相机拍照吸板中的饼干,一个固定上相机来拍照饼干盒。我们每隔2秒就去流水线上盲吸饼干,靠真空压力判断如果吸到饼干就去下相机拍照,获得饼干位置,然后上相机拍照饼干盒获得位置,最后将数据整合获取最终纠偏数据引导机械手去放料。接下来我们看怎么实现(准备过程和标定不进行叙述)。

       机械手动作图:

机器视觉定位入门三步走-第一步_第4张图片

       相机捕捉图:

机器视觉定位入门三步走-第一步_第5张图片

机器视觉定位入门三步走-第一步_第6张图片

       理论图:

机器视觉定位入门三步走-第一步_第7张图片

       理论基础:将B视为饼干盒的示教基准位置,因为饼干从饼干盒搬运到定位相机时,只进行了平移,且后续纠偏时这段距离为固定,所以也可以将B点视为饼干的示教基准位置。当前饼干来料A和饼干盒D首要任务是先保证AD的姿态相同,所以先将D围绕旋转中心旋转到C位置,然后进行平移纠偏d2+d3。注意此时推导是逆向所有数据要区别正负。

       实际操作:先将饼干放在饼干盒子,机械手将饼干吸住然后拿出来,移动到下相机上方。此时我们先进行一次定义,将机械手吸取饼干的位置视为机械手纠偏基准位(Xrb,Yrb)-RobotBase,将机械手在下相机上方的拍照位视为拍照位(Xrc,Yrc)-RobotCamera。一切就绪,两个相机拍照获得当前的饼干坐标(Xcb,Ycb,Rcb)-CookieBase,获得饼干盒坐标(Xbb,Ybb,Rbb)-BoxBase以及当前的旋转中心(Xc,Yc)-Center。此时我们的示教就已经结束,开始实际测试。流水线来料后,机械手盲吸移动到(Xrb,Yrb)位置拍照得到当前饼干坐标(Xcc,Ycc,Rcc)-CookieCurrent和饼干盒坐标(Xbc,Ybc,Rbc)-BoxCurrent。开始计算:

       首先我们获取角度(弧度)偏差:

       //统一目标,以基准为目标进行移动,由基准值减去当前值

       //确定纠偏机构,因为饼干合载台不具备纠偏功能,所以所有纠偏都由机械手进行。

       //饼干盒偏差

       OffsetRb=Rbb-Rbc;// BoxBase-BoxCurrent

       OffsetXb=Xbb-Xbc;//

       OffsetYb=Ybb-Ybc;//

       //饼干角度偏差

       OffsetRc=Rcb-Rcc//CookieBase-CookieCurrent

       //最终的角度偏差

       OffsetR=OffsetRb+Offsetc

       //首先将饼干的姿态与饼干盒的姿态纠正到统一姿态,实际动作为饼干围绕机械手旋转中心旋转OffsetR

       RotationX=(Xcc-Xc)*CosOffsetR-(Ycc-Yc)*SinOffstR+Xc;

       RotationY=(Xcc-Xc)*SinOffsetR+(Ycc-Yc)*CosOffstR+Yc;

       //现在姿态已经相同了,就剩平移了,先将饼干移动到示教基准位(Xcb,Ycb)

       OffsetXc=Xcb- RotationX//Cookie- Rotation

       OffsetYc=Ycb- RotationY//Cookie- Rotation

        //此时,饼干如果移动到机械手纠偏基准位,再平移(OffsetXc,OffsetYc)会移动到饼干盒的基准位(Xbb,Ybb),那么我再进行一次平移(OffsetXb, OffsetYb)就可以将饼干移动到饼干盒正上方

        OffsetX= OffsetXc+ OffsetXb

         OffsetY= OffsetYc+ OffsetYb

         所以最终的发送值为(OffsetX,OffsetY,OffsetR)。

         总结:旋转中心不变,目标位置在变,来料位置在变,夹取后纠偏

         谢谢,老客户收您一百万。

革命就是不断的提升

        一个中心常见案例叁:又是经过一段时间依旧是有很多碎饼干,客户不开心了,李四进行跟线观察后发现盲吸饼干的时候吸板没有完全覆盖饼干,所以饼干就被压碎了,于是将下方拍照饼干的相机移动到流水线上拍照饼干。

机械手动作图:

机器视觉定位入门三步走-第一步_第8张图片

       相机捕捉图:

机器视觉定位入门三步走-第一步_第9张图片

       理论图:

机器视觉定位入门三步走-第一步_第10张图片

       理论基础:将D视为饼干盒的示教基准位置,因为饼干从饼干盒搬运到定位相机时,只进行了平移,且后续纠偏时这段距离为固定,所以也可以将D点视为饼干的示教基准位置。当前饼干来料A和饼干盒F,因为是抓取前纠偏,所以要将机械手平移到对应位置进行抓取饼干。首先将饼干盒F移动到基准位置得到E,此时E点是已知点,跟随吸嘴围绕旋转中心O进行旋转得到C,其中B为D旋转后的辅助参考线 ,此时C与A姿态相同,只进行平移即可,那么最终的平移就是d1+d3。这次纠偏的主要理论就是用已知点获取未知点位置,然后再用已知点走过的路径取反得到未知点路径。

       实际操作:开始示教,先将饼干放在饼干盒子,机械手将饼干吸住然后拿出来,放置在流水线上。此时我们又要开始一次愉快的定义,将机械手吸取饼干的位置视为机械手纠偏基准位(Xrb,Yrb)-RobotBase,将机械手在放在流水线的位置视为抓取基准位(Xlb,Ylb)-LineBase。一切就绪,两个相机拍照获得当前的饼干坐标(Xcb,Ycb,Rcb)-CookieBase,获得饼干盒坐标(Xbb,Ybb,Rbb)-BoxBase以及当前的旋转中心(Xc,Yc)-Center。此时我们的示教就已经结束,开始实际测试。流水线来料后,机械手盲吸移动到(Xrb,Yrb)位置拍照得到当前饼干坐标(Xcc,Ycc,Rcc)-CookieCurrent和饼干盒坐标(Xbc,Ybc,Rbc)-BoxCurrent。

首先我们获取角度(弧度)偏差:

       //统一目标,以基准为目标进行移动,由基准值减去当前值

       //确定纠偏机构,因为饼干合载台不具备纠偏功能,所以所有纠偏都由机械手进行。

       //饼干盒偏差

       OffsetRb=Rbb-Rbc;// BoxBase-BoxCurrent

       OffsetXb=Xbb-Xbc;//

       OffsetYb=Ybb-Ybc;//

       //饼干角度偏差

       OffsetRc=Rcb-Rcc//CookieBase-CookieCurrent

       //最终的角度偏差

       OffsetR=OffsetRb+Offsetc

       //首先将饼干的姿态与饼干盒的姿态纠正到统一姿态,实际动作为饼干围绕机械手旋转中心旋转OffsetR

       RotationX=(Xcc-Xc)*CosOffsetR-(Ycc-Yc)*SinOffstR+Xc;

       RotationY=(Xcc-Xc)*SinOffsetR+(Ycc-Yc)*CosOffstR+Yc;

       //现在姿态已经相同了,就剩平移了,先将饼干移动到示教基准位(Xcb,Ycb)

       OffsetXc=Xcb- RotationX//Cookie- Rotation

       OffsetYc=Ycb- RotationY//Cookie- Rotation

       //此时,饼干如果移动到机械手纠偏基准位,再平移(OffsetXc,OffsetYc)会移动到饼干盒的基准位(Xbb,Ybb),那么我再进行一次平移(OffsetXb, OffsetYb)就可以将饼干移动到饼干盒正上方

        OffsetX= OffsetXc+ OffsetXb

        OffsetY= OffsetYc+ OffsetYb

        所以最终的发送值为(OffsetX,OffsetY,OffsetR)。

        总结:旋转中心不变,来料位置变,目标位置变,夹取前纠偏

        叮咚,私房钱银行卡到账两万元。

能力越大责任越大

         一个中心常见案例肆:机台发往现场,因为相机安装位置空间干涉并且光源频闪影响操作工工作。于是方案组重新评估方案。

        方案组:为什么不把相机装在机械手上呢?

        李四:我建议你把相机装在吸板中间和吸板中心同轴,做出那种打哪指哪的效果,不仅如此而且现场上手快,交接快、工期短。

        方案组:那就是要吸板中心开个孔咯?

        李四:是的。

        机构:你在教我做事?

        李四:那就装在吸板旁边吧,伸出来个悬臂就好了。

        方案组:准奏!!

        李四:不还是同轴么,把你们拿捏的稳稳的。

        实际标定时,出现问题。如何标定旋转中心呢?夹料移动吧精度不够,拿针扎点吧没有机构,对面拍照吧需要标定板。李四淡淡的讲了一句:众工,格局小了,机械手还按照原来走十二个点,标不出来算我输。

        方案组:怎么说?

        李四脱了衣裳,露出了身上小猪佩奇的纹身躺在地上:上来自己动。

        方案组:不合适吧。

        李四:我说你操作相机吧。

        方案组:你操作才像。

李四:你看你在A点拍照,然后旋转90度在B点拍照,这时候,我们是在大地坐标系观察,如果你是相机,在A点观察效果就像我们在大地坐标系一样,在B点观察就是相对坐标系的效果。相机距离旋转中心的位置、佩奇距离旋转中心的距离都没变,只是角度变了,这难道不算旋转了么,它们不一直在自己的圆上么?

                机器视觉定位入门三步走-第一步_第11张图片

        宰哥宰吾的示教又开始了(略,同轴不涉及旋转中心问题,只要将抓取点和图像定位点统一即可,详细操作内容成年人不宜观看)

        现场技术:请问一下如果是相机在中间,吸板在外面呢?又或者相机和吸板分布在旋转中心两侧呢?

        李四:一个能问的都没有,这么简单的问题怎么好意思问的出嘴,既然你诚心诚意的发问了,那我就大发慈悲地告诉你。为了维护世界和平,我自己提升难度,将相机和吸板放在旋转中心两边,标定一样样的,算法有亿点点变化而已(相机在中心只是在大千世界存在位置的一种特例)。

        前提:将拍照位获得的旋转中心视为原点时加上当前拍照位置坐标即为实际坐标,所有坐标都以实际坐标系进行运算,角度可以不用转换

        基础:旋转中心才是表示物理坐标的代表位置。

相机捕捉图:

机器视觉定位入门三步走-第一步_第12张图片

       理论图:

机器视觉定位入门三步走-第一步_第13张图片

       理论基础:将D视为饼干盒的示教基准位置,因为饼干从饼干盒搬运到定位相机时,只进行了平移,且后续纠偏时这段距离为固定,所以也可以将D点视为饼干的示教基准位置。当前饼干来料A和饼干盒F,因为是抓取前纠偏,所以要将机械手平移到对应位置进行抓取饼干。首先将饼干盒F移动到基准位置得到E,此时E点是已知点,跟随吸嘴围绕旋转中心O进行旋转得到C,其中B为D旋转后的辅助参考线 ,此时C与A姿态相同,只进行平移即可,那么最终的平移就是d1+d3。

        实际操作:示教,先将饼干放在饼干盒子,机械手将饼干吸住然后拿出来,放置在流水线上。违背快乐的定义即将开始:将机械手吸取饼干的位置视为机械手纠偏基准位(Xrb,Yrb)-RobotBase,将机械手在放在流水线的位置视为抓取基准位(Xlb,Ylb)-LineBase,以及拍照位置(Xct,Yct)-CamearTrigger。机械手就绪,两个相机拍照获得当前的饼干坐标(Xcb,Ycb,Rcb)-CookieBase(图像坐标转为是十二点坐标系坐标减去旋转中心坐标加拍照位置),获得饼干盒坐标(Xbb,Ybb,Rbb)-BoxBase(仅仅为十二点坐标系坐标)以及当前的旋转中心(Xc,Yc)-Center(实际拍照位置坐标)。示教结束,翠花,上饼干。流水线来料后,机械手移动到(Xct,Yct)位置拍照得到当前饼干坐标(Xcc,Ycc,Rcc)-CookieCurrent和饼干盒坐标(Xbc,Ybc,Rbc)-BoxCurrent。开始计算:

       首先我们获取角度(弧度)偏差:

       //统一目标,以基准为目标进行移动,由基准值减去当前值

       //确定纠偏机构,因为饼干合载台不具备纠偏功能,所以所有纠偏都由机械手进行。

       //饼干盒偏差

       OffsetRb=Rbb-Rbc;// BoxBase-BoxCurrent

       OffsetXb=Xbb-Xbc;//

       OffsetYb=Ybb-Ybc;//

       //饼干角度偏差

       OffsetRc=Rcb-Rcc//CookieBase-CookieCurrent

       //最终的角度偏差

       OffsetR=OffsetRb+Offsetc

       //重点来了,此时已知最终饼干放置位置,反求旋转中心位置。那么夹取点为中心,机械手旋转中心围绕该点旋转。

       RotationX=(Xc-Xcb)*CosOffsetR-(Yc-Ycb)*SinOffstR+Xcb;

       RotationY=(Xc-Xcb)*SinOffsetR+(Yc-Ycb)*CosOffstR+Ycb;

       //姿态相同进行平移,获取最终数据

      OffsetX= (RotationX-Xc)+(Xcb-Xcc)+OffsetXb;

      OffsetY= (RotationY-Yc)+(Ycb-Ycc)+OffsetYb;

      所以最终的发送值为(OffsetX,OffsetY,OffsetR)。

        方案组:你相机装在手上和单独装在柱子上算法没区别啊。

        李四:关键是你问了。

        方案组:是不是用一台相机也可以?

        李四:恭喜你已经学会抢答了。

        总结:悬臂相机旁轴拍照,旋转中心标定时的相对坐标系理解

        云南菌子吃完躺班班

你可能感兴趣的:(定位引导抓取,计算机视觉)