载具定位算法

1、什么是载具定位算法?哪些场景需要?

  • 什么是载具定位:如瓶盖需放置到瓶子上,瓶子的位置发生了变化,怎么把瓶盖还能放到瓶子上。假如瓶子是载具,重新计算瓶子的位置的算法就是载具定位算法。
  • 哪些场景需要:载具的位置会存在少许变化的场景,如轨道等

2、载具定位算法原理及难点

  • 载具定位主要是根据当前载具位置与模版载具位置比较,先计算出旋转角度,后计算X,Y偏移
  • 载具定位同样需要使用载具的2个mark点进行定位,难点其实在于头部相机的标定

3、解决方案

  • 根据模版中2个mark点位置,计算此向量与x轴的夹角J1
  • 运行过程中,同样方式计算夹具X2,X2-X1就是旋转夹具J
  • 放置pcb的龙门架/机械手点位P1,夹具两个mark点的中心点P2绕P1旋转角度J得到P3。P3与模版的两个mark点的中心点P4的X,Y偏差就是夹具的X,Y偏差了

4、源码

  private Position getCorrectionPoi(List<Position> firstPoiList, List<Position> secondPoiList, Position putPcbPoi, out double offsetAngle)
        {
            //获取旋转角度  
            List<Position> runImageRobotPoiList = new List<Position>() { firstPoiList[0], secondPoiList[0] };
            List<Position> tempImageRobotPoiList = new List<Position>() { firstPoiList[1], secondPoiList[1] };
            offsetAngle = this.getOffsetAngle(runImageRobotPoiList, tempImageRobotPoiList);
            //获取中心点
            Position currentRobotPoi = this.getCenterRobotPoi(runImageRobotPoiList);
            Position templateRobotPoi = this.getCenterRobotPoi(tempImageRobotPoiList);
            //模板点绕机械手点位旋转与目标平行
            Position rotatedPoi = this.getRotatePoi(templateRobotPoi, offsetAngle, putPcbPoi);
            //旋转后的模板点位与拍照点的平移值
            Position newDstPoi = this.getTransPoi(currentRobotPoi, rotatedPoi, putPcbPoi);
            //角度补偿
            newDstPoi.Z = putPcbPoi.Z;
            return newDstPoi;
        }

5. 后续计划[敬请期待],如需完整代码请微信联系

  • 基于顶部相机的塑盘取料算法
  • 基于头部相机的检测算法实现
  • EPson机械手驱动
  • 光源及相机驱动
  • 一种面向接口接口、依赖注入的运控框架的总体介绍及分层实现
posted @ 2022-08-03 18:04  Bonker  阅读(314)  评论(0编辑  收藏  举报