Cognex InSight 相机实现视觉引导机械手&视觉校准&九点标定

发布时间 2023-08-25 14:58:17作者: 一杯清酒邀明月

1. 校准

1. 非线性校准的作用:主要是为了消除镜头的径向畸变、以及相机非垂直安装引起的透视变形;

 2. 校准工具:校正板&标定板(这里只介绍前2种,因为InSight相机不支持DataMatirx标定板)

3. 标定板的选择标准:需要根据项目现场的FOV确定标定板尺寸和单元大小

棋盘格标定板:

  1. 获取的图像必须包含至少9个完整图块。
  2. 采集图像中的图块大小必须至少为15x15像素。

网格标定板:

  1. 点的直径必须在10到40像素之间。
  2. 网格必须包含不少于16个点且不超过2000个点。
  3. 点中心之间必须至少有8个像素。

4. 校准的意义:

 5. 在InSight中校准图像:
① 首先相机已经固定,然后在被测/被定位的零件上放置标定板,取像;
② 插入CalibrateGrid工具,然后分别设置以下三步:

 所谓的校准其实就是,将获取的像素空间映射到原始校准空间的位置变换

 ③ 插入TransformImage工具,显示校准后的图像,可以看到对比:

 ④拍一张零件的图片,然后使用FindCircle工具测量零件内径,图像引用上面的TransformImage

2. 机械手引导
1. 相机固定不动方式的标定流程:
一、执行九点标定:将左边的像素坐标(Pixel-X,Pixel-Y)映射到右边的工具坐标系(World-X,World-Y)中,两个坐标之间的转换系数会被保存在CalibrateAdvanced这个工具结构中。

这里的像素坐标也可以引用非线性校准后的坐标。

作用:这个工具的作用在于统一坐标系,并且统一测量单位。

注意引用格式:(像素坐标x,y,世界坐标x,y,像素坐标x,y,世界坐标x,y…)

二、获取标定图像CalibrateImage(A0,CalibrateAdvanced),这样可以获得一个新坐标系(和机械手同一坐标系)下的图像,代替A0。区别在于,后面的工具比如FindPattern引用了CalibrateImage作为输入图像之后,得到的XY则会和工具坐标系下的XY相同,但是如果引用的是A0作为输入图像,那么得到的XY仍然是像素坐标系下的像素单位。

三、注意,如果机器人的TCP被定义在夹爪中心的情况下,不需要计算旋转中心!
寻找机器人的TCP(ToolCenterPoint)中心,一般为第6轴:
确定零件的识别特征点,并确定零件标准抓取位置,机器人抓取工件分别旋转3-5个角度摆放到相机视野内,相机可以得到3-5个坐标值,通过这些坐标值拟合(CircleFromNPoint)圆获得圆心坐标即为旋转中心(也就是TCP的坐标)。

然后计算旋转中心相对于零件坐标的相对坐标位置,也就是下图中的TCx、TCy坐标,为什么要计算相对位置呢?因为零件的位置是变化的,TCP的位置必须跟着零件跑,并且相对位置一定。

如果零件位置(100,100),TCP位置(50,50), 这里TCx和TCy的计算方式为:
TCx=100+(50-100)
TCy=100+(50-100)
其中50-100得到差值旋转中心相对于零件的差值-50,然后零件位置+差值=TCP平移位置

⑤ 计算旋转后的点:其实就是计算当零件发生平移+旋转后,机械手的工具中心TCP应该在何处。
下图中的NCx,NCy就是正确计算后机器人的TCP位置。

1 公式如下:
2 (rx0, ry0)为旋转中心,( x, y)为被旋转的点,(x0,y0)旋转后的点
3 x0= cos (a) * (x-rx0) – sin (a) * (y-ry0) +rx0
4 y0= cos (a) * (y-ry0) + sin (a) * (x-rx0) +ry0

在InSight中验证:
平移

 旋转+平移