视觉引导运控应用比较广泛了,有这么一个常见的场景,物料来了,和初始位置有偏差,怎么计算偏差的变换矩阵?为了计算矩阵,我们最少要找几个点?
学过仿射变换的小伙伴都知道,[x,y]'=[a11,a12,a13; a21,a22,a23]*[x0,y0,1]' 也就是说,仿射变换矩阵是一个2*3的矩阵,有六个参数,按照多元一次方程组的解法,我们至少要联立六个方程式,而且这六个方程式不可约,也就是说,要找三个点(每个点有两个数值,x,y),而且这三点不能共线,才可以解出这个仿射变换来。那么问题来了,为什么工业现场,很多机台只要找到两个点,就可以实现定位了呢?
这个问题一开始我也摸不着头脑,想啊想,可能两点连城一条直线,然后和坐标轴的夹角就可以求出来了,然后旋转角度就可以知道了,这样就可以少用一个点?(仿射变换阵=平移矩阵*旋转矩阵)
后来翻看opencv的一些博客,了解了问题成因:
https://blog.csdn.net/dongfang1984/article/details/52959308
这篇博客说的是 opencv中 estimateRigidTransform 函数,不过这个函数现在已经不用了,新的函数是:
estimateAffine2D()和estimateAffinePartial2D()
那么,究竟有啥区别呢?
full affine考虑了平移,旋转和缩放,而 partial affine是有约束条件的,不包括缩放的仿射变换;
这样以来,仿射变换的六个元素中,有两组元素的绝对值是相等的,那么,实际上也就只要知道四个元素的值就可以了,也就是说,两点就可以找到仿射变换矩阵,实现定位。
在机台上实际运行,三点定位和两点定位得到的仿射变换矩阵差异不大,运动轴所在X-Y平面和载物平台平行度良好的情况下,两点定位的精度也可以满足要求。
由此看来,观察,思考,抄作业(上网找答案),理论,实践,对于解决问题来说,都是比较重要的。