实现路径规划的D*Lite-如何检测边缘成本变化



我目前正在尝试实现用于路径规划的D*Lite算法(另请参阅此处)以掌握它。我在网上找到了两个实现,都是针对C/C++的,但不知何故,我无法完全遵循这些想法,因为它们与白皮书中的伪代码的差异似乎超出了预期。我特别使用以下两篇论文:Koening,S。;利哈切夫D*Lite,2002Koenig&Likkachev,未知地形中导航的快速重新规划,IEEE机器人学报,第21卷,第3期,2005年6月

我尝试从第一份白皮书中实现D*Lite的优化版本(第5页,图4),为了"调试",我使用了第二份白皮书中所示和解释的示例(第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坐标。

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

感谢您的任何提示、建议和/或帮助!!!

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

在现实世界的代码中,您几乎不必"扫描图形更改。"只有在代码中更改图形时,图形才会发生更改,因此你已经知道它何时何地会发生变化了!

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

我亲自使用"真实地图"one_answers"已知地图"实现了这一点,每次移动后,让机器人检查/扫描所有下一个可能的继任者,并在真实地图和已知地图上进行比较。

最新更新