标定系列二、9点标定以及5点圆心标定过程(代码详解)

一、九点标定过程

1.算法原理

        9点标定就是通过9个点计算出相机坐标系到机械手坐标系下的一个仿射变换,(实际上空间中的二维平面的仿射变换只需要3个点就足够了)。在实际应用过程中,需要获取像素下特征点的坐标和对应机械手的坐标。联立方程组求解即可得到对应仿射变换的矩阵,实际应用场景主要分为眼在手上和眼在手外,下面具体介绍使用过程:
(1)眼在手外

                     8960fe10fc7a485b8ec4a9321367e20d.png

      使用场景如图所示,该场景是一个上相机,9点标定经常是四轴机械臂或者是通过舵机搭建的X,Y两方向的运行机构与相机相互配合使用。无论是眼在手上还是眼在手外,目的都是获取对应像素点的坐标和机械手的坐标,然后通过数学计算,得到转换矩阵。

眼在手外获取机械手坐标的方式主要有两种:

第一种:1.准备一张A4纸,或者标定板也行

     96e21086b24541409cd533c23e04bb34.png,  20ab2cd6d3a54821bf9c46ede543b1c3.png

 

获取图像中9个圆的圆心的像素位置,存储起来,点的存储顺序是Z字形。

2.在机械手上加装针尖,用针尖按Z字形顺序依次去戳每个圆的圆心,并以此记录每个机械手的坐标。

该种方法标定效果误差较大,因为针尖去戳圆心的过程是肉圆观察得到的,结果并不是很准确的。

第二种:1,机械手吸取物料固定。

            f06ed0096ccb43bcbcae566e6de38d77.png   8f9b07796f50400fbdafd1755aaccd12.png

 在相机视野中能观察提取到Mark(特征)点,对于Mark点是物料上稳定的特征,容易获取,类似交点,圆心等等。

2.机械手带动物料按照右图方式依次运动,获取9个点的机械手坐标和像素坐标。

该标定方法效果准确,但是需要注意的两点,一个是标定视野范围一定大于机械手的工作范围,

其中红色为视野中标定的范围,黑色为机械手的在视野中的工作范围,否在超过标定范围的误差较大,而且难预测。

                                                   6e76a5321bac437d99a391b4aca7b479.png

另外,在标定过程中,实际的工作面高度和标定高度尽量一致,因为除了圆心镜头,我们使用的工业相机会随着高度变化,X,Y的坐标也会有误差。

(2)眼在手上

                      c92c9eb9cacd4b5ea8828f6f369433d3.png

该种标定方式是机械手和相机不发生相对变化,让物料固定不动,相机依次去拍物料,获取Mark点的特征和对应机械手的坐标,存储起来。

2.代码介绍

*计算仿射变换矩阵
*机械手9点坐标X,Y数组
Rx=[] 
Ry=[]
*像素坐标的x,y数组
px=[]
py=[]
vector_to_hom_mat2d (px, py, Rx, Ry, HomMat2D)


*计算仿射变换矩阵的RMS
affine_trans_point_hommat2d(HomMat2D,px,py,Rx_t,Ry_t)

其中Rx_t,Ry_t为仿射变换后对应计算出的机械手坐标。
Rx, Ry为实际标定时机械手的坐标,计算出距离偏差。

distance_pp(Rx,Ry,Rx_t,Ry_t,distance)
其中distance存储9点的坐标偏差

tuple_mult(distance,distance,data1)
tuple_sum(data1,data_end)
tuple_sqrt(data_end,RMS)

二、五点旋转中心标定过程

1.算法原理 

     在标定旋转中心之前应该理解为什么要标定旋转中心,通过上文可以对9点标定有个大概的理解,9点标定其实就是点与点的映射关系。当我们的旋转中心,吸嘴,特征点在一致的时候,我们可以想象成各点都是绕着特征点旋转,此时则无需标定旋转中心如下图所示:

             f5b1bc1ca621445087056014fee365fd.png

但实际应用中,吸嘴和旋转中心并不一致,伴随着旋转中心转动,特征点也会移动,此时机械手的坐标并未发生并未发生变换,如果仍使用点点映射求出对应机械手坐标是错误,正确的方法是先绕旋转中心回正,在计算特征点对应的坐标。

0de4b2e71b7648c5aa6745cd9da42c0a.png

 

标定旋转中心的方法:

机械手固定物料,在相机下依次转动5个角度,获取5个位置特征点的像素坐标,通过拟合圆心,求出圆心对应的像素坐标,在通过映射关系得到圆心对应机械手的坐标。

                                               0785b0037a624bcd93021cf93a08e687.png

2.代码介绍

*将5个点对应像素坐标生成多线条轮廓
gen_contour_polygon_xld

*将轮廓进行拟合生成圆,求出对应圆心坐标
fit_circle_contour_xld

 

 

 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年12月11日
下一篇 2023年12月11日

相关推荐