在基于双目立体视觉的工业机器人抓取系统中涉及三个坐标系:世界坐标系(现实世界中的坐标位置)、机器人坐标系(以机器人基座标 标识的坐标位置)和 相机坐标系(以双目相机中某相机光心位置为原点,光轴作为参考坐标轴的坐标表示)。这篇博客主要介绍立体视觉系统中坐标转化,以及实际操作中如何进行相机的标定和机器人的标定。
这篇博客主要是博主的实验流程记录,代码托管于github。
1. 相机标定:张正友标定法
P-Chao / calibration
Robot Stereo Camera Calibration Matlab ToolBox
以上是博主修改过的加州理工大学相机标定工具箱,其中有一些功能(主要是标定结果保存成二进制文件,配合C++程序调用)需要和博主的另一个工程结合使用,这个工程比较繁杂,不需要C++部分的直接忽略即可:
P-Chao / RVAF
Robot Vision Algorithm Framework
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 相机标定操作流程
- 将相机标定工具箱toolbox加入工具路径setpath
- 如果采集的图像不是bmp格式,请使用png2bmp将其转换为bmp格式,并将左右图像分别存放在不同的文件夹(left/和 right/中),左右对应图像文件名相同
- 将bmp图像拷贝到工具箱所在目录下,此时的图像带有前缀L.bmp和R.bmp
- 新建left\和right\文件夹,运行stereoimage2samename.m,将图像进行移动和改名,并将原先的L.bmp和R.bmp删除
- 运行extractstereoimage.m,将left和right文件夹中的图像移动到当前文件夹中,并按照1234..顺序进行命名
- 运行calib_gui,输入left图像,对左相机进行标定,对结果mat文件重命名,添加后缀left,然后输入right,对右相机进行标定,对mat进行重命名
- 运行stereo_gui,进行双目标定,标定好之后需要运行一次矫正(点击矫正按钮),该操作将添加矫正需要的标量到mat文件中,否则无法生成矫正文件,然后如果不需要可以删除矫正后的图像文件
- 运行saveRectifyResult,生成立体矫正需要的.dat文件
工具的GUI界面如下图所示,操作方式为空格键跳到下一个图像并勾选对应点。使用ASDW微调左图的标注点,使用上下左右方向键微调右图标注点。
下图是最终的标定误差曲线,该误差是由广义逆计算的坐标和实际坐标相减得到。
2. 机器人标定:广义逆
2.1 机器人标定原理
博主采用的是广义逆的办法,通过双目立体视觉的标定,可以知道图像中点在相机坐标系中的三维坐标,通过移动机器人,在机器人控制器中可以读取机器人坐标。我们同时获取这两个坐标系下同一目标物体的坐标,世界坐标world,相机坐标C (camera),全部写成4*n的齐次坐标形式,那么这两个坐标系之间有如下关系
$$world = M * C$$
其中M为这两个坐标系之间的变换矩阵
$$M = world * C^+$$
其中$latex C^+$为居住很C的广义逆(也称MP逆),在Matlab中科直接用如下代码计算:
M = world * pinv(C);%world = M * C
2.2 机器人标定操作流程
- 新建并清空/left和/right文件夹,将L.bmp与R.bmp的机器人图像拷贝到工具目录
- 运行stereoimage2samename.m,将图像移动到left和right文件夹下
- 运行rectifystereoimage.m,矫正的机器人文件放到了leftRectify和rightRectify文件夹,现在可以删除根目录下的Lbmp和Rbmp了
- 新建pos文件夹,并清空该文件夹
- 运行机器人标定工具,使用空格键切换,使用鼠标点选,使用asdw和上下左右方向键微调左右位置,注意极线约束
- Robot.xls拷贝到工具目录下,第一列为文本格式,或者留空(防止读入无用数据),使得最终读入的数据是表格前三列,分别为x,y,z
- 点击Generate,生成误差图像,生成rectify.dat软件
OK,See You Next Chapter!
对目标跟踪和双目视觉方向的研究比较感兴趣,是否有机会合作呢?
你留的QQ邮箱,加私聊~
你这自己写的代码有些问题, a1_left,a2_left这些也没定义