一、手眼标定的用途
在实际的自动化工业生产中,我们常需要机械手和相机配合实现物料定位、摆正等操作过程,手眼标定的目标就是实现相机坐标系和机械手坐标系的空间映射,通俗的讲相机相当于眼睛,机械手相当于手,眼睛看到的地方机械手能够走到,在此过程中我们运用一种常见的二维标定方法9点法实现手眼标定。
简单介绍标定过程中的一些概念::
像素坐标系:像素在图像中的位置,一般坐标原点是图像的左上角,单位是像素。
相机坐标系:相机坐标系中相机中心是坐标系原点,垂直对应图像的正中心,单位是毫米。
机械手坐标系:相对于机械手基座而言,坐标也就是机械手末端法兰相对于基座的坐标,根据实际应用会建立工具坐标系,无论是哪种都是相对于基座而言。
定位过程:是根据特征点的像素坐标系仿射到机械手坐标系中,机械手能够在物料一致位置进行吸放料。
摆动过程:机械手吸取物料位置不一定,但是每次都能准确摆进目标位置,可以看做治具固定不动,物料上料上料过程中位姿不确定,但是能吸取物料准确摆入治具中。
二、空间放射变换介绍
空间的放射变换简单的介绍为一个空间坐标映射到另一个空间中,两个空间中的点有一一对应的关系,二维空间可以理解两个平面间的坐标关系。常见的映射关系主要有三种,平移、旋转、缩放。主要就是旋转问题,一定要记住是相对于基坐标系旋转,而不是相对自身工具坐标系而言,对于旋转平移矩阵,是先旋转再平移。仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。仿射变换能够保持图像的“平直性”,包括旋转,缩放,平移,错切操作。一般而言,仿射变换矩阵为2*3的矩阵,第三列的元素起着平移的作用,前面两列的数字对角线上是缩放,其余为旋转或者错切的作用。
具体表达式为:
其中A为变换后坐标矩阵,C为原始坐标矩阵,B是仿射变换矩阵,有6个未知量,假设目标图形(x , y)为轴心顺时针旋转θ弧度到目标图像,则变换矩阵对应的变量为:所以前两列的4个未知量a,b,d,e是起到旋转的作用,第三列的2个未知量c,f起到了平移的作用。仿射变换的方程组有6个未知数,所以要求解就需要找到3组映射点,三个点刚好确定一个平面。
对于3维空间放射变换是一个4*4的矩阵,同理如果要求出4维空间变换则需要4个对应点,对于刚体变换(没有大小缩放),二维平面变换则只需要2个点,三维空间刚体变换则只需要3个点。
简单举例介绍:
在halcon中常用代码:
*生成一个放射变换用的矩阵
hom_mat2d_identity
*在初始化矩阵的基础上进行旋转、平移、缩放变换
hom_mat2d_translate
hom_mat2d_scale
hom_mat2d_rotate(先绕原点旋转,然后再平移到指定的旋转中心)
*执行放射变换的算子
affine_trans_image
affine_trans_regione
affine_transe_xld
*点与点生成对应矩阵(起码传进去三个点)
vector_to_hom2d
*点和角度进行旋转平移变换
vector_angle_to_rigid
(其中第一个点是旋转中心,绕旋转中心进行旋转再将旋转中心平移到对应点位)
三、手眼标定的类型
常见的手眼标定类型根据相机所在位置可以分为两类:
1.眼在手上:相机和机器手绑定在一个位置,机器手移动,相机也跟着移动,相机和机械手末端共同运动,不发生相对变化。在标定时候标定板固定不动,机械手带着相机共同运动。
2.眼在手外:相机放置一个固定的位置,与机器人基坐标系相对位置不变。
关于二维三维手眼标定的相关内容,我会在后续文章中陆续更新。
根据相机的朝向可以分为:
1.上相机:相机在正上方,从上往下拍目标物。
2.下相机:相机在下方,从下往上拍,可以避免机械手干涉影响。
四、手眼标定的目的
从我上述这么多描述可以知道,手眼标定目的可以总结为:
1.求解X、Y方向的分辨率;
2.求解图像到X、Y方法的放射变换;
3.根据变换矩阵来实现像素坐标与实际坐标的转换;