寻找机器人在房子里找到自己的方法

Mat*_*oli 47 algorithm robotics robot arduino geolocation

我正在攻击一个真空吸尘器机器人用微控制器(Arduino)来控制它.我想在打扫房间时提高效率.就目前而言,它只是直接转动,当它碰到某些东西时.

但我很难找到最好的算法或方法知道它在房间里的位置.我正在寻找一种保持廉价(低于100美元)而不是复杂的想法(一种不需要计算机视觉博士论文的想法).如有必要,我可以在房间里添加一些不连续的标记.

现在,我的机器人有:

  • 一个摄像头
  • 三个接近传感器(约1米范围)
  • 指南针(暂不使用)
  • 无线上网
  • 如果电池已满或接近空,其速度可能会有所不同
  • 上网本Eee PC嵌入在机器人中

你有任何想法吗?这些问题是否存在任何标准方法?

注意:如果这个问题属于另一个网站,请移动它,我找不到比Stack Overflow更好的地方.

Nat*_*ohl 32

确定机器人在其环境中的位置的问题称为本地化.计算机科学研究人员多年来一直试图解决这个问题,但成效有限.一个问题是你需要相当好的感官输入才能弄清楚你的位置,而网络摄像头(即计算机视觉)的感官输入远非一个已解决的问题.

如果这没有吓到你:我发现最容易理解的本地化方法之一是粒子过滤.这个想法是这样的:

  1. 您可以跟踪一堆粒子,每个粒子代表环境中的一个可能位置.
  2. 每个粒子也有一个相关的概率,告诉你粒子真正代表你在环境中的真实位置是多么自信.
  3. 当您开始时,所有这些粒子可能在整个环境中均匀分布,并被赋予相同的概率.这里的机器人是灰色的,颗粒是绿色的.初始粒子滤波器
  4. 机器人移动时,移动每个粒子.您还可能降低每个粒子的概率,以表示电机实际移动机器人的不确定性.运动后的颗粒
  5. 当您的机器人观察到某些东西(例如用网络摄像头看到的地标,wifi信号等)时,您可以增加与该观察结果一致的粒子的概率.观察后的颗粒
  6. 您可能还希望根据观察结果定期用新粒子替换概率最低的粒子.
  7. 要确定机器人实际位置,可以使用概率最高的粒子,概率最高的粒子,所有粒子的加权平均值等.

如果你搜索一下,你会发现很多例子:例如一个机器人的视频使用粒子过滤来确定它在一个小房间里的位置.

粒子滤波很好,因为它很容易理解.这使得实施和调整它不那么困难.还有其他类似的技术(如卡尔曼滤波器)可以说在理论上更合理,但可能更难以理解.


Pea*_*491 8

二维码

每个房间的QR码海报不仅会制作一个有趣的现代艺术作品,而且相对容易用相机拍摄!

  • 您可以从2D图像的大小和角度获取3D位置(OpenCV可以为您处理该部分).在房间周围放置多个QR码,并且当看到最后一个时,通过进行航位推算来完成视线中的定位. (2认同)

phk*_*ler 6

如果您可以在房间内放置一些标记,可以选择使用相机.如果2个已知标记具有角位移(从左到右),则摄像机和标记位于圆上,该圆的半径与标记之间的测量角度相关.我不记得正确的公式,但标记之间的弧段(在那个圆圈上)将是你看到的角度的两倍.如果标记处于已知高度且摄像机处于固定倾斜角度,则可以计算到标记的距离.只要有足够的标记,这两种方法中的任何一种都可以确定你的位置.使用两者将有助于使用更少的标记.

不幸的是,由于测量误差,这些方法是不完美的.您可以通过使用卡尔曼估计器来合并多个噪声测量值以获得良好的位置估计 - 然后您可以输入一些航位推算信息(这也是不完美的)以进一步优化它.这部分非常深入到数学,但我要说这是要求你在尝试的东西上做得很好.没有它你可以做得很好,但如果你想要一个最佳解决方案(就给定输入的最佳位置估计而言),没有更好的方法.如果你真的想要自主机器人的职业生涯,这将在你的未来发挥很大作用.(

一旦您确定了您的位置,您就可以以任何您想要的模式覆盖房间.继续使用撞击传感器来帮助构建障碍物图,然后你需要设计一种扫描结合障碍物的方法.

不知道你有数学背景呢,但这里书: http://books.google.com/books/about/Applied_optimal_estimation.html?id=KlFrn8lpPP0C


jho*_*ing 5

这不会取代已接受的答案(这很好,谢谢!)但我可能会建议您使用 Kinect 并使用它代替您的网络摄像头,要么通过 Microsoft 最近发布的官方驱动程序,要么使用被黑的驱动程序(如果您的 EeePC 没有) Windows 7(大概没有)。

这样,定位将通过 3D 视觉得到改善。观察地标现在会告诉您地标有多远,而不仅仅是地标位于视野中的哪个位置。


无论如何,公认的答案并没有真正解决如何在视野中挑选地标,只是假设你可以。虽然 Kinect 驱动程序可能已经包含了特征检测(我不确定),但您也可以使用 OpenCV 来检测图像中的特征。