如何在 LabVIEW 中求解 2 个坐标系的对应关系(3 点标定原理)
文/LabVIEW 爱好者 刘松
有些时候,我们需要把相机拍照计算出的目标位置(在图像里的像素坐标),去告诉机械手末端
抓取或吸取(即机械坐标,单位毫米),那么如何把计算出的这个像素坐标转化成机械坐标呢?在这
里,标定就是要找出 A 坐标系与 B 坐标系上点的对应关系。
方法一:直接根据 XY 的像素坐标与机械坐标的比例关系来算,这种简单标定方法对于 XY 模组安
装不是十分垂直的场景会有大的偏差。
方法二:在 NI 提供的视觉工具里有用“标定圆点板”进行包含畸变标定的精密方法,这个方法
要求首先要有一个标准标定圆点板,其次要放在视野中的目标物所在高度,然后进行标定,标定出一
幅标定图像。在以后的每次新图像坐标转换时都要加载这幅标定图像进行转换,操作较复杂。并且,
当图像视野达几百毫米时,标定圆点板的制作和打光成为大问题。我们迫切需要一种像 3 点标定这样
的方法来简化坐标系映射。
3 点标定方法原理:
假设 A 坐标系(例如相机图像坐标系)的一点(10,20)像素坐标,在 B 坐标系(例如机械手所
在坐标系)里用“标定针”对位的是(2,4)毫米机械坐标。接下来问,如果是 A 坐标系(20,30)像
素坐标在 B 坐标系里看到的是多少呢?此时会有无数种答案,因为没有一个唯一的映射关系。
但如果给定更多的限制条件,例如更多的点(3 个以上)在 A、B 坐标系的对应关系被找到,此时
再来问 A 坐标系(20,30)在 B 坐标系里看到的是多少,则答案就是唯一的。
为何有要求 3 个点以上,就是求解三元一次方程的要求至少有 3 个已知条件(9 点标定是为了提
高精度,现在我们只研究 3 点标定)。
已知 A 坐标系的一些点(x,y),在 B 坐标系里去行走得到(x',y')。然后通过求解(x,y)到(x',y')
的关系,得到仿射变换齐次矩阵。两个坐标系点的计算关系可列如下方程:
ax+by+c=x’
dx+ey+f=y’
求解出 6 个未知变量 a、b、c、d、e、f 即找出了映射关系。
我们通过拍照取图像中 3 个已知像素坐标点(x
0
,y
0
) (x
1
,y
1
) (x
2
,y
2
),再移动“标定针”对准这 3
个点,记录了 3 个机械坐标(
0
,
0
) (
1
,
1
) (
2
,
2
),这 6 个坐标均已知,即:
(x
0
,y
0
)(
0
,
0
) ax
0
+by
0
+c=
0
dx
0
+ey
0
+f=
0
(x
1
,y
1
)(
1
,
1
) ax
1
+by
1
+c=
1
dx
1
+ey
1
+f=
1
(x
2
,y
2
)(
2
,
2
) ax
2
+by
2
+c=
2
dx
2
+ey
2
+f=
2
写成矩阵形式即
0
0
1
1
1
1
2
2
1
=
0
1
2
0
0
1
1
1
1
2
2
1
=
0
1
2
我们利用 LabVIEW 中求解线性方程函数可以容易得出向量解 abc 和 def
再利用以下公式即可根据 A 坐标系任意已知 x y 坐标得出 B 坐标系对应的 x’y’坐标了。
ax+by+c=x’
dx+ey+f=y’
- 1
- 2
- 3
前往页