为路径规划实施D * Lite - 如何检测边缘成本变化?

时间:2012-09-19 08:35:19

标签: algorithm path-finding d-star

我目前正尝试将D * Lite算法用于路径规划(另请参阅here)以掌握它。我在网上发现了两个用于C / C ++的实现,但不知何故不能完全遵循这些想法,因为它们似乎与白皮书中的伪代码的预期差异更大。我特别使用以下两篇论文: Koening,S.;Likhachev,M. - D* Lite, 2002 Koenig & Likkachev, Fast replanning for Navigation in Unknown Terrain, IEEE Transactions on Robotics, Vol. 21, No. 3, June 2005

我尝试从第一篇白皮书(第5页,第4页)和#34;调试"实现优化版本的D * Lite。我使用的例子如第二篇白皮书所示和解释(第6页,图6和图7)。所有工作都在MatLab中完成(更容易与他人交换代码)。

到目前为止,我通过运行computeShortestPath()一次运行代码来查找初始最短路径。但现在我被困在伪代码的{36'}和{37'}中:

{36”} Scan graph for changed edge costs;
{37”} if any edge costs changed

如何检测这些变化?我似乎不知道如何检测到它?在我的实现到目前为止,我主要使用3个矩阵。 一个与包含所有rhs值的网格图大小相同的矩阵。一个相同大小的矩阵包含类似的所有g值。并且一个矩阵具有可变行数,用于优先级队列,前两列是优先键,第三和第四行是x和y坐标。

比较我的结果,我得到了Step5中第一次运行computeShortestPath()的相同结果,如第二篇白皮书第6页所示。移动机器人一步也不是问题所在。但我真的不知道应该如何实施扫描更改边缘成本的下一步。

感谢任何提示,建议和/或帮助!!!

1 个答案:

答案 0 :(得分:0)

其他人向我指出了以下内容:

  

在真实世界的代码中,您几乎不必“扫描图表   更改。“您的图表仅在您在代码中更改时才会更改,因此   你已经确切地知道它可以改变的时间和地点!

     

实现此目的的一种常见方法是使用OnGraphChanged   您的Graph类中的回调,可以设置为调用   PathFinder类中的OnGraphChanged方法。然后在任何地方   Graph类中的图形更改,请确保OnGraphChanged   调用回调。

我个人通过使用“真实地图”和“已知地图”来实现它,并且在每次移动之后让机器人检查/扫描所有下一个可能的后继者并在真实地图和已知地图上进行比较。