基于可移动坐标系的机器人坐标偏移
在生产过程中,当需要建造多个坐标系的时候,我们可以采用基于坐标系偏移,可以实现使用机器人坐标系直接完成多个坐标系的联动。
由于实现多个坐标系的联动情况,那么通常都会伴随着坐标系的移动和旋转,所以我们会设立2个机器人坐标系,一个是机器手的工作坐标系,即为baseX;一个为机器手底座基准坐标系,即为base0;
如上图所示,base0为机器手底座的坐标系,是机器人自带的坐标系,不受任何控制的影响。baseX坐标系为机器手的工作坐标系,在示教是直接确定,baseX点在base0坐标系下的点。左图为示教的工件,右图红色为工作的工件,黑色为旋转后的示教坐标系。蓝色为我们最后发送给电气的偏移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下的示教坐标。
所以根据等腰三角形的特点,已知2点坐标,腰长,和旋转角度,求另一个点的坐标为多少:
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。