1. 认识标定板

  • 这个标定板的规格是 7×7;
  • 标定板原点直径是 1.875mm;
  • 左上角有一个三角区,是用来标识标定板方向的;
  • 一般标定板的厚度也会给出,在坐标系偏移中会用到;
    在这里插入图片描述

2. 生成标定板的描述文件

  • 在开始标定之前,需要先提前生成标定板的描述文件。
  • halcon提供了一个算子:gen_caltab (7, 7, 0.00375, 0.5, ‘D:/Mycaltab.descr’, ‘D:/caltab.ps’)
    • 第1/2个参数是标定板点的行数和列数;
    • 第3个参数是点间距
    • 第4个参数是点直径与点间距的比值,这个标定板的点直径是 1.875mm,点间距是 3.75mm,所以这里填 0.5;
    • 第5个参数是描述文件的保存路径,描述文件可以用记事本打开;
    • 第6个参数是Halcon生成生成了一个标定板图片的保存路径,可以用PS打开并打印出来,不过打印出来的标定纸一般精度不高;

3. 开始标定

  • 打开Halcon的标定助手;
  • 在标定板一栏中,将刚刚生成好的标定板描述文件加载进来;
  • 摄像机参数设置:
    • 摄像机模型,面扫面指面阵相机,线扫描指线扫相机;
    • 除法只求镜头径向畸变的一阶项,但对于畸变不大的FA镜头来说已经够了;
    • 多项式会求出高阶项,对广角镜头和鱼眼镜头或畸变很严重的短焦距大视野的镜头比较有帮助;
    • 如果选择了线扫相机,下面会多出3个参数 Vx,Vy,Vz,
      Vx,Vz: 一般是0
      Vy = 运动速度 / 行频 (行频是指线扫相机每秒扫描行数)
  • 单个像元的宽和高:相机厂家提供。

4. 采集标定板的图像

  • 连接好图像采集助手,放置好标定板,点击采集,如下图就是采集好了一张图像;
    在这里插入图片描述
  • 移动标定板的位置,变换位置和角度,尽量让每一个角度和位置都有标定板出现过。而且还要将标定板垫起一角,取3到4张图像,这样就可以标定出相机的焦距。如果出现抓取失败的情况,则需要将失败的图像删除,否则将不能标定;

  • 当然可以通过下方的质量评估来观察标定的情况:下图就是标定板在视野中的分布情况;
    在这里插入图片描述

5. 得到相机内外参

点击标定按钮后,标定结果就出炉了:

  • 首先halcon计算了一个平均误差,他使用的方法是RMSE:反向均方偏差(平均误差是指使用刚刚得到的标定参数,从世界坐标反向推到出标定板Mark点的像素坐标,计算49个像素点坐标的偏差,所有标定图像都这样计算,然后把所有偏差求均方差);
  • kappa参数就是标定的相机的桶形畸变;
  • 标定结果分为两部分:摄像机参数(也就是内参)和 摄像机位姿(也就是外参)
  • 外参有7个参数:Tx,Ty,Tz,Rx,Ry,Rz,旋转次序(‘gba’, ‘abg’, ‘rodriguez’),这几个参数的具体解释可以参见 F1文档 create_pos 算子;
  • 点击右边的保存按钮,可以分别保存相机的内外参,以后就可以在测量或定位的项目中直接加载进来使用了;
  • 保存参数也有函数:write_cam_par, write_pose;
  • set_origin_pose( : : PoseIn, DX, DY, DZ : PoseNewOrigin) ,这个函数可以在标定好的外参上增加偏移量,比如我想把测量的表面向上移动2mm,那么DZ=-0.002mm,想把测量表面向下平移2mm,DZ=0.002mm;
  • 建立在标定板上的世界坐标系Z轴方向是向下的,所以向上移是负值。再举一个例子,标定板厚度是1mm,想要测量尺寸的工件厚度是1.7mm, 此时DZ=-0.0007mm;