【问题标题】:Robot exploration algorithm机器人探索算法
【发布时间】:2011-07-18 17:19:02
【问题描述】:

我正在尝试为机器人设计一种算法,该算法试图找到位于包含障碍物的世界中的旗帜(位于未知位置)。机器人的任务是夺取旗帜并将其带到他的基地(代表他的起始位置)。机器人在每一步只能看到一个有限的邻域(他事先并不知道世界的样子),但他有无限的记忆来存储已经访问过的单元格。

我正在寻找有关如何以有效方式执行此操作的任何建议。尤其是第一部分;即登上旗帜。

【问题讨论】:

  • 到目前为止你有什么想法?
  • 如果你在机器人的位置,你会怎么做才能有效地找到flag?
  • @Lucasmus:我认为很难找到一些真正聪明的算法,因为除了他有限的社区之外,机器人对世界一无所知。 @Mitch Wheat:嗯,到目前为止,我只提出了一个这样的算法将包含的所需属性列表: - 访问已访问单元格的最小重复 - 全局目标:找到标志 - 局部目标:避免障碍和无限循环跨度>
  • 所有这些答案的前提是您了解搜索功能的工作原理。如果不清楚,请查看我的answer 底部。我希望这有助于澄清。
  • 此外,其中许多答案对于知情搜索非常有效,而这是一个不知情的搜索类型问题。我试图在我的答案的下一个编辑中解决这个问题,here

标签: algorithm artificial-intelligence robotics


【解决方案1】:

通过简单的DFS 搜索至少你会找到标志:)

【讨论】:

  • 好的。比如当你获得一些关于你的基地位置的信息(例如它与世界低端的距离)时,你怎么能用它来改进这样的算法?
  • BFS 怎么样?也很简单。
【解决方案2】:

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

【讨论】:

  • 这将适用于知情搜索,机器人提前知道网格的情况。根据问题描述,机器人并未完全了解环境。
  • @Gunner:这超出了我的能力范围,但为什么不让机器人在他的下一步行动中玩欧拉电路?
  • 空间填充曲线怎么样?这样机器人的空间索引为 +/- 100 或他所看到的任何内容,然后让他通过找到每个 mst 来找到方法并让他随机选择?
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    其中一部分是寻路,例如A* algorithm

    其中一部分将是探索。任何有未知邻居的细胞都值得探索。最适合探索的细胞是那些离机器人最近且未探索的区域最大的细胞。

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

    每次显示新单元格时重新评估当前目标可能是值得的。只要只有在发现新细胞时才这样做,总会取得进展。

    【讨论】:

      【解决方案5】:

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

      您可以在搜索中应用启发式方法,从而增加到达标志的概率。

      【讨论】:

      • 你想要的是完整图形的空间填充曲线,你可以限制机器人视图,让他用 prim 或 kruskal 算法探索视图,让他从众多或让他探索最近的未知区域。
      【解决方案6】:

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

      A* 是更优雅的方法,尤其是当您知道标志相对于您自己的位置时。 Wikipedia,像往常一样,在解释它方面做得很好。使用的经典启发式方法是到目的地的载人距离(假设没有障碍物的移动次数)。

      这些算法对于回程很有用 - 而不是“寻找标志”部分。


      编辑: 这些方法包括在地图上创建代表正方形的对象,以及创建“路径”或一系列正方形来击中(或要采取的步骤)。一旦您构建了一个框架来表示您的正方形,使用哪种搜索的问题就变得不那么艰巨了。

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

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


      编辑: 至于为未知物体寻找未知区域……

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

      【讨论】:

      • 我认为根据引擎为您提供信息的方式,该课程看起来会大不相同。我曾尝试起草它,但没有用于了解环境的接口,它只是 cmets 或伪代码。
      • 某些单元格可能无法访问 - 有没有一种优雅的方法可以找出哪些单元格?
      • 我认为最好的方法是在它周围寻找连接的不可遍历的单元格。可能是某种宽度优先的寻路,它只踩在不可穿越的方格上,最终条件是找到一条路径两次撞上一个方格,并且在每个可移动方向上都包含一个方格。
      • 您如何看待视口的空间填充曲线和带 prim 的 mst?
      • @epitaph 为了什么?求一个已知点到另一个点的距离?我以前从未这样做过,但我怀疑这比广度优先搜索的计算量要大得多。基本上我认为这相当于在开始任何计算之前扩展每条可能的路径,所以它没有希望在那之前完成。基本上,这就像广度/深度优先搜索总是在最坏的时间和空间中运行。
      【解决方案7】:

      嗯,这有两个部分。 1) 寻找旗帜 2) 回家

      对于搜索部分,每次我完成一个完整的循环时,我都会向外移动原点。通过这种方式,您可以搜索每个方格并识别它是否是空地、障碍物、地图边界或旗帜。这样,您就可以创建环境地图。

      找到标志后,您可以原路返回,或者找到更直接的路线。如果是更直接的路线,那么您将不得不使用您创建的地图来查找直接路线。

      【讨论】:

        【解决方案8】:

        正如许多人所提到的,如果您知道自己在哪里以及您的目标在哪里,A* 对全球规划很有帮助。但是,如果您没有这种全局知识,那么您应该研究一类称为“错误”算法的算法。

        至于探索,如果你想以最快的速度找到标志,取决于你的机器人能看到多少本地邻域,你应该尽量不让这个邻域重叠。例如,如果您的机器人可以从各个方向看到它周围的一个单元格,则您应该每隔三列探索一次。 (第 1、4、7 列等)。但是,如果机器人只能看到它当前占用的单元格,那么您可以做的最优化的事情就是不要返回您已经访问过的单元格。

        【讨论】:

          猜你喜欢
          • 2015-06-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-23
          相关资源
          最近更新 更多