关于机器人视觉的手眼标定的原理,勇哥先放上一些教程资源:
众所周知,目前机器视觉项目,很大一部分都是引导机器人去取料 放料等工作。
这个里面就有个非常重要的工作要做。就是将相机的坐标系 映射到机器人坐标系里面,这样才可以实现视觉配合机器人动作。
通常这种标定使用有多点标定法(俗称九宫格标定法)可以实现将相机坐标系映射到机器人坐标系里面。
在康耐视软件中九宫格算法的结果如下图,它的这个功能,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机器人的工具坐标系的创建方法见下面的教程:
netMarkting类库有专门的机器人视觉标定的类,有空勇哥会整理发布出来。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!
#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。如果需要本贴图片源码等资源,请向勇哥索取。