机器人探索算法

时间:2011-03-19 11:31:23

标签: algorithm artificial-intelligence robotics

我正在尝试为机器人设计一个算法,试图找到一个位于包含障碍物的世界中的旗帜(位于未知位置)。机器人的任务是捕获旗帜并将其带到他的家乡(代表他的起始位置)。机器人,在每一步,只看到一个有限的邻居(他不知道世界如何提前看起来),但他有无限的记忆来存储已经访问过的细胞。

我正在寻找有关如何以有效方式执行此操作的任何建议。特别是第一部分;即到达国旗。

enter image description here

8 个答案:

答案 0 :(得分:5)

简单的广度优先搜索/深度优先搜索将起作用,尽管速度很慢。一定要防止机器人多次检查具有相同方块的路径,因为这会导致这些算法在标准情况下运行的时间更长,并且无法在无法到达标志的情况下运行。

A *是更优雅的方法,特别是如果你知道旗帜相对于你自己的位置。 Wikipedia,按照惯例,在解释它方面做得不错。使用的经典启发式是到目的地的人员距离(假设没有障碍的移动次数)。

这些算法对于回程非常有用 - 而不是“寻找旗帜”部分。


修改 这些方法包括创建表示地图上方块的对象,以及创建“路径”或一系列方块(或要采取的步骤)。一旦你构建了一个表示你的方块的框架,那么使用什么样的搜索的问题就变得不那么令人生畏了。

这个类需要能够获得相邻方块的列表,并知道它是否可以遍历。

考虑到您没有所有信息,请尝试将未探索的图块视为可遍历,如果您发现它们不是,则重新计算。


修改 至于为未知物体搜索未知区域......

您可以使用Pledge's algorithm之类的内容,直到找到空间的边界,然后记录所有信息。然后使用您最喜欢的漂移/寻路算法查看所有看不见的方块。如果,在任何时候,你看到旗帜,停止你正在做的事情,并使用你最喜欢的寻路算法回家。

答案 1 :(得分:2)

部分内容将是寻路,例如使用A* algorithm

部分内容将会探索。任何具有未知邻居的小区都值得探索。探索的最佳细胞是最接近机器人的细胞和最大的未开发区域。

如果机器人透过墙壁看到某些勘探候选者可能无法进入,即使该旗帜已经可见,也可能需要进行勘探。

每次显示新细胞时,重新评估当前目标可能是值得的。只要在新细胞被揭示时进行,就会始终取得进展。

答案 2 :(得分:1)

通过简单的DFS搜索,您至少可以找到标志:)

答案 3 :(得分:1)

嗯,这有两个部分。 1)搜索标志 2)回家

对于搜索部分,每次进行完整循环时,我都会将主点向外移动。通过这种方式,您可以搜索每个方块并判断它是否是一个清晰的地点,一个障碍物,地图边界或旗帜。这样,您就可以创建环境地图。

找到Flag后,您可以返回相同的方式,也可以找到更直接的路线。如果它是更直接的路线,那么您必须使用您创建的地图来找到直接路线。

答案 4 :(得分:0)

你想要的是在机器人的视口中找到所有最小生成树,然后让他想去的机器人游戏。

答案 5 :(得分:0)

如果遇到障碍物,您可以到处确定其精确尺寸,并在测量后返回上一个路线。 在视线范围内没有障碍物时,您可以尝试朝最近的未经检查区域方向前进。

这似乎不是最快的方式,但我认为,这是开始的好点。

答案 6 :(得分:0)

我认为这种方法是在机器人行进时构建图形。将有一个函数将机器人的特定状态返回给机器人。这是必需的,因为机器人不会事先知道电网的状态。

您可以在搜索中应用启发式扫描,以便增加到达旗帜的可能性。

答案 7 :(得分:0)

正如许多人所提到的,如果你知道自己的位置和目标,那么A *对于全球规划是有益的。但是如果你没有这种全球知识,那么你应该研究一类算法,称之为“bug”算法。

至于探索,如果你想找到最快的旗帜,取决于你的机器人可以看到多少本地邻域,你应该尝试不要让这个邻域重叠。例如,如果你的机器人可以在每个方向看到它周围的一个单元格,你应该探索每三个列。 (第1,4,7等栏)。但是如果僵尸程序只能看到它当前占用的单元格,那么你可以做的最好的事情就是不要回头看看你已经访问过的单元格。