如何在下面的地图中使用A *

时间:2019-04-24 18:11:27

标签: algorithm search a-star

我正在使用ROS和C ++开发机器人仿真。

我已经创建了一张地图,该地图是这样一个封闭房间中的空缺职位列表:

0.1,0;0.2,0;0.3,0;...

它们是{x,y)个位置,以;分隔。该列表中的所有位置都是地图上的空闲位置。如果某个位置有障碍物,则该位置将不在列表中。

如何使用该列表作为A *搜索算法的地图?

我曾经考虑过将列表转换为2D矩阵,但是我不知道该在矩阵单元格中放置什么内容。

2 个答案:

答案 0 :(得分:0)

的确,听起来您可以通过解析文本文件将列表简单地转换为2D矩阵(将x设置为逗号前的字符序列,跳过逗号,将y设置为分号前的字符序列,跳过分号,转换x / y转换为数字,并相应地使用x / y作为索引等更新矩阵)。

对于矩阵本身,仅考虑房间的鸟瞰图,其中单元格中的“ 0”表示自由空间,而“ 1”表示障碍物(反之亦然;值是任意的,只要您始终使用它们即可)。对于A *算法,任何单元格基本上都与4个相邻单元格“相邻”(或您使用的任何移动方案)。

答案 1 :(得分:0)

您将不得不将数据转换为图形(如在节点和边中,而不是在功能图中)。为此,您不仅需要转换为节点(又称为顶点)的位置,还需要转换为边的位置。当您可以从一个节点直接移动到另一个节点时,两个节点之间存在一条边缘。换句话说,它们之间没有节点,也没有阻碍运动的障碍。减少该部分后,就可以轻松在结果图上运行A *算法。

步骤:

  1. 读取和解析输入数据。
  2. 将数据存储为节点列表。
  3. 定义在两个节点之间存在边的要求。
  4. 创建具有先前定义的条件和节点的边列表。
  5. 在图形上运行A *。

注意:

  • 我不会为您做实际的工作,因为我想这只是家庭作业。没人希望这样做。
  • 您可以自行解决每个步骤,甚至可以跳过它,并使用硬编码值替换其结果。
  • 您也可以完全跳过生成边。您只需要调整A *算法即可在其访问的每个节点上按需生成边缘。这可能更简单,也可能不简单。