寻找机器人在自己家中的位置
我正在使用真空吸尘器机器人来控制微控制器(Arduino)。 清洁房间时,我想让它更有效率 。 就目前来说,它只是直行,当它碰到什么东西时就转身。
但是,我很难find最好的algorithm或方法来了解它在房间里的位置 。 我正在寻找一种保持便宜(不到100美元)而不是复杂(不需要计算机视觉博士论文)的想法。 如有必要,我可以在房间里添加一些不连续的标记。
现在,我的机器人有:
- 一个摄像头
- 三个接近传感器(约1米范围)
- 指南针(现在不用)
- 无线上网
- 如果电池已满或几乎空着,其速度可能会有所不同
- 上网本Eee PCembedded在机器人上
你有这个想法吗? 这些问题是否存在任何标准方法?
注意:如果这个问题属于另一个网站,请移动它,我找不到比Stack Overflow更好的地方。
弄清楚机器人在环境中的位置的问题叫做本地化 。 计算机科学研究人员多年来一直在努力解决这个问题,但成效有限。 一个问题是,你需要相当好的感官input来确定你在哪里,而来自networking摄像头(即计算机视觉)的感官input还远远没有解决的问题。
如果这样做不会吓倒你的话,我觉得最容易理解的本地化方法之一就是粒子滤波 。 这个想法是这样的:
- 你跟踪了一堆粒子 ,每个粒子代表着环境中的一个可能的位置。
- 每个粒子也有一个相关的概率 ,告诉你有多确信粒子真正代表你在环境中的真实位置。
- 当你开始的时候,所有这些粒子可能会在整个环境中均匀分布,并给予相同的概率。 这里机器人是灰色的,颗粒是绿色的。
- 当你的机器人移动时, 你移动每个粒子 。 您也可以降低每个粒子的概率来表示马达如何移动机器人的不确定性。
- 当你的机器人观察到某物(例如,摄像头,wifi信号等等)时,你可以增加粒子同意观察的概率 。
- 您可能还需要定期用基于观察值的新粒子replace最低概率粒子。
- 要确定机器人的实际位置,可以使用概率最高的粒子,概率最高的聚类,所有粒子的加权平均值等。
如果你search一下,你会发现很多例子:例如一个机器人的video,使用粒子滤波来确定它在一个小房间里的位置 。
粒子过滤很好,因为它很容易理解。 这使得执行和调整有点困难。 还有其他类似的技术(如卡尔曼滤波器 ),理论上可以说是更合理的,但可能会更难以得到你的头。
在每个房间的QR码海报不仅会使一个有趣的现代艺术作品,但相对容易相机发现!
如果您可以在房间内放置一些标记,则可以select使用相机。 如果两个已知的标记具有angular位移(从左到右),则相机和标记位于半径与标记之间的测量angular度相关的圆上。 我不记得公式,但标记之间的弧段(在该圆上)将是你看到的angular度的两倍。 如果您的标记位于已知高度,且摄像机处于固定的倾斜angular度,则可以计算与标记的距离。 只要这些方法中的任何一种都可以在给定足够的标记的情况下确定你的位置 使用这两个将有助于做更less的标记。
不幸的是,由于测量误差,这些方法是不完善的。 你可以通过使用卡尔曼估计器来解决这个问题,将多个噪声测量值合并到一个很好的位置估计中 – 然后你可以input一些航位推算信息(这也是不完美的)以进一步细化。 这部分内容深入math,但是我认为这是一个需要做的很好的工作,你正在尝试。 如果没有它,你可以做得好,但是如果你想要一个最佳的解决scheme(就给定的input而言最好的位置估计),没有更好的办法。 如果你真的想要自主机器人的职业生涯,这将在未来发挥巨大的作用。 (
一旦你可以确定你的位置,你可以用任何你想要的方式来覆盖房间。 继续使用碰撞传感器来帮助构build一个障碍地图,然后你需要devise一个方法来扫描合并障碍物。
不知道您是否有math背景,但请参阅以下书籍: http : //books.google.com/books/about/Applied_optimal_estimation.html?id=KlFrn8lpPP0C
这并不代替接受的答案(这是非常好的,谢谢!),但我可能会build议获得一个Kinect,并使用,而不是你的摄像头,无论是通过微软最近发布的官方驱动程序或使用黑客驱动程序,如果你的EeePC没有Windows 7(想必它不)。
这样的方式将通过3D视觉来改善定位。 现在观察地标会告诉你地标有多远,而不仅仅是地标所在的视野。
无论如何,被接受的答案并没有真正解决如何挑选视觉领域的标志,只是假设你可以。 虽然Kinect驱动程序可能已经包含了function检测(我不确定),但您也可以使用OpenCV检测映像中的function。
假设你不是在寻找一个通用的解决scheme,你可能实际上知道房间的形状,大小,潜在的障碍位置等等。当机器人存在时,工厂就没有关于其未来的运行环境的信息,哪种方式迫使它是低效的从一开始 如果是这种情况,您可以对该信息进行硬编码,然后使用基本测量(即轮子上的旋转编码器+指南针)精确计算出其在房间/房屋中的位置。 在我看来,无需三angular测量或疯狂的传感器设置。 至less一开始。
一个解决scheme是使用类似于“洪水填充”( 维基百科 )的策略。 为了让控制器准确地执行扫描,需要一个距离感。 您可以使用接近传感器来校准您的机器人:例如运行电机1秒= xx接近变化。 有了这个信息,你可以移动你的机器人一个确切的距离,并继续使用洪水填充房间扫地。
曾经考虑GPS? 地球上的每个位置都有一个独特的GPS坐标 – 分辨率为1到3米,做差分GPS可以下到10厘米以下的范围 – 更多信息在这里:
http://en.wikipedia.org/wiki/Global_Positioning_System
而Arduino也有很多GPS模块的select:
http://www.arduino.cc/playground/Tutorials/GPS
在收集完房子的所有关键坐标点之后,就可以编写arduino的例程来将机器人从一个点移动到另一个点(如上面所收集的那样) – 假设它将完成所有这些避免障碍的东西。
更多信息可以在这里find:
http://www.google.com/search?q=GPS+localization+robots&num=100
而在列表里面我发现了这个 – 专门针对你的情况:Arduino + GPS +本地化:
我也在想这个问题。 但我不明白为什么你不能只是三angular形? 有两个或三个信标(如不同频率的红外LED)和一个伺服上的红外旋转传感器“眼睛”。 那么你可以得到一个几乎不变的定位在你的位置。 我期望的精度将在低厘米范围内,这将是便宜的。 然后你可以映射任何碰到的东西。
也许你也可以使用信标光束中的任何中断来绘制离机器人很远的物体。
使用超声波传感器HC-SR04或类似物品。 如上所述,墙壁距机器人有传感器,室内有QR码。
当你靠近墙壁转90度,移动宽度为机器人,再转90度(即90度左转),再次移动你的机器人,我认为这将有助于:)
你有一个相机,你说? 你有没有考虑看天花板? 两个房间几乎没有可能具有相同的尺寸,所以你可以确定你是在哪个房间里,在房间里的位置可以从angular度到天花板的边界计算出来,方向可以通过门的位置来提取。
这将需要一些image processing,但吸尘器移动缓慢,有效清洁将有足够的时间来计算。
祝你好运 !
我正在研究Raspberry Pi python计算机视觉项目,允许没有编码器的机器人使用摄像头跟踪更准确地导航。 这并不能解决房间导航问题(我也很感兴趣)。使用ROS和激光雷达有一些很好的例子。 无论如何,这是我的小小贡献,如果你有兴趣(工作正在进行)。 更多信息在下面。 https://github.com/pageauc/motion-track/tree/master/cam-track