1)先决条件
1.在产品上做个标记点(可以用胶带弄个加号)
2.让电气调整机械手到合适的位置 最好抓的2边距离标记位置相对相同
3.吸起产品到合适的高度(实际生产时产品保持的高度)
 九点标定:
1.PMA(模板匹配)工具抓到产品上的标记点并中心原点(可以放开角度到-20~25(参考值)后续用来旋转中心标定)
2.添加CogCalibNPointToNPointTool 工具 添加至9列数据用来计算校正 
3.第一次记录 目前操作的 PMA的 X、Y的值 和 电气给到的坐标X、Y值,后续8次按照以该点为中心点 走9九宫格 
每次偏移值依据视野来判断(依据产品大小来,尽量形成后的九个点在产品上辐射范围大一点)
4.取完9点后抓取校正图像,计算校正(RMS越小越好 )


旋转中心标定:
5.添加CogFitCircleTool工具 输入图为 PMA输出图 机械手可以顺时针 旋转15度以上 3次(不要超出相机视野) 并记录PMA的X、Y值到3行数据内 然后 点击运行 拟合为圆,圆心也就是旋转中心坐标

做完旋转中心可以把该工具删掉毕竟咱只是需要他旋转中心坐标,把坐标记录在tb的高级脚本

不固定方向的机械手会需要个补偿值 (下面是为补偿值准备的值)

参数定义:

    //旋转中心
    double centerX = -552.076;
    double centerY = 697.265;

    //图像基准值(CogFindCornerTool(找边工具(2条),可以拿到2线交叉点坐标))
    double cambaseX = -355.82;
    double cambaseY = 713.875;

    取CogFindLineTool工具(旋转角度)  找一条边后的结果的旋转属性 点击deg切换为角度取值

    double cambaseR= 0.00223881;

    double currentX = cogFindCornerTool.Result.CornerX;
    double currentY = cogFindCornerTool.Result.CornerY;

    double r =cogFindLineTool1.Results.GetLine().Rotation - cambaseR;
    double angle = CogMisc.RadToDeg(r);

 


      
      //根据旋转中心和当前的值计算旋转之后的值和补偿值
      double affterX = (cambaseX - centerX) * Math.Cos(r) - (cambaseY - centerY) * Math.Sin(r) + centerX;
      double affterY = (cambaseY - centerY) * Math.Cos(r) + (cambaseX - centerX) * Math.Sin(r) + centerY;

 offsetX =double.Parse((currentX-affterX).ToString("0.00"))*100;

offsetY =double.Parse((currentY-affterY).ToString("0.00"))*100;

 offsetR = double.Parse(angle.ToString("0.00"))*100;
      

最后把输出的值通信给PLC

    this.mToolBlock.Outputs["Result"].Value = "OK"/"NG";
    this.mToolBlock.Outputs["X"].Value =
offsetX ;//待补偿的X值
    this.mToolBlock.Outputs["Y"].Value =
offsetY ;//待补偿的Y值
    this.mToolBlock.Outputs["R"].Value =
offsetR ;//待补偿的角度

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐