【问题标题】:Eye-In-Hand Calibration OpenCV手眼校准 OpenCV
【发布时间】:2021-07-08 08:31:22
【问题描述】:

我有一个设置,其中(2D)相机安装在机器人手臂的末端执行器上 - 类似于 OpenCV documentation

我想校准相机并找到从相机到末端执行器的转换。 我已经使用这个 OpenCV 指南 Camera Calibration 校准了相机,并在棋盘上获得了未失真的图像。

我的问题是找到从相机到末端执行器的转换。我可以看到 OpenCV 有一个函数,calibrateHandEye(),应该可以实现这一点。我已经有了“gripper2base”向量并且缺少“target2cam”向量。这应该基于棋盘格的大小还是我错过了什么? 任何正确方向的指导将不胜感激。

【问题讨论】:

  • 恕我直言相机校准是不够的,因为您只修复了相机系统的内部结构。要获得相机的外部方向,您必须知道校准图案(棋盘)的大小。在 OpenCV 文档中提到的paper 中,他们称之为校准块世界坐标系(CW,第 347 页,图 2)。这些应该是target2cam 向量(我还没有使用机械臂)。
  • 前段时间我发现了 George Hotz 的一个有趣的代码“live coding SLAM”视频。有很多有用的技巧。看看
  • 你是在 ROS 中实现一切吗,在 ROS 中我们可以设置相机的 TF 和 EF。
  • 它不是 ROS - 它是一个纯 python 实现

标签: python opencv camera-calibration robotics


【解决方案1】:

你已经接近答案了。

是的,它基于棋盘的大小。但是这个函数不是直接获取这些参数和图像,而是使用 target2cam。如何获得target2cam?只需将您的机械臂移到棋盘上方,相机就可以看到棋盘并拍照。从棋盘和相机内部函数的图片中,您可以找到 target2cam。从棋盘计算外在已经在opencv中给出。

在不同的机器人姿势下重复几次,并收集多个 target2cam。把它们放在 calibrateHandEye() 上,你就会得到你需要的。

【讨论】:

  • 谢谢!是的,我终于发现相机校准还考虑了棋盘的大小 - 但是这是我最初在指南中错过的常数,因为他们只是插入了一个值。
猜你喜欢
  • 2018-04-15
  • 2018-11-24
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
相关资源
最近更新 更多