关于机器人视觉的手眼标定的原理,勇哥先放上一些教程资源:
工业现场相机坐标系和机械手坐标系的标定
halcon之手眼标定基本原理
手眼标定的两种方式
手眼标定之9点法
众所周知,目前机器视觉项目,很大一部分都是引导机器人去取料 放料等工作。
这个里面就有个非常重要的工作要做。就是将相机的坐标系 映射到机器人坐标系里面,这样才可以实现视觉配合机器人动作。
通常这种标定使用有多点标定法(俗称九宫格标定法)可以实现将相机坐标系映射到机器人坐标系里面。
在康耐视软件中九宫格算法的结果如下图,它的这个功能,halcon也有对应的算子,请继续往下读。
上面的教程里讲的是手眼标定的原理,真正用起来,只是halcon的几个算子。
下面勇哥附上代码示例:
*标定数据 vector_to_hom_mat2d ([1863.074,1853.723,1858.503,1060.254,2654.917,2659.306,2650.395,1055.019,1064.807]\ ,[1934.265,3530.841,2732.168,2724.893,2736.01,1938.346,3534.78,3523.122,1926.546],\ [76398,66398,71398,71398,71398,76398,66398,66398,76398]\ ,[-40614,-40614,-40614,-35614,-45614,-45614,-45614,-35614,-35614], HomMat2D) *查看qx,qy的值 是否和标定的数据差异太大 affine_trans_point_2d (HomMat2D, 1863, 1934, Qx, Qy) hom_mat2d_to_affine_par (HomMat2D, Sx, Sy, Phi, Theta, Tx, Ty)
hom_mat2d_to_affine_par算子的结果见下图所示:
下面是几个算子的解释,供大家参考:
根据三个以上特征点获取仿射变换矩阵 vector_to_hom_mat2d(::Px,Py,Qx,Qy:HomMat2D) 功能:根据三个以上点对计算仿射变换矩阵,支持旋转、平移、缩放、斜切 Px:(输入参数)原始点组的x坐标 Py:(输入参数)原始点组的y坐标 Qx:(输入参数)变换的目的点组的x坐标 Qy:(输入参数)变换的目的点组的y坐标 HomMat2D:(输出参数)输出仿射变换矩阵 ××××××××××××××××××××××××××××××××××××××××× affine_trans_point_2d(::HomMat2D,Px,Py:Qx,Qy) 功能:对点进行任意二维仿射变换,支持缩放、旋转、平移、斜切 HomMat2D(输入参数):仿射变换矩阵 Px(输入参数):原始点x或行坐标 Py(输入参数):原始点y或列坐标 Qx(输出参数):变换点x或行坐标 Qy(输出参数):变换点y或列坐标 ×××××××××××××××××××××××××××××××××××× 计算仿射变换参数 hom_mat2d_to_affine_par(::HomMat2D:Sx,Sy,Phi,Theta,Tx,Ty) 功能:根据仿射变换矩阵(齐次二维变换矩阵)计算仿射变换参数 HomMat2D(输入参数):仿射变换矩阵 Sx(输出参数):x方向的缩放因子(如果从图像空间变换到物理空间,就是x方向的 像素单量) Sy(输出参数):y方向的缩放因子(如果从图像空间变换到物理空间,就是y方向的 像素单量) Phi(输出参数):旋转角度 Theta(输出参数):斜切角度 Tx(输出参数):沿x方向平移的距离 Ty(输出参数):沿y方向平移的距离
请注意:
机器人的九组坐标位置,一般情况下并不能直接使用机器人的当前坐标位置信息。
原因如下图所示:机器人有两个爪子A头与B头,要吸取的产品在它们的下面,它们的中心并不是机器人J3关节的中心。
这种情况下,你得为A头与B头各创建一个工具坐标。在进行九点标定的时候,我们使用这个工具坐标记录机器人九个点的坐标位置。
有关epson机器人的工具坐标系的创建方法见下面的教程:
EPSON机械手 工具坐标系的标定
netMarkting类库有专门的机器人视觉标定的类,有空勇哥会整理发布出来。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

