【问题标题】:Localization of a robot using Kinect and EMGU(OpenCV wrapper)使用 Kinect 和 EMGU(OpenCV 包装器)对机器人进行定位
【发布时间】:2013-03-16 19:47:41
【问题描述】:

我正在开发小型 WPF 桌面应用程序来跟踪机器人。我的办公桌上有一台适用于 Windows 的 Kinect,我能够执行基本功能并运行深度摄像头流和 RGB 摄像头流。

我需要跟踪地板上的机器人,但我不知道从哪里开始。我发现我应该使用 EMGU(OpenCV 包装器)

我想要做的是跟踪机器人并使用深度相机找到它的位置。基本上,它用于使用立体三角测量对机器人进行定位。然后使用 TCP 和 Wifi 向机器人发送一些命令,使用 RGB 和深度相机将他从一个地方移动到另一个地方。 RGB摄像头还将用于映射区域内的物体,以便机器人能够采取最佳路径并避开物体。

问题是我以前从未使用过计算机视觉,这实际上是我的第一次,我没有被截止日期所束缚,而且我非常愿意学习所有相关的东西来完成这个项目。

我正在寻找详细信息、解释、提示、链接或教程来满足我的需求。

谢谢。

【问题讨论】:

    标签: c# opencv localization kinect


    【解决方案1】:

    机器人本地化是一个非常棘手的问题,我自己已经苦苦挣扎了几个月,我可以告诉你我取得了什么成就但是你有很多选择:

    • 基于光流的里程计:(也称为视觉里程计):
      1. 从一张图像或特征中提取关键点(我使用了 Shi-Tomashi 或 cvGoodFeaturesToTrack)
      2. 对连续图像执行相同操作
      3. 匹配这些功能(我使用 Lucas-Kanade)
      4. 从 Kinect 中提取深度信息
      5. 计算两个 3D 点云之间的变换。

    上述算法所做的是试图估计两帧之间的相机运动,这将告诉你机器人的位置。

    • Monte Carlo Localization:这比较简单,但您也应该使用车轮里程计。 查看 this paper 了解基于 c# 的方法。

    上述方法使用概率模型来确定机器人的位置。

    可悲的是,尽管 C++ 中存在库可以很容易地完成您需要的工作,但为 C# 包装它们是一项艰巨的任务。但是,如果您可以编写包装器,那么您的工作就完成了 90%,要使用的关键库是 PCLMRPT

    最后一个选项(目前为止最简单,但最不准确)是使用 Kinect SDK 1.7 中内置的 KinectFusion。但是我在机器人定位方面的经验非常糟糕。

    你必须阅读Slam for Dummies,它会让关于蒙特卡洛本地化的事情非常清楚。

    严峻的现实是,这非常棘手,您很可能最终会自己动手。我希望你能深入研究这个庞大的话题,并且会学到很棒的东西。

    更多信息,或我写的包装。只需在下面发表评论... :-)

    最好的

    【讨论】:

    • 感谢您的回复。实际上,我使用 kinect 解决了它。我在每个机器人上使用 2 个小球,一个用于前面,一个用于后面。我正在使用霍夫循环算法跟踪球。它工作正常,将机器人 1 驱动到机器人 2 并遵循领导者示例。不过,我仍在努力。顺便说一句,检查你的一些例子会很好。
    • 很高兴看到你解决了你的问题,我的例子太复杂了:-) 我认为你的方法非常聪明,尽管它仍然不是“无标记”。无论如何。最好的。
    【解决方案2】:

    不确定是否对您有帮助...但我整理了一个 Python 模块可能会有所帮助。

    http://letsmakerobots.com/node/38883#comments

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      • 2016-10-12
      • 1970-01-01
      • 2012-01-27
      相关资源
      最近更新 更多