1.定义仿射变换的2x3旋转矩阵(参考网络),在程序中用Mat类来定义 ,理解细节可以参考。
2.在机器定位中可以利用伺服马达定位确认原mark点或图像特征点坐标(教示得到点位)
3.利用视觉的模板匹配或其他得到的新的伺服坐标。
4.利用仿射函数得到2x3旋转矩阵
5.利用此公式计算,计算出任意一个工作点的位置,驱动机器伺服到位。
此文章希望能帮助机器简单定位起来。
具体案例学习:
怎么样得到2x3旋转矩阵,这是关键所在。
1.第一步教示在mark 的坐标(mark1,和Mark2 二个点)
而Mark点主要对相机图像(像数和实际XY的比值比例),教示时把mark放在图像最中心。得到3个mark点教示坐标(A1,B1,C1)
2.第二步利用图像抓mark特征点,得到一个中心点,可以根据离远了图像中心点的偏移量,利用比列尺得到实际生产中产品的mark的二个坐标(a1,b1,c1)
3.利用下面函数得到仿射2*3矩阵
CvInvoke. GetAffineTransform Method ( PointF[] , PointF[] ) public static Mat GetAffineTransform( PointF[] src, ----3个mark点教示坐标(A1,B1,C1) PointF[] dest----3个实际生产中产品的mark的二个坐标(a1,b1,c1) )4.利用数学公式做个函数(变换前坐标,变换后坐标)
再驱动设备运动到位。
任意一点原来教示设定(x1,y1)----
定位后x=x1*mat[0,0]+y1*mat[0,1]+mat[0,2];
定位后y=x1*mat[1,0]+y1*mat[1,1]+mat[1,2];
希望能帮忙你,这个精度的关键相机的像数和实际的比值要准。