机器人与视觉,基于BaseX坐标系的运动偏移

基于可移动坐标系的机器人坐标偏移
在生产过程中,当需要建造多个坐标系的时候,我们可以采用基于坐标系偏移,可以实现使用机器人坐标系直接完成多个坐标系的联动。
由于实现多个坐标系的联动情况,那么通常都会伴随着坐标系的移动和旋转,所以我们会设立2个机器人坐标系,一个是机器手的工作坐标系,即为baseX;一个为机器手底座基准坐标系,即为base0;
在这里插入图片描述

如上图所示,base0为机器手底座的坐标系,是机器人自带的坐标系,不受任何控制的影响。baseX坐标系为机器手的工作坐标系,在示教是直接确定,baseX点在base0坐标系下的点。机器人的base1走到XY等于0的位置,随后找到base1在物体上的位置,画一个十字架,打开相机实时采集,把机器人移动到十字架位置,可以在相机画面中清晰看到十字架的位置,并将图像的中心对准十字架,然后记录到当前base0下的机械坐标即为teach0的坐标值。左图为示教的工件,右图红色为工作的工件,黑色为旋转后的示教坐标系。蓝色为我们最后发送给电气的偏移X距离,偏移Y距离,偏移角度Angle。
第一步:示教确定。在标定结束后,机器人在示教位置应确定一个工作坐标系(工作坐标系推荐使用机器手末端的中心为baseX坐标系)。
第二步:确定示教点坐标。当前的示教点坐标应通过电气使用机器手到达工件位置,然后记录示教点基于base0坐标系下的坐标的(即为在机器手全局坐标系的点)。同时也需要记录示教点在相机坐标系下的坐标。
【在确定示教点时,相机应该画面的中心应该正对到示教点,在识别工作坐标时可以按偏移量获取到工作坐标具体值】
在这里插入图片描述

如上图:2个正方形框为相机的拍照画面,那么我们在示教的时候应该将示教点放置在画面的正中心。
第三步:获取到工作时的基于base0坐标系下的工作坐标。
拟定:相机.work.x:相机坐标系下的工作点X坐标(可以拍照直接获取);相机.work.y:相机坐标系下的工作点Y坐标(可以拍照直接获取)
那么基于Base0下的工作坐标可以为:base0.work.x=base0.Teach.X+(相机.work.x-相机.Teach.X);base0.work.y=base0.Teach.y+(相机.work.y-相机.Teach.y);
所以工作点1和2,我们可以通过上述的计算方式对基于base0下的工作点1和2的坐标值。
第四步:在获取到基于base0下的示教点1和2坐标,基于base0下的工作点1和2坐标,基于base0下的baseX坐标值。(其中应该注意到,baseX点有2个,一个是开始搬运的点,一个是结束搬运的点)。
第五步:计算坐标系的旋转角度。
TeachLineW=Teach2.X-Teach1.X;
TeachLineL=Teach2.Y-Teach2.Y;
TeachAngel=arctan(TeachLineL/TeachLineW);
WorkLineW=Work2.X-Work1.X;
WorkLineL=Work2.Y-Work1.Y;
WorkAngle=arctan(WorkLineL/WorkLineW);
OffsetAngel=TeachAngle-WorkAngle;
所以我们得出的OffsetAngle即为我们坐标系的偏移角度
第六步:将坐标系进行旋转,然后计算与示教点的偏移量。
由于我们进行了旋转,所以旋转后的示教点的坐标在基于base0下会发生改变

在这里插入图片描述

不仅示教点会发生变化,示教的坐标系baseX也会发生变化,而且由于是绕着baseX进行旋转,所以点相对baseX的坐标不会改变,但是相对base0的坐标会改变,所以我们需要基于base0下的坐标系进行计算,并且直接输出基于base0下的示教坐标。
推导过程:
已知初始角度为α,夹角为θ,点到坐标原点长度为L,初始示教点为XY。设旋转示教点为X‘Y’。
已知示教点与坐标原点关系为:L=X/COSα=Y/SINα,并且L的长度不变
则:X‘=Lcos(α-θ),Y’=Lsin(α-θ)
则可得:X‘=L
(COSαCOSθ+SINαSINθ),Y’=L
(SINαCOSθ-SINθCOSα)
则可得为:X‘=XCOS+YSINθ,Y’=XSINθ-YCOSθ;
由于再库卡机器人中逆时针旋转为正,顺时针旋转为负值,所以θ需要取负值。
所以由推导可得,求另一个点的坐标为多少:**
nowTeach1.X=(Teach1.X-BaseX.X)*cosθ-(Teach1.Y-BaseX.Y)*sinθ+BaseX.X;
nowTeach1.Y=(Teach1.X-BaseX.X)*sinθ-(Teach1.Y-BaseX.Y)*cosθ+BaseX.Y;
则最后的偏移量为:
OffsetX=work1.X-nowTeach1.X;
OffsetY=work1Y-nowTeach1.Y;
最终我们输出给电气的值有:OffsetAngel(偏移旋转角度),OffsetX,OffsetY。

当坐标出现异常,即为坐标点一直走不准时,排查方案。
安装激光器。走坐标系偏移往往都是进行手眼抓取或者手眼定位的情况,所以我们安装一个激光器便于后续的逐步验证,激光器安装在机器手上,位置需要始终固定不变即可,尽可能的让激光可以垂直打下激光点(可以使用水平仪进行验证激光是否安装水平)
1.确定标定文件是否错误。对当前点位进行示教,将机器手摇到1号拍照点位,然后采集一张图像,随后机器手在base0Tool1坐标系下走X+10,再拍一张照片。随后机器手回到2号拍照位置,随后机器手再base0Tool1坐标系下走X+10,再拍一张照片。然后我们可以我们可以计算一下偏移量,我们输出的偏移量为X=-10,Y=0,A=0。如果X近似10,则为标定时X轴标定反了(将原本的标定文件倒过来标定一次),如果Y出现大于1以上的偏差,即为标定时标定坐标与机器人坐标出现异常(重新检测机器人坐标),如果A出现大于0.2度以上的误差,(需要确定时模板匹配的定位是否准确,还有标定时是否是再base0下坐标系标定的)。同理再重复上述步骤走Y+10或者走XY同时+10都可以。
2.机器手新建的base1的坐标轴与base0的坐标轴是否平行并方向相同。当标定文件验证正常时。将机器人走到1号拍照点,拍照后,将机器人在Base1下的坐标系走X+10,随后拍照,将走10的标定后坐标与没有走的标定后坐标相减,如果约等于10为正确,如果为-10,则为base1与base的X坐标轴方向相反,如果小于10,相差达到1以上时,则base1坐标轴与base0坐标轴不平行,同理检测Y轴方向。
3.都没有问题时,重新检测teach0的点是否正确。将机器人的base1走到XY等于0的位置,随后找到base1在物体上的位置,画一个十字架,打开相机实时采集,把机器人移动到十字架位置,可以在相机画面中清晰看到十字架的位置,并将图像的中心对准十字架,然后记录到当前base0下的机械坐标即为teach0的坐标值。
4.检测机器人是否走坐标系偏移的程序。移动到一个空旷的位置,将激光点打下的位置做一个记号,随后机器人示教后进行检测拍照,然后将所得到的误差值加上base1的坐标值,重新写入base1坐标系中,然后机器手重新回到示教位置。如果能大概走到示教位置(误差小于0.5时)即代表机器人程序走错了,应该走基于坐标系偏移的程序(或者程序错误),如果误差大于0.5时,则可能时视觉程序出现错误,检测程序精度是否达标,计算是否正常无误。

由于建立baseX坐标系时,相机的teach0与机器人的base0正常情况下的坐标时不一致的。原因在于:使用3点法建立机器人BaseX时,通常选取夹具上的某一点作为机器人建立BaseX的参照点。对于相机拍摄所得到的teach0相对于机器人不在同一点上,所呈现的效果是,teach0的坐标与baseX原点在base0的坐标不一样,所分为相机下的BaseX与机器人下的BaseX。如果直接选取baseX的原点作为teach0的话,会出现由于相机与机器人baseX点有一定的角度与距离造成误差。当我们使用相机对准baseX的点时,实际上就将相机的BaseX与机器人的BaseX进行重合,可以弥补相机与机器人出现位置差值所出现的误差。

猜你喜欢

转载自blog.csdn.net/m0_51559565/article/details/128288344