在相机固定朝下的视觉项目中,我们会涉及到四个数据:模板图像坐标,模板放置位,产品图像坐标和产品放置位。在实际的应用过程中,前面三个都是可以通过相机拍照或者做模板来获取,这是已知量,而产品放置位则是我们要求的未知量。如何求得这个未知量就是标定运算的目标。
一、两个知识点
在进行计算时需要先了解一个基础概念和一个数学公式:
1、产品放置位到底是什么?
产品放置位的本质其实是机器人从模板位置移动到产品位置的移动量,而这个位移量应该满足一个性质:
模板图像坐标-产品图像坐标=模板放置位-产品放置位
简单来说就是模板图像坐标到产品图像坐标的距离就是模板放置位到产品放置位的距离。在不考虑角度的情况下如图所示:
显然,在不考虑角度的情况下x和y的偏差值是线性的。
2、 点绕点旋转后的坐标计算公式
上述部分并没有考虑角度,但在视觉项目的实际使用过程中肯定是要考虑角度因素的,机器人的旋转过程本质上就是向量围绕旋转中心进行旋转,公式如下:
其中,(x1,y1)是旋转后的坐标,(x,y)是旋转前的坐标,(x0,y0)是旋转中心坐标,a是旋转角度。
公式推导链接
二、一个简单案例
有了以上认知后我们来看一个简单的案例,这个案例旨在分析考虑角度的情况下是如何进行计算的。
如上图所示,我们给模板图像坐标的角度设置为30°,而最后产品放置位的角度变成了-30°。这其实就像我们的第一个知识点一样,模板图像坐标到产品图像坐标的角度差值等同于模板放置位到产品放置位的角度差值,因此为-30°。不过很显然,考虑角度的时候x,y就不是简单的进行加减运算了,我们来分析一下这个过程发生了什么。
事先声明,在进行运算的过程我们使用的标定序列为总标定,即旋转中心为(0,0)。从上图中可以看出,角度遵循了知识点1的性质而X和Y变得奇怪了些,显然X,Y的变化是由这个角度带来的, 但如果没有角度,X、Y是可以直接使用知识点1的。所以在计算过程中我们应该先旋转后平移,由此作为突破口来进行分析。
上图给定了两个坐标系,O1坐标系是模拟模板图像坐标到产品图像坐标的运算过程,O2坐标系是模拟模板放置位到产品放置位的运算过程。
首先考虑角度,模板图像坐标角度由30°变为0°,点(1,1)绕(0,0)旋转了-30°。使用知识点2介绍到的公式不难计算出,旋转后的结果为(1.366,0.366)。这时,模板图像坐标角度就和实际图像坐标角度相同了,在数学坐标系中表现为向量的角度相同,通过这样的方式排除了角度带来的影响后就可以正常计算X、Y的偏差值为1.634和0.634。
而后回到模板放置位来,模板放置位对应的是产品放置位,根据旋转优先的原则,产品放置位的角度是确定的,即为-30°。使用偏差值的前提是向量的角度相同,因此我们需要使用同样的方法让模板放置位的角度和产品放置位的角度一致,即绕(0,0)旋转-30°。计算旋转后结果为(2.730,0.732)。最后加上偏差值得到的就是产品放置位(4.366,1.366),与我们的软件计算结果一致。
总的来说,计算过程先考虑角度后考虑X和Y,确定角度相同的情况下才能对XY进行计算。
三、 稍微复杂一点的案例
我们来看这样一个案例:
这个案例的每一个数据都涉及了角度问题,更贴切与视觉使用的正常情况。计算步骤如下:
1、首先依然优先考虑角度旋转,旋转角度为15°(45-30),因此确定了产品放置位角度为75°(60+15)。
2、然后对模板图像坐标利用公式进行旋转得到坐标(0.707106781186548, 1.22474487139159),3、计算偏差值为(2.29289321881345,0.77525512860841)。
4、再对模板放置位进行旋转得到坐标(2.82842712474619, 4.89897948556636)。
5、最后加上偏差得到产品放置位(5.12132034355964,5.67423461417477)。
是不是很简单呢?尝试一下就会发现这个过程就是简单的套用公式罢了。
四、关于反向旋转
在使用过程中会涉及到正向旋转和反向旋转的问题,这是由于平台实际的角度方向与相机拍摄图像的角度方向相反导致的,数学公式上体现在旋转过程中围绕旋转中心的旋转方向相反,因此在确定旋转角度的时候变化的值也应该取反。
角度值取反结果如上图所示。
软件验算运算无误。