相机标定是机器人视觉中非常重要的一步,可以帮助机器人转换识别到的视觉信息,从而完成后续的控制工作,例如视觉抓取等等。 笔者做过一些机器人手眼标定的工作,在此用尽量简单的语言来描述下机器人手眼标定的流程。本文的目的在于让大家对于相机标定有一个感性的认知,能够知道不同条件下机器人手眼标定的流程,具体的实现方法及技术细节还需要大家自行google。
1. 坐标系标定通用方法
机器人手眼标定其实就是两个坐标系之间转换关系的标定。假设现在有两个坐标系robot和camera,并且我们已知对应的几个固定点
在这两个坐标系的坐标
和
。那么根据坐标系转换公式,我们可以得到:
[1]
上式中
就代表我们希望求出来的相机到机器人的转换矩阵。
和
为补1后的“齐次坐标”:
,这样我们的齐次坐标变换矩阵
便可以同时包含旋转以及平移。
只要学过线性代数的同学应该都清楚,式[1]相当于就是一个N元一次方程,只要点
的个数大于我们求解的转换矩阵维度同时这些点线性不相关,我们便可以通过伪逆矩阵计算出来
:
[2]
计算出来的坐标变换矩阵便可以直接应用于后续的坐标变换。现在计算出来的矩阵允许坐标进行旋转,平移,以及任意方向的缩放。如果想要把这个坐标矩阵变成刚性的变换矩阵,只需要将其左上角的旋转矩阵正交化即可,但是加了这个约束后有可能降低坐标变换精度,即刚性变换矩阵约束太多,造成欠拟合。
当坐标变换存在非线性变换时,我们也可以设计并训练一个神经网络
直接拟合两组坐标之间的关系:
[3]
当然一般情况下,式[2]中的线性矩阵便足以描述机器人和相机之间的坐标转换关系。引入神经网络进行非线性拟合,训练集的拟合精度会非常高,但是当训练点个数不足的时候,会发生过拟合,使得实际测试时拟合精度反而降低。
通过以上的计算我们可以知道,只要我们能够同时测量出来固定点
在两个坐标系的坐标
和
并且测量出来多组数据,我们就可以很方便地计算出来坐标变换矩阵。当然在实际过程中我们有可能很难同时测量出来固定点
在两个坐标系的坐标,在后面我会分相机和机器人的情况讨论如何用一些小trick来尽量实现这个测量目标,如何进行标定,以及如何进行标定精度的验证。
2. 相机放置在固定位置,与机器人分开(eye-to-hand)Fig 1. 机器人eye-to-hand标定。
我们应该养成一个习惯,即遇到问题时先考虑我们的待求量和已知量。如Fig 1 所示。在eye-to-hand的问题中,待求量为相机到机器人基座坐标系的固定转换矩阵