1 标定的目的及基本原理 2
1.1 标定的目的 2
1.2 标定的大体过程 2
1.3标定的方式 3
1.4标定中数据传输方向 3
2 标定前的准备 4
3 运动控制程序界面介绍 6
4 标定实操 8
4.1 操作步骤 8
4.2 程序讲解 11
1 标定的目的及基本原理
1.1 标定的目的
相机拍出来的图片,是由一个个像素点组成的,而机器设备的运动是根据物理坐标来移动的,所以需要进行九点标定仿射变换将像素坐标换算成物理坐标后,把结果传给机器设备使其进行对应的移动。所以九点标定就是为了建立像素坐标与物理坐标之间数学关系矩阵K。
1.2 标定的大体过程
如图1.1所示,图中的边框表示相机视野的大小。橙色中心表示相机的中心像素坐标点(Xcp,Ycp)X1;蓝色中心是定位到的模板物体的中心像素坐标点(Xmp,Ymp)X2;然后利用九点标定得到的仿射矩阵K并分别仿射计算出上述两个中心的实际物理坐标Y: Y1=KX1, Y2=KX2。
即相机中心的像素坐标点X1(Xcp,Ycp)通过仿射变换得到相机中心实际物理坐标(Xcw,Ycw)Y1;
模板物体中心的像素坐标点X2(Xmp,Ymp)通过仿射变换得到模板物体中心实际物理坐标(Xmw,Ymw)Y2;
然后利用得到的两个物理坐标算出两者的实际距离差,再将这个距离差(X=Y1X-Y2X,Y=Y1Y-Y2Y)发送给运动平台,使相机移动到模板物体中心完成矫正。图中来说就是橙色的坐标会移动到蓝色坐标处。相机的视野从1移动到了2,重新拍照的结果如图1.2所示,相机中心和模板物体的中心重合在一起。
图1.1
图1.2
1.3标定的方式
我们这边会提供的九点标定的平台。在标定过程中将检测物体作为Mark点固定不动,通过移动相机的位置来进行标定。
1.4标定中数据传输方向
在整个标定过程中,数据的传输方向是Halcon通过串口将数据发送给运动控制界面,运动控制界面再将数据发送给运动平台让相机进行相应的动作。
2 标定前的准备
要进行九点标定,我们需要以下准备:
① 一台完整的九点标定平台,如图2.1;
图2.1 标定平台
② Halcon九点标定代码,如图2.2;
图2.2
③ 运动控制界面Demo,如图2.3,双击运行后的界面如图2.4
图2.3
图2.4
④ 在电脑上安装九点标定平台所需的驱动,图2.5分别为驱动软件和安装教程
图2.5 驱动软件
⑤ 用串口虚拟助手虚拟一组串口,图2.6为串口虚拟助手界面。
图2.6 串口虚拟助手
3 运动控制程序界面介绍
运动控制程序界面如图3.1所示。
图3.1
(1)这部分为端口选择部分。首先右击计算机属性,点击设备管理器如图3.2所示,然后找到端口选项如图3.3所示(以图中所示的COM3为例),最后在运动平台联机部分选择相应的端口并且点击打开串口按钮如图3.4所示。
图3.2
图3.3
图3.4
(2)图3.5中的按钮就是为了控制平台运动
图3.5
(3)图3.6为坐标提示框
图3.6
(4)图3.7为信息提示框
图3.7
(5)图3.8为控制运动走位框
图3.8
(6)图3.9为运动控制界面与Halcon串口通讯部分
图3.9
4 标定实操
4.1 操作步骤
(1)首先我们先在halcon中创建两个空的数组用于存储后续匹配到的模板中心的像素坐标(X、Y)如图4.1所示。相机每次移动的间隔,例如我每次移动的间隔是4个毫米,是根据实际情况来确定的。(在移动相机的时候不让检测物体超出视野范围,但走的九宫格尽量能囊括整个视野)
图4.1
(2)接着确定运动走位方式,看个人喜好选择相对走位或者绝对走位如图4.2所示
图4.2
(3)确定好间隔和运动走位的方式后,将定下来相机要走的九个点的坐标X、Y添加到所创建的WorldX、WorldY数组中去,如图4.3中黑色的九个点为定下来相机要走的九个点,接下来就要将九个点的实际坐标添加到halcon创建的数组中。
图4.3
绝对走位
第1点: X 坐标18,Y坐标-2
第2点: X 坐标18,Y坐标0
第3点: X 坐标18,Y坐标2
第4点: X 坐标12,Y坐标2
第5点: X 坐标12,Y坐标0
第6点: X 坐标12,Y坐标-2
第7点: X 坐标6,Y坐标-2
第8点: X 坐标6,Y坐标0
第9点: X 坐标6,Y坐标2
(4)开始进行标定,图4.4为标定部分的代码,代码部分很简单,就是进行拍照、创建模板和匹配模板。下面主要讲操作,首先根据halcon中所创建数组的值(如图4.5所示)将相机的要走的坐标对应X,Y,Z输入到运动控制界面中相应的位置中如4.6所示,每次Z轴的坐标设为0就可以了(Z轴控制的是光源和相机的工作距离,这个不需要变动)。
注意:开始输入的第一组(0,0,0)的时候,重新启动下运动控制程序。这些坐标值必须也是0起步。重启启动就可以重置为0如图4.7所示。
每输入一次坐标,点击运动,让平台驱使相机运动一次,然后执行一次开始标定的代码,模板物体中心的数组就加一组像素坐标。第一次执行需要创建一个模板区域。接下的执行就不再需要了。当执行完九个坐标后,也随之获得了相应的模板物体中心的像素坐标。然后人为的将绿色的执行光标移出While循环,移动到关闭相机Close_Framegrabber();
图4.4
图4.5
图4.6
图4.7
(5)到此九点标定就已经可以说结束了,标定完毕后创建相应的仿射变换矩阵代码如图4.8所示,这样就获得了像素坐标和物理坐标的对应关系。
图4.8
4.2 程序讲解
(1)如图4.9虚拟串口已经建立COM1和COM2端口的连接,所以Halcon中端口的选择如图4.10所示,运动控制界面中端口选择如图4.11。
图4.9
图4.10
图4.11
(2)halcon九点标定代码中的介绍如下
图4.12
图4.13