在基于双目立体视觉的工业机器人抓取系统中涉及三个坐标系:世界坐标系(现实世界中的坐标位置)、机器人坐标系(以机器人基座标 标识的坐标位置)和 相机坐标系(以双目相机中某相机光心位置为原点,光轴作为参考坐标轴的坐标表示)。这篇博客主要介绍立体视觉系统中坐标转化,以及实际操作中如何进行相机的标定和机器人的标定。

这篇博客主要是博主的实验流程记录,代码托管于github。

1. 相机标定:张正友标定法

以上是博主修改过的加州理工大学相机标定工具箱,其中有一些功能(主要是标定结果保存成二进制文件,配合C++程序调用)需要和博主的另一个工程结合使用,这个工程比较繁杂,不需要C++部分的直接忽略即可:

1.1 工具箱文件说明

  • Calibration.m,演示抵用工具箱进行三角坐标转换
  • png2bmp.m,将png文件转化为bmp文件
  • extractstereoimage.m,将两个文件夹中的双目图像(left\和right\)提取到一个文件夹中,并按照数字顺序标号命名
  • movesavenameimage.m,将指定前缀的左右图像,从两个文件夹中提取到同一个文件夹中,并将前缀改为left和right
  • stereoimage2samename.m,将数据文件夹中的L.bmp和R.bmp双目图像(可以是在两个文件夹中,要修改代码注释),移动到left\和right\并按照顺序标号,修改名字去掉前缀
  • rectifystereoimage.m,对left\和right\中的双目图像,矫正到leftRectify\和rightRectify\,需要在代码中指定是否转换灰度图像
  • robotcamera_ananysis.m,显示机器人标定的数值结果和误差曲线
  • robotcamera_gui,机器人标定GUI工具
  • saveRectifyResult.m,将矫正需要的数据保存到rectify.dat以方便其它程序读取

1.2 相机标定操作流程

  1. 将相机标定工具箱toolbox加入工具路径setpath
  2. 如果采集的图像不是bmp格式,请使用png2bmp将其转换为bmp格式,并将左右图像分别存放在不同的文件夹(left/和 right/中),左右对应图像文件名相同
  3. 将bmp图像拷贝到工具箱所在目录下,此时的图像带有前缀L.bmp和R.bmp
  4. 新建left\和right\文件夹,运行stereoimage2samename.m,将图像进行移动和改名,并将原先的L.bmp和R.bmp删除
  5. 运行extractstereoimage.m,将left和right文件夹中的图像移动到当前文件夹中,并按照1234..顺序进行命名
  6. 运行calib_gui,输入left图像,对左相机进行标定,对结果mat文件重命名,添加后缀left,然后输入right,对右相机进行标定,对mat进行重命名
  7. 运行stereo_gui,进行双目标定,标定好之后需要运行一次矫正(点击矫正按钮),该操作将添加矫正需要的标量到mat文件中,否则无法生成矫正文件,然后如果不需要可以删除矫正后的图像文件
  8. 运行saveRectifyResult,生成立体矫正需要的.dat文件

工具的GUI界面如下图所示,操作方式为空格键跳到下一个图像并勾选对应点。使用ASDW微调左图的标注点,使用上下左右方向键微调右图标注点。

下图是最终的标定误差曲线,该误差是由广义逆计算的坐标和实际坐标相减得到。

2. 机器人标定:广义逆

2.1 机器人标定原理

博主采用的是广义逆的办法,通过双目立体视觉的标定,可以知道图像中点在相机坐标系中的三维坐标,通过移动机器人,在机器人控制器中可以读取机器人坐标。我们同时获取这两个坐标系下同一目标物体的坐标,世界坐标world,相机坐标C (camera),全部写成4*n的齐次坐标形式,那么这两个坐标系之间有如下关系

$$world = M * C$$

其中M为这两个坐标系之间的变换矩阵

$$M = world * C^+$$

其中\(C^+\)为居住很C的广义逆(也称MP逆),在Matlab中科直接用如下代码计算:

2.2 机器人标定操作流程

  1. 新建并清空/left和/right文件夹,将L.bmp与R.bmp的机器人图像拷贝到工具目录
  2. 运行stereoimage2samename.m,将图像移动到left和right文件夹下
  3. 运行rectifystereoimage.m,矫正的机器人文件放到了leftRectify和rightRectify文件夹,现在可以删除根目录下的Lbmp和Rbmp了
  4. 新建pos文件夹,并清空该文件夹
  5. 运行机器人标定工具,使用空格键切换,使用鼠标点选,使用asdw和上下左右方向键微调左右位置,注意极线约束
  6. Robot.xls拷贝到工具目录下,第一列为文本格式,或者留空(防止读入无用数据),使得最终读入的数据是表格前三列,分别为x,y,z
  7. 点击Generate,生成误差图像,生成rectify.dat软件

OK,See You Next Chapter!

2 对 “双目立体视觉中的相机标定与机器人位置标定”的想法;

  1. 对目标跟踪和双目视觉方向的研究比较感兴趣,是否有机会合作呢?

发表评论

电子邮件地址不会被公开。 必填项已用*标注