2013-03-27 37 views
0

我正在执行A *来寻找走廊内的移动机器人的路径。到目前为止,路径是在走廊内部产生的,但它沿着障碍物的所有边缘向右滑动,但我更喜欢路径应该位于走廊中间。 1.是否有平滑算法可以做到这一点? 2.如何包含转向约束,以便我可以得到现实/可行的路径? 3.如何给予'转身'的惩罚以避免之字形路径。在走廊里找到一颗星路径

由于我是A *算法的新手,我发现上述问题困难。参考任何链接,本书也欢迎.. 谢谢..

+0

您要么使用路径平滑,要么使用[任意角度路径搜索算法](http://stackoverflow.com/a/14328161/238419)。两者的实现相当简单,尽管任何角度算法在寻找接近最优路径方面往往做得更好。 – 2013-03-27 15:27:56

回答

0

您可以简单地将可用区域限制在走廊的中间。

0

您可以预先形成运行A *的字段,例如缩小1瓦,这样在4向邻域中与不可访问单元相邻的单元格将变得无法通过。然后你的结果A *路径将更靠近走廊的中心。当然,几条走廊可能完全无法通行,但这是我们所期望的,因为我们实际上模拟了一个3x3十字形机器人在网格中走动,而3x3十字架无法穿过2xN路径。

关于增加转弯费用 - 您必须将当前方向添加到包含A *数据的数组,并实现一个双参数函数,该函数将为(旧方向,新方向)对返回一个非负值参数。说,“如果old_direction不等于新的方向,返回1,否则返回0”。然后将该函数的结果添加到您针对每个A *迭代步骤计算的任何成本中。

+0

增加转动成本的想法听起来不错。你能否更详细地解释一下如何找到新旧方向?谢谢。 – user1785307 2013-04-04 12:56:15

+0

您为自己创建一个枚举/常量集合和一个字段'direction',并且当您在A *中添加一个新的可到达单元格时,您可以获取该单元格与当前正在处理的单元格之间的坐标差异,从中派生出方向。 – Vesper 2013-04-04 13:02:05