50

我正在破解一个真空吸尘器机器人,用微控制器(Arduino)控制它。我想在打扫房间时提高效率。目前,它只是直行并在碰到什么东西时转身。

但是我很难找到最好的算法或方法了解它在房间中的位置。我正在寻找一种既便宜(不到 100 美元)又不复杂(不需要计算机视觉博士论文)的想法。如有必要,我可以在房间里添加一些离散标记。

现在,我的机器人有:

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

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

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

4

10 回答 10

36

确定机器人在其环境中的位置的问题称为定位。计算机科学研究人员多年来一直试图解决这个问题,但收效甚微。一个问题是你需要相当好的感官输入来确定你在哪里,而来自网络摄像头(即计算机视觉)的感官输入远不是一个已解决的问题。

如果那没有吓跑你:我发现最容易理解的定位方法之一是粒子过滤。这个想法是这样的:

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

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

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

于 2011-06-29T14:09:28.723 回答
8

二维码

每个房间的二维码海报不仅可以制作出有趣的现代艺术作品,而且相对容易被相机发现!

于 2011-06-29T14:02:29.323 回答
6

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

不幸的是,由于测量误差,这些方法并不完美。您可以通过使用卡尔曼估计器结合多个噪声测量来获得良好的位置估计来解决此问题 - 然后您可以输入一些航位推算信息(这也是不完善的)以进一步完善它。这部分非常深入地研究数学,但我想说这是在你尝试的事情上做得很好的要求。没有它你可以做得很好,但如果你想要一个最佳解决方案(就给定输入的最佳位置估计而言),没有更好的方法。如果您真的想从事自主机器人技术的工作,那么这将在您的未来发挥重要作用。(

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

不确定您是否有数学背景,但这是本书: http: //books.google.com/books/about/Applied_optimal_estimation.html ?id=KlFrn8lpPP0C

于 2011-06-29T13:58:37.370 回答
5

这并不能取代已接受的答案(太好了,谢谢!)但我可能会建议您购买 Kinect 并使用它而不是您的网络摄像头,或者通过微软最近发布的官方驱动程序,或者如果您的 EeePC 没有,则使用被黑的驱动程序Windows 7(可能没有)。

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


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

于 2011-06-30T11:37:42.250 回答
3

一种解决方案是使用类似于“洪水填充”(维基百科)的策略。为了让控制器准确地执行扫描,它需要距离感。您可以使用接近传感器校准您的机器人:例如运行电机 1 秒 = xx 接近度变化。有了这些信息,您可以将您的机器人移动一段精确的距离,并使用洪水填充继续清扫房间。

于 2011-06-29T12:35:45.777 回答
3

假设您不是在寻找通用解决方案,您实际上可能知道房间的形状、大小、潜在障碍物位置等。当机器人存在时,工厂没有关于其未来操作环境的信息,这会迫使它效率低下从一开始。如果是这种情况,您可以对该信息进行硬编码,然后使用基本测量(即轮子上的旋转编码器 + 指南针)来精确确定其在房间/房屋中的位置。在我看来,不需要 wifi 三角测量或疯狂的传感器设置。至少作为一个开始。

于 2011-06-29T12:50:57.693 回答
1

有没有考虑过GPS?地球上的每个位置都有一个唯一的 GPS 坐标 - 分辨率为 1 到 3 米,并且使用差分 GPS 你可以下降到 10 厘米以下的范围 - 更多信息在这里:

http://en.wikipedia.org/wiki/Global_Positioning_System

并且 Arduino 确实有很多 GPS 模块选项:

http://www.arduino.cc/playground/Tutorials/GPS

在你收集了房子的所有关键坐标点之后,你可以为 arduino 编写程序来将机器人从一个点移动到另一个点(如上收集的)——假设它会做所有这些避障的事情。

更多信息可以在这里找到:

http://www.google.com/search?q=GPS+localization+robots&num=100

在列表中我发现了这个 - 专门针对你的情况:Arduino + GPS + 本地化:

http://www.youtube.com/watch?v=u7evnfTAVyM

于 2011-07-01T00:56:52.740 回答
1

我也在思考这个问题。但我不明白为什么你不能三角测量?在伺服系统上有两个或三个信标(例如不同频率的红外 LED)和一个红外旋转传感器“眼睛”。然后,您可以几乎不断地确定您的位置。我希望准确度在低厘米范围内,而且价格便宜。然后,您可以轻松映射您遇到的任何东西。

也许您也可以使用信标光束中的任何中断来绘制距离机器人很远的物体。

于 2013-05-22T11:55:09.123 回答
1

使用超声波传感器 HC-SR04 或类似产品。如上所述,用传感器和房间部分用二维码感知墙壁与机器人的距离。

当您靠近墙壁时,转动 90 度并按照机器人的宽度移动,然后再次转动 90 度(即左转 90 度)并再次移动您的机器人,我认为这会有所帮助:)

于 2014-10-30T13:34:19.930 回答
1

你有你说的相机吗?你考虑过看天花板吗?两个房间具有相同尺寸的可能性很小,因此您可以识别您所在的房间,房间中的位置可以从到天花板边界的角距离计算,方向可能可以通过门的位置来提取。

这将需要一些图像处理,但是真空吸尘器缓慢移动以进行有效清洁将有足够的时间进行计算。

祝你好运 !

于 2015-01-12T20:37:03.703 回答