【问题标题】:A* pathfinder obstacle collision problemA*探路者障碍物碰撞问题
【发布时间】:2010-06-18 10:56:26
【问题描述】:

我正在使用一个机器人进行一个项目,该机器人必须找到通往物体的路,并在前往它必须拾取的物体时避开一些障碍。

问题在于机器人和机器人需要拾取的物体在探路者中都是一个像素宽。实际上,它们要大得多。 A* 探路者通常会选择将路线放置在障碍物的边缘,有时会使其与障碍物发生碰撞,我们不希望这样做。

我尝试在障碍物上添加更多不可步行的场地,但效果并不总是很好。它仍然会与障碍物发生碰撞,并且添加了太多不允许它行走的点,导致它没有可以运行的路径。

您对如何解决这个问题有什么建议吗?

编辑:

所以我按照贾斯汀 L 的建议做了,在障碍物周围增加了很多成本,结果如​​下: Grid with no path http://sogaard.us/uploades/1_grid_no_path.png

在这里你可以看到障碍物周围的成本,最初中间的两个障碍物应该看起来就像角落里的那些,但是在运行我们的探路者之后,成本似乎被覆盖了:

Grid with path http://sogaard.us/uploades/1_map_grid.png

Picture that shows things found on the picture http://sogaard.us/uploades/2_complete_map.png

上图显示了图片上发现的东西。

Path found http://sogaard.us/uploades/3_path.png

这是我们之前遇到的问题也是遇到障碍的路径。

The grid from before with the path on http://sogaard.us/uploades/4_mg_path.png

还有一张带有路径的成本图的图片。

所以我觉得奇怪的是为什么 A* 探路者会压倒这些非常高的现场成本。

是否会在用当前字段评估打开列表内的节点时,查看当前字段路径是否比打开列表内的路径短?

这是我用于探路者的代码:

Pathfinder.cs:http://pastebin.org/343774

Field.cs 和 Grid.cs:http://pastebin.org/343775

【问题讨论】:

  • 澄清一下,这是一个实体机器人吗?你有一个机器人所在的物理场地图,你想通过软件地图 A* 的方式也允许你的物理机器人以相同的方向在物理地图中移动?
  • 是的,没错,我们有一个网络摄像头挂在机器人上方,然后我们粘贴图像,将图像转换为可唤醒和不可唤醒的地图,然后我们将此地图提供给我们的 A*带有开始和结束坐标。目前我们是否在障碍物周围添加 ekstra none walkable fields,但这非常慢。
  • 是的,正如 DoomStone 所说,我们在障碍物、物体和机器人所在的球场上方的三脚架上悬挂了一个网络摄像头。我们为这门课程拍照,解析它,以便我们找到物体和障碍物以及机器人,然后尝试从机器人到它必须拾取的物体建立一条路径。所以 A* 算法会返回我们可以运行的每个像素,正如我所说的,它经常会拥抱障碍物,如果说物体在机器人的另一侧。

标签: c# path-finding a-star


【解决方案1】:

您是否考虑过为物体附近的像素添加梯度成本?

也许像线性渐变一样简单:

C = -mx + b

其中 x 是到最近对象的距离,b 是边界外的成本,m 是成本消失的速率。当然,如果 C 为负数,则应设置为 0。

也许是简单的双曲衰变

C = b/x

再次,其中 b 是边界外的所需成本。一旦达到某个低点,就截止到 0。

或者,您可以使用指数衰减

C = k e^(-hx)

其中 k 是缩放常数,h 是衰减率。同样,有一个截止是明智的。


第二个建议

我从未将 A* 应用于像素映射地图;几乎总是,瓷砖。

您可以尝试大幅降低图块的“分辨率”吗?可能每 10×10 或 20×20 的像素集有一个图块;瓦片的成本是瓦片中像素的最高成本。

此外,您可以尝试降低用于 A* 的最短距离启发式算法的价值。

【讨论】:

  • 添加了第二条建议;希望能帮助到你! :)
  • 我们在探路者中发现了一个问题,它每次遇到新领域时都会重新评估移动成本,但您的建议奏效了,通过将障碍物周围的领域评级为非常高,现在看来效果很好。
  • The answer below mine 比我的好。请停止支持我:(
【解决方案2】:

考虑到机器人的大小,您可以尝试扩大障碍物。您可以绕过障碍物的角落以解决阻塞问题。那么被填充的缝隙太小了,机器人无论如何都挤不进去。

【讨论】:

  • 这对我来说听起来是最简单和最好的解决方案,比目前接受的答案中的平稳增加成本要好。
  • 这个答案比我的好。
【解决方案3】:

我已经做了一个这样的物理机器人。我的解决办法是,每当需要左右转弯时,就向后退一步。

红线是我理解你的问题。黑线是我为解决问题所做的。机器人可以直线向后移动一步然后右转。

【讨论】:

  • 你能详细说明一下吗,也许用一张图?按照我的理解,这会导致偷工减料,这不是一件好事。
  • 我们通过一些光线追踪解决了这个问题,它为我们提供了一条更加平滑和干净的路径!
  • 很高兴你用更好的方法做到了。 ;)
猜你喜欢
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 2011-08-25
  • 2015-01-26
  • 1970-01-01
相关资源
最近更新 更多