使用Kinect和EMGU(OpenCV包装器)对机器人进行本地化

时间:2013-03-26 20:32:53

标签: c# opencv localization kinect

我正在使用小型WPF桌面应用来跟踪机器人。我的桌面上有一个Kinect for Windows,我可以执行基本功能并运行深度相机流和RGB相机流。

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

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

问题在于我以前从未使用过计算机视觉,而且它实际上是我的第一个,我没有坚持到最后期限而且我更愿意学习所有相关的东西完成这个项目。

我正在寻找细节,解释,提示,链接或教程以满足我的需求。

感谢。

2 个答案:

答案 0 :(得分:3)

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

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

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

  • 蒙特卡洛本地化:这个相当简单,但您也应该使用轮式测距仪。 检查this paper以获取基于c#的方法。

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

令人遗憾的是,尽管C ++中存在的库可以非常轻松地完成您的需要,但将它们包装为C#是一项艰巨的任务。但是,如果您可以编写包装器代码,那么90%的工作都已完成,要使用的密钥库是PCLMRPT

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

你必须阅读Slam for Dummies,它将使蒙特卡洛本地化的内容非常清晰。

艰难的现实是,这非常棘手,你很可能最终会自己做。我希望你能深入研究这个广阔的话题,并学习很棒的东西。

有关我编写的更多信息或包装。请在下面评论......: - )

最佳

答案 1 :(得分:1)

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

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