继续上篇《勇哥的视觉实验:眼在手上(eye in hand)的标定实验。相机挂在x,y平台上,全部九点标定特征在相机视野内可见》
这次勇哥换用Epson四轴scara机器人来做实验。
如下图所示,相机挂在第3轴上面,因此这种眼在手上的工作模式分为两种情况:
(1) 相机移动,不旋转
(2) 相机移动并且旋转
本篇研究一下第(1)种情况。
(图1)
我们开始九点标定。
请看上图,这里勇哥还是用笔尖做为标定特征点。要说明的是,在相机视野范围内看不到我们的笔尖。
我们计划只做四个点的标定,下图是走到其中一个点时相机看到的视野内容:
(图2)
这种情况下就产生一个问题:
由于相机的视野小,机器人走四个点位时看到的视野内容没有重叠部分,即完全是四个不同的视野内容。
四点中的第一个点是字符2右上那个点,其它点为顺时针方向分布。
(图3)
四个点位相机看到的视野内容分别为3,4,1,2
(图4)
那么上一篇贴子中的情况就不是这样的。在轴的原点位置,相机已经能看到全部的要标定的九个点了。
如下图所示:
(图5)
由此得到一个猜想是我们必须在一个视野范围内来选择九点标定用的特征点。
前面我们pt1, pt2, pt3, pt4四个点位看到的是四个视野范围。
现在我们只选择在第一个点pt1时相机的视野范围内的四个点。
(图6)
按标记的顺序记录下上图中十字中心的像素坐标
//217,224 //737,230 //731,751 //212,746
接下来移动机器人用笔尖去戳那四个十字中心,记录机械坐标。
221.161,128.968 220.958,109.122 200.386, 110.091 201.310, 129.641
进行标定
px:= [217,737,731,212] py:=[224,230,751,746] mx:=[221.161,220.958,200.386,201.310] my:=[128.968,109.122,110.091,129.641] vector_to_hom_mat2d(px, py, mx, my, HomMat2D) affine_trans_point_2d(HomMat2D,244,611 , Qx, Qy) *污渍点的像素坐标 //244,611 *正确答案 //206.157,127.746
然后我们在这个视野内随便找一个点,看看机器人能不对用笔尖戳准它。
勇哥选择箭头所指的污渍。
(图7)
affine_trans_point_2d(HomMat2D, 244,611, Qx, Qy)
结果是:206.311,128.334
正确答案是:206.157,127.746
可以看到,结果在X方向偏差了0.16mm, Y方向上偏差了0.6mm,考虑到实验是人眼对笔尖位置,比较粗糙,因此这个结果也能代表我们的实验原理上是正确的。
我们标定时选择是在pt1时相机看到的视野内容进行标定的,当我们在这个视野内任选一个点时,转换出来的机械坐标都可以正确让笔尖戳到这个点。
但是如果我们在pt2, pt3, pt4 位置时,相机视野内的任意一点,可以戳准吗?
答案是不能!
怎么可以做到呢? 勇哥在后续文章中再继续实验。
在这部分的实验中,勇哥得到的经验是:
实验时相机的x,y和运动方向的x,y是相反的。
考虑到这个问题,我特别尝试过把像素坐标交换一下,如下图所示。
但是经过实验,其实不交换,结果也没啥子区别。这个似乎并不重要。
(图7)
2. 像素坐标点位一定要与机构坐标的点位对应起来。
图6的四个点顺序是表示的像素坐标的顺序。
它对应的四个点的机构坐标顺序如图8所示。
(图8)
这一点很关键,由于相机与运动的方向是相反的,因此这个地方很容易搞错。
如果这个对应关系错误了,标定结果就相去十万八千里了。
未完待续…………
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

