载具定位算法
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机械手驱动
- 光源及相机驱动
- 一种面向接口接口、依赖注入的运控框架的总体介绍及分层实现
作者:Bonker 出处:http://www.cnblogs.com/Bonker WeiXin:iBonker |