3D手眼标定

        为什么叫3D手眼标定? 因为工业视觉上,有个常用标定算法叫“九点标定”,那个算法比较简单,求解的“平面上的映射关系”。本文的3D手眼标定既可以用于2D,也可以用于3D。

       一般来说,手眼标定之前,已经做好了相机标定,我这里将手眼标定和单目标定放在一起做。因为手眼标定需要知道相机相邻两帧的位姿,我这里直接用OpenCV单目标定API: calibrateCamera可直接输出相机位姿;也就是做手眼标定的同时,也将单目标定做了。你可能会说:手眼标定一般采集20组数据就够了,而单目标定需要将近一百张棋盘;其实,如果用高精度定制的标定板,20张棋盘也足够了(无论是Halcon、Matlab标定工具箱、还是OpenCV标定,经过我实践,精度都可以到达0.0x个像素级别;其中,Halcon精度是最高的,它用的不是张正友棋盘法,是TSAI两步法。TSAI这个人比较叼,在下文的手眼矩阵求解过程中,还会见到他)。

       有关于提前做了相机标定,再做手眼标定也是可以的。这情况下,也可以借助棋盘求解相机位姿,其实就是构建PNP问题。好了,先看以下三幅图,了解下手眼矩阵 AX=XB (眼在手上)的推导:

完整PPT:链接:https://pan.baidu.com/s/1pmRkmbsvR6CiVjm2cLOKuQ 提取码:l94b

 

 

 

 

       到此,应该知道,手眼标定的核心问题就是求解矩阵:AX=XB,其中A是从示教器上读取的位姿并作composeB与相机运动位姿有关。如下图,是一张从机械手臂示教器上读取的数据,(x y z A B C) 表示机械手臂末端到基坐标系的位姿;其中 x y z表示位移, A B C表示姿态,这里用的是欧拉角(旋转次序ZYZ,ZYZ是什么鬼次序,参考:https://blog.csdn.net/uranus1992/article/details/85788205),不同品牌机械手臂可能姿态形式不同,不过最终都要依据相应公式转为旋转矩阵。

 

      好了,我们已经知道公式,现在开始可以撸代码了,这里适用OpenCV、Eigen等库进行。

标定算法(TSAI、Navy)对比,代码实现:链接:https://pan.baidu.com/s/1NlZ_3HkrZdyrSEz8__kpyw 提取码:a0wf 复制这段内容后打开百度网盘手机App,操作更方便哦

 

 

 

 

 

 

 

参考资料:

 

posted @ 2020-07-01 10:51  佚名12  阅读(126)  评论(0编辑  收藏  举报