手眼标定OpenCV

3
我有一个设置,其中一台(2D)相机安装在机器人臂的末端执行器上 - 类似于OpenCV 文档: enter image description here 我想校准相机并找到从相机到末端执行器的转换。 我已经使用这个OpenCV指南 相机校准 对相机进行了校准,使用棋盘图获得未畸变的图像。
我的问题是找到从相机到末端执行器的变换。我看到OpenCV有一个函数calibrateHandEye(),应该可以实现这个目标。我已经有了“gripper2base”向量,但缺少“target2cam”向量。这是否应该基于棋盘格方块的大小或者我还缺少什么?任何指导都将不胜感激。

在我看来,仅进行相机标定是不够的,因为这只能修正相机系统的内部参数。要获取相机的外部定位,您需要知道标定图案(棋盘格)的大小。在OpenCV文档中提到的那篇论文中,他们称之为标定块世界坐标系(CW,第347页,图2)。这些应该是“目标到相机”向量(我还没有使用过机器人手臂)。 - Grillteller
我之前发现了George Hotz的“实时编码SLAM”视频中的有趣代码。其中有许多有用的技巧。你可以看一下。 - Mario Abbruscato
你是否在ROS中实现了所有功能?在ROS中,我们可以设置相机和EF的TF。 - Arjun Kumar
这不是ROS - 这是一个纯Python实现。 - ChrisRun
1个回答

4

你已经接近答案了。

是的,它基于棋盘的大小。但是这个函数不直接使用这些参数和图片,而是采用了target2cam。如何获得target2cam?只需要将机器人臂移动到棋盘上方,使相机能够看到棋盘并拍照。通过棋盘和相机内参的图片,可以找到target2cam。从棋盘中计算外参已在opencv中给出。

在不同的机器人姿势下多次重复此操作,并收集多个target2cam,将它们放入calibrateHandEye()中,即可得到所需结果。


1
谢谢!是的,我终于发现相机校准也考虑了棋盘的大小 - 但这是一个常数,在指南中我最初错过了它,因为他们只插入了一个值。 - ChrisRun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接