我正在与一个机器人进行一个项目,该机器人必须找到通往物体的路,并在前往它必须拾取的物体时避开一些障碍物。
问题在于机器人和机器人需要拾取的物体在探路者中都是一个像素宽。实际上,它们要大得多。通常 A* 探路者选择将路线放置在障碍物的边缘,有时会使其与障碍物发生碰撞,我们不希望这样做。
我尝试在障碍物上添加更多不可步行的场地,但效果并不总是很好。它仍然与障碍物发生碰撞,还增加了太多不允许它行走的点,导致它没有可以运行的路径。
你对如何解决这个问题有什么建议吗?
编辑:
所以我按照贾斯汀 L 的建议做了,在障碍物周围增加了很多成本,导致以下结果: 没有路径的网格 http://sogaard.us/uploades/1_grid_no_path.png
在这里你可以看到障碍物周围的成本,最初中间的两个障碍物应该看起来就像角落里的那些,但是在运行我们的探路者之后,成本似乎被覆盖了:
带有路径的网格 http://sogaard.us/uploades/1_map_grid.png
图片显示图片上的东西 http://sogaard.us/uploades/2_complete_map.png
上图显示了图片上发现的东西。
找到的路径 http://sogaard.us/uploades/3_path.png
这是我们之前遇到的问题也是遇到障碍的路径。
之前的网格与 http://sogaard.us/uploades/4_mg_path.png 上的路径
还有一张带有路径的成本图的图片。
所以我觉得奇怪的是为什么 A* 探路者会压倒这些非常高的现场成本。
是否会在使用当前字段评估打开列表中的节点以查看当前字段路径是否比打开列表中的路径短时?
这是我用于探路者的代码:
Pathfinder.cs: http: //pastebin.org/343774
Field.cs 和 Grid.cs:http ://pastebin.org/343775