如何利用openCV在世界坐标系中确定物体的位置

如何利用openCV在世界坐标系中确定物体的位置,opencv,computer-vision,robotics,object-recognition,keypoint,Opencv,Computer Vision,Robotics,Object Recognition,Keypoint,我正试图为我大学的机器人班实施一项任务。 该项目的主要任务是用KUKA youbot机器人抓取杯子 我发现的主要问题是关于项目的视觉计算部分。 更准确地说,我使用的是Kinect(将安装在机器人手臂上),一开始我想用这个程序来找到杯子: 在开始之前拍一张杯子的照片(离它很近) 使用openCV计算图像的关键点,并从安装在机械臂上的kinect实时计算实时图像的关键点 此时,我可以使用OpenCV映射两个图像之间的关键点 使用同时从kinect获取的3d点云图像实时映射图像的2d点。计算3d图像中

我正试图为我大学的机器人班实施一项任务。 该项目的主要任务是用KUKA youbot机器人抓取杯子

我发现的主要问题是关于项目的视觉计算部分。 更准确地说,我使用的是Kinect(将安装在机器人手臂上),一开始我想用这个程序来找到杯子:

  • 在开始之前拍一张杯子的照片(离它很近)
  • 使用openCV计算图像的关键点,并从安装在机械臂上的kinect实时计算实时图像的关键点
  • 此时,我可以使用OpenCV映射两个图像之间的关键点
  • 使用同时从kinect获取的3d点云图像实时映射图像的2d点。计算3d图像中的质心,从而知道杯子的位置
  • 问题是,如果实时图像离关键点很近(如1米),并将其与其他对象进行映射,则效果良好,否则,特别是在场景中存在其他对象时,openCV算法检测到其他重要特征,而映射不起作用

    我用这个:

    正如你在第一个机器人的两张照片中看到的,它靠近杯子,一切都很好, 在这里,我们离杯子很远,什么都不管用。

    我想知道是否有其他更实用的方法用于我的项目。也许是基于模型而不是我最初的想法

    谢谢
    Luca

    您可以尝试使用棋盘进行校准,使用以下函数:findChessboardCorners()和caliblecamera()。使用这些函数,您可以创建坐标系,并从图像中找到对象在现实世界中的位置

    您是否尝试使用相机校准,我的技巧是将您的拍摄设备(kinect或相机)固定到您的机械臂上,而不是固定到您的机械臂上,以便您可以轻松地计算位置!你的意思是将kinect固定在要抓取的物体(杯子)附近,将世界坐标的中心置于机器人的初始位置,并将kinect校准到机器人?是的,我会这么说,实际上在哪里固定摄像机并不重要,但是校准会给你像素和真实世界坐标之间的数学联系,顺便说一句,你肯定需要更多的特征单应来识别你的杯子,我猜这将是许多算法的组合,所以你可以确定它在房间里的什么地方好的,谢谢!我会努力做到这一点。