参考代码:https://github.com/christianwengert/calib_toolbox_addon
所谓手眼系统,就是人眼睛看到一个东西的时候要让手去抓取,就需要大脑知道眼睛和手的坐标关系。如果把大脑比作B,把眼睛比作A,把手比作C,如果A和B的关系知道,B和C的关系知道,那么C和A的关系就知道了,也就是手和眼的坐标关系也就知道了。
相机知道的是像素坐标,机械手是空间坐标系,所以手眼标定就是得到像素坐标系和空间机械手坐标系的坐标转化关系。
在实际控制中,相机检测到目标在图像中的像素位置后,通过标定好的坐标转换矩阵将相机的像素坐标变换到机械手的空间坐标系中,然后根据机械手坐标系计算出各个电机该如何运动,从而控制机械手到达指定位置。这个过程中涉及到了图像标定,图像处理,运动学正逆解,手眼标定等。
常用的标定方法有:九点标定
九点标定:
九点标定直接建立相机和机械手之间的坐标变换关系。
让机械手的末端去走这就9个点得到在机器人坐标系中的坐标,同时还要用相机识别9个点得到像素坐标。这样就得到了9组对应的坐标。
由下面的式子可知至少需要3个点才能求出标定的矩阵。
(1)、标定,Halcon中进行9点标定的算子
%前面求出图像坐标
area_center(SortedRegions,Area,Row,Column) %
Column_robot := [275,225,170,280,230,180,295,240,190]
%机器人末端运动到9点的列坐标
Row_robot := [55,50,45,5,0,-5,-50,-50,-50]
%机器人末端运动到9点的行坐标
vector_to_hom_mat2d(Row,Column,Row_robot,Column_robot,HomMat2D)
%求解变换矩阵,HomMat2D是图像坐标和机械手坐标之间的关系
(2)、求解
affine_trans_point_2d(HomMat2D,Row2,Column2,Qx,Qy)
%由像素坐标和标定矩阵求出机器人基础坐标系中的坐标
一些特殊情况的解释:
有些情况中我们看到相机固定在一个地方,然后拍照找到目标,控制机械手去抓取,这种就很好理解。我们也叫做eye-to-hand
还有一种情况是相机固定在机械手上面,这种情况的标定过程实际上和相机和机械手分离的标定方法是一样的,因为相机拍照时,机械手会运动到相机标定的时候的位置,然后相机拍照,得到目标的坐标,再控制机械手,所以简单的相机固定在末端的手眼系统很多都是采用这种方法,标定的过程和手眼分离系统的标定是可以相同对待的。我们也叫做eye-in-hand