我应该执行哪种算法来编程房间清洁机器人?


25

对于此问题,假定以下情况未知:

  • 房间的大小和形状
  • 机器人的位置
  • 存在任何障碍

还假定以下情况是恒定的:

  • 房间的大小和形状
  • 所有(如有)障碍物的数量,形状和位置

并假定机器人具有以下属性:

  • 它只能以绝对单位递增并以度为单位前进。同样,移动操作成功后将返回true,如果由于阻塞而失败,则将返回false
  • 合理无限制的动力来源(假设它是放置在空间站上的太阳能机器人,该空间站始终始终面向太阳且没有天花板)
  • 每次运动和旋转都绝对精确地进行(不必担心数据不可靠)

最后,请考虑机器人环境的以下属性:

  • 处于无天花板空间站上的房间是安全的,但与经过的彗星之间的距离令人沮丧,因此灰尘(和冰)不断散落在环境中。

我被问到这个问题的简单得多的版本(房间是一个矩形,没有障碍,如何在它上面移动以保证至少可以遍历每个部分),然后我开始想知道如果您不能这样做,该如何处理呢?不能保证形状或障碍物的存在。我已经开始使用Dijkstra的算法来研究这个问题,但是我很着迷于听到其他人如何解决这个问题(或者对此是否有一个公认的答案?(Roomba是如何做到的?)


+ algorithm和+ theory这样的标签可以解决这样的问题,但是我尚无添加的声誉
Jason Sperske 2012年

绝对比Roomba更好的东西
Octopus

有趣。我有bobsweep,它的编程非常完美momblogsociety.com/meet-newest-addition-family-bobsweep,我建议所有人使用。问候!

1
这是广告吗?如果不是,您可能想发布信息,而不仅仅是发布链接,以说明机器人的行为方式以及完美的原因。
Shahbaz

Answers:


18

据我所知,这个问题尚未“解决”。

正式地,这是一个在线覆盖问题。覆盖范围,因为我们必须覆盖地面上的每个点,并且在线,因为我们无法离线访问地图。如果您对最新结果感兴趣,建议您在Google学术搜索中查找“ 机器人在线覆盖算法 ”(有很多很好的结果)。除了@ embedded.kyle非常丰富多彩的(重新)帖子,我还将添加一些细节(我还将尝试快速找到一些简单的结果):

  • Dijkstra可以为您提供一条道路,但不一定涵盖范围。例如,如何为Dijkstra指定必须访问图形中的每个点,而不是尽快访问一个点?您可以运行所有对的最短路径,但是有什么用呢?您没有地图。

  • 这样的在线算法通常被称为“错误”算法,因为它们倾向于看起来像是一个错误,它在某个区域中徘徊,撞到某个物体上,然后在其周围徘徊。

  • 没有障碍物,没有矩形空间,并且假设您是从边界开始的,牛齿(牛的行进)路径是最佳的。 在此处输入图片说明

有趣的是,农民们一直在这样做,对吗?http://en.wikipedia.org/wiki/Boustrophedon。通过找到没有障碍物的大致矩形区域,可以将其扩展到有障碍物的房间。Howie Choset对此做了一些努力

  • 要覆盖未知范围的区域,并假设您从该范围开始,最佳策略是什么?好吧,想象一下您掉入了世界,看不见周围。您可以一直走直到到达外围,然后做牛磺草对吧?除了现在,您“浪费”了寻找周边的时间,因为您将覆盖该零件两次。这就是为什么机器人倾向于螺旋:你到达边界的时候,你已经覆盖了很多领域的(,其中dπd2d是到距离最近的边界,对吧?)。这很有用:现在可以保证找到最接近的边界,并且可以将其找出来。
  • 这是一个巨大而迷人的区域。抱歉,我无法提供更好的摘要!

最大的问题是您没有地图。如果没有地图,您将只能执行简单的操作,例如周界跟踪和沿路径移动(例如提到的螺旋线)。因此,存在一些机器人在清洁时实际构建地图,将映射出的区域分解为形状,然后覆盖每个形状以确保覆盖范围。请参阅:http//mintcleaner.com/


9

Roomba开始呈螺旋状,直到撞到某物,然后进行周界扫描。然后它只是反弹。Roomba是家用机械式真空吸尘器的事实上的标准,我想您可以称其为“可接受的解决方案”。但是根据个人经验(我有两个),肯定还有改进的空间。

从工作原理上看

算法

接受 iRobot市场传播副总裁Nancy Dussault Smith 的采访时

当它开始时,您会注意到一个螺旋图案,它将在更大的区域上螺旋形展开,直到碰到物体为止。当它找到一个物体时,它将沿着该物体的边缘跟踪一段时间,然后开始进行纵横交错,试图找出在不撞到另一个物体的情况下可以走的最大距离,这有助于确定算出空间有多大,但是如果它持续了很长时间却没有撞到墙,它将再次开始呈螺旋状,因为它认为它处于一个广阔的开放空间中,并且不断地对其进行计算和计算。

这与下面的污垢传感器类似,当其中一个传感器跳闸时,它会改变其行为以覆盖该区域。然后它将消失,以寻找一条直线路径上的另一个脏区域。这些不同的模式在彼此走动时彼此叠加的方式,我们知道这是覆盖房间的最有效方式。

我们选择的模式以及该算法的最初开发方法基于麻省理工学院研究动物而生的基于行为的算法,以及它们如何寻找食物的地方。当您查看蚂蚁和蜜蜂如何散布并搜寻区域时,这些覆盖范围和所有信息都来自该研究。显然,这并不是准确的,我并不是说我们是蜜蜂,而是对如何在自然界中进行搜索的理解,这是我们自适应技术发展的基础。

一些带有LED的Roombas的长时间曝光照片说明了其在实践中的工作方式:

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明


这是链接中的复制粘贴内容吗?
乔什·范德·胡克

@Josh已从链接的站点复制了回答问题的相关材料,并将其放在blockquote中,以防止链接腐烂。
Embedded.kyle

7

Neato使用有组织的方法。使用SLAM和保险杠,它首先映射“当前”房间的周边,然后应用一些算法尽可能有效地进行清洁。我从来没有拥有过Roomba,但是鉴于我对它的算法的了解,我永远也不会放弃使用neato。

neato中的Laser Range Finder通常是可麻醉的于机器人技术,因为它是SLAM算法的经济高效传感器。

如果我得到了您的任务,首先,我将根据我拥有的硬件找到一个合适的SLAM实现

然后,我将使用CNC ISLAND运动计划算法。我的经验是,它们往往能以最小的移动量非常有效地覆盖任意区域。


SLAM不适用于此问题,因为它是一种模拟,其中定位没有不确定性。对于真正的机器人,您绝对是正确的。
伊恩

我错过了(如果在那里)。实际上,它说以下是未知的;机器人的位置。
Spiked3 2012年

我当时以为位置未知,但是随着房间拓扑结构的建立,它可能会变得知名。
杰森·斯佩斯凯

这是简单化产生奇怪含义的那些奇怪的学术问题之一。由于您没有地图,没有起始位置,没有完美的定位,也没有外部实体可以协调,因此绝对位置无关紧要。您可以任意确定(0,0)是您的起点,然后相对于该点构建地图。在现实世界中,这实际上并不实际,但是确实为您提供了一些有关覆盖算法的实践。
伊恩

从系统角度来看,您的答案是好的。但是,我相信这个问题是一个更好的理论/算法问题。
乔什·范德·胡克

6

您需要确定的第一件事是机器人的目标-从您的问题中还不清楚。机器人必须完成两个主要任务:发现可清洁区域的形状,然后对其进行清洁。

但是污垢量恒定吗?是否不断添加污垢?您的目标是最大程度地减少平均灰尘停留在地板上的时间或中间时间吗?目标是保持地板同样清洁吗?还是只是尽快清洁一次?在堆积的污垢中是否存在可以测量和利用的图案,可以帮助您实现目标?

这些问题的答案将有助于指导您选择哪种算法。在Roomba机器人的情况下,学习家具的确切布局可能毫无意义,因为家具(如桌子周围的椅子),人和其他障碍物经常移动。但是,在您的情况下,最好探索空间以构建完整的地图(割草机模式与查找边缘的某种组合),然后使用该地图计算通过空间的最短路径(术语为“覆盖范围”,并且有几种方法可以做到这一点,例如生成树算法)。

您还需要担心的另一件事是如何使您所处的空间离散化。因为您可以沿任何方向移动-即使使用整数度数和整数距离单位-您的X和Y位置也可以是小数价值观。您需要确定如何在该地图上表示障碍物,而不必使其增长到无限数量的数据点。


好吧,由于我很可悲地使自己难以接受面试的问题,所以我想我可以提供更多的信息。我喜欢您提出的观点:)
Jason Sperske

2

我不确定您是否仍然需要它,但是对于那些偶然在google上找到此线程的人,我做了一个简单的算法版本。

基本上,它会在清理时尝试构建该区域的地图,并使用该地图来查找最近的无视节点(房间的一部分)。如果找不到任何东西,则意味着房间已经打扫干净(或者机器人无法进入未打扫的部分)。

它可能比其他算法慢,但是无论起始位置,方向和障碍如何,它都可以保证覆盖范围。

https://github.com/dungba88/cleaner_robot

更新:我在这里做了一个演示,并将其与回溯DFS进行了比较。因此,即使我的算法为O(N ^ 2),它在移动和转弯次数上的优化程度也更高。

http://jenova.dungba.org/cleaner/showdown


有趣的是,它将房间分成2D网格,我仍在阅读您的代码,您使用哪种路径查找方法来到达未清洁的区域?迪克斯特拉?
Jason Sperske '17

我使用BFS查找最近的未清洁位置。
AnhDũngBùi

-1

查看被问到的更简单的问题-矩形房间,无障碍,清洁每一部分 至少

解决方案是找到房间的一个角落,找到一个角落将不是一个大问题。一旦实现,就可以沿着螺旋路径到达房间的中心。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.