13423884388
解决方案/Solution
 当前位置:名门彩票网址 >> 解决方案 >>  解决方案
SCARA标定TCP位置方法
发布时间:2017-11-24 17:33:48| 浏览次数:

SCARA标定TCP位置方法

2017-07-24 zhu 

    SCARA是一种常见的具有特殊构型的4轴机器人:

  其独特的构型,决定了相对于基坐标系而言,其TCP并没有相对于基坐标系xy轴旋转的自由度,换言之,在一般的应用情景下,TCP相对于tool0.tframe.z的数值并不会产生作用(再换言之,可以统一设为0或者任意数值)。

  此处仍然要多言一句,TCP最好的获取方式是通过仿真获得数模的参数并直接导入机器人即可;如果对TCP精度要求较高,则应使用视觉系统,此时,TCP初始值的准确性则可能并不重要了。

假设现场需要对SCARATCP位置进行标定的话,因为其构型和普通6轴机器人的区别,6轴机器人通过4jointTarget计算TCP的方法无法使用,我们需要为SCARA创建特殊的方法。

  抛开质量等参数,我们只需要考虑最核心的tframe参数。并且只需要考虑其中的tframe.trans中的xy分量,z分量直接设置为0即可。        

  请参考如下方法:该方法需要一对针尖,一个固定在平台上,用于TCP标定的参考位置;一个固定在机器人末端执行器上,针尖尽量调整到期望TCP的位置。如果期望TCP位于吸盘中心,则可以先将吸盘取下,在对应的螺纹处安装针尖;如果期望TCP位于夹爪中心,则可以制作对应的针尖被夹爪夹持,使针尖位于期望TCP的位置。


        Jog机器人使两个针尖尽量靠近,并在继续jog机器人使末端执行器运动(绕Z轴转动,沿x-y方向平移),在不同位姿使得两个针尖依然尽量靠近, 同时在too0wobj0的坐标系下记录机器人的点位。显而易见,所读点位,处于以目标TCP(针尖位置)为圆心,tool0和目标TCP距离为半径的圆周上。因此,只要计算出圆心位置,即可获得TCP对应的tframe。

   简化其数学模型如下:

        图中P1-P3为当两个针尖尽可能靠近时,在too0和wobj0的坐标系下记录机器人的点位。original为圆心。不妨设TCP所在圆心坐标为(x,y),tool0在三个位置的坐标分别为(x1,y1),(x2,y2),(x3,y3),圆半径为R。可得到:

进一步:


不妨设:

即可求得:

        至此,目标TCP(圆心)的位置已经获得。接下来,我们还需要进一步以p1位置的tool0为基准(即p1点位代表的坐标系),original在tool0下的投影(即为所求的TCP.tframe.trans)。此处的精妙的变换方法,请大家对照原理图和具体代码理解。


有兴趣的同学可以尝试自己编写或者测试下面的代码:

FUNC tooldataget Tcp_3point( robtarget p1, robtarget p2, robtarget p3)

    VAR num a;

    var num b;

    var num c;

    var num d;

    var num e;

    var num f;

    VAR pos original;

    VAR pose pose_original;

    VAR pose pose_p1;

    VAR pose pose_tcp;

    VAR tooldata newTcp;

   

    a := p2.trans.x -p1.trans.x;

    b := p2.trans.y -p1.trans.y;

    c :=0.5*(Pow(p2.trans.x,2) - Pow(p1.trans.x,2) + pow(p2.trans.y,2) -Pow(p1.trans.y,2));

    d := p3.trans.x -p1.trans.x;

    e := p3.trans.y -p1.trans.y;

    f :=0.5*(Pow(p3.trans.x,2) - Pow(p1.trans.x,2) + pow(p3.trans.y,2) -Pow(p1.trans.y,2));

   

    original.x :=(c*e-b*f)/(a*e-b*d);

    original.y :=(a*f-c*d)/(a*e-b*d);

    original.z := 0;

   

    pose_p1.trans :=p1.trans;

    pose_p1.rot := p1.rot;

   

    pose_original.trans :=original;

    pose_original.rot :=p1.rot;

   

    pose_tcp :=PoseMult(PoseInv(pose_p1),pose_original);

    newTcp := tool0;

    newTcp.tframe := pose_tcp;

   

    RETURN newTcp;

ENDfunc

 
 
 上一篇:工业机器人给企业带来的影响
 下一篇:全自动喷胶机标配项特点
关于润泽  |   产品技术  |   应用案例  |   联系我们

       www.rzrobot.hk   备案许可证编号:粤ICP备17048296号

Copyright © 2016深圳市润泽机器人有限公司 All Rights Reserved