我正在尝试为一个机器人设计一种算法,该机器人需要在包含障碍物的世界中找到旗帜(位置未知)。机器人的任务是捕获旗帜并将其带回他的家基地(代表他的起始位置)。在每一步中,机器人只能看到有限的邻域(他不知道世界的全貌),但他有无限的记忆来存储已经访问过的单元格。
我正在寻求关于如何以有效的方式执行此操作的任何建议。特别是第一部分;即到达旗帜的部分。
我正在尝试为一个机器人设计一种算法,该机器人需要在包含障碍物的世界中找到旗帜(位置未知)。机器人的任务是捕获旗帜并将其带回他的家基地(代表他的起始位置)。在每一步中,机器人只能看到有限的邻域(他不知道世界的全貌),但他有无限的记忆来存储已经访问过的单元格。
我正在寻求关于如何以有效的方式执行此操作的任何建议。特别是第一部分;即到达旗帜的部分。
编辑: 关于在未知区域搜索未知物体...
您可以使用类似 Pledge's algorithm 的算法,直到找到空间的边界并记录所有信息。然后使用您喜欢的漂移/路径查找算法查看所有未见过的方格。如果在任何时候沿途看到旗帜,请停止当前操作并使用您喜欢的路径查找算法回家。
其中一部分是路径规划,例如使用A*算法。
另一部分是探索。任何有未知邻居的单元格都值得探索。最好的探索单元格是离机器人最近且未探索邻域最大的单元格。
如果机器人能透过墙壁看到某些探索候选单元格,则有些单元格可能无法进入,即使标志已经可见也需要进行探索。
每次揭示新单元格时重新评估当前目标可能很有价值。只要在揭示新单元格时执行此操作,就可以始终取得进展。
通过简单的DFS搜索,至少你会找到旗帜:)
这里有两个部分: 1)寻找旗帜 2)回归家园
对于寻找部分,我会每次完整绕圈时将家点向外圈。这样,您可以搜索每个方格并确定它是清晰的位置、障碍物、地图边界还是旗帜位置。这样,您可以创建环境地图。
一旦找到旗帜,您可以沿着同样的路线返回,或者找到更直接的路线。如果是更直接的路线,则需要使用您创建的地图找到最短路径。
如果你遇到了障碍物,可以绕过去确定它的精确尺寸,测量完后返回原来的路线。 在视野范围内没有障碍物的情况下,你可以尝试直接朝最近的未检查区域前进。
这可能不是最快的方法,但我认为这是一个好的起点。
我认为的方法是在机器人行进时构建图形。将有一个函数返回给机器人网格的特定状态。这是必要的,因为机器人事先不知道网格的状态。
您可以在搜索中应用启发式算法,以增加到达目标旗帜的概率。
正如许多人所提到的,如果你知道自己在哪里和目标在哪里,A*算法是进行全局规划的好方法。但如果你没有这种全局知识,你应该了解一类叫做“虫子”算法的算法。
至于探索,如果你想尽快找到旗帜,根据你的机器人可以看到多少本地邻域,你应该尽量避免这种邻域重叠。例如,如果你的机器人可以在每个方向上看到一格,那么你应该探索每三列。(第1列、第4列、第7列等)。但如果机器人只能看到它当前占据的格子,那么最优的方法就是不要回到已经访问过的区域。