D* Lite遇障重规划是否需处理原路径邻接节点的g值?
D* Lite重规划遍历原路径邻接节点的合理性与优化建议
这种遍历原路径邻接节点的行为完全符合D Lite的设计逻辑*,原因如下:
- D* Lite是反向搜索框架,从目标点向起点扩展路径。当起点前方出现障碍物、重置起点后,原路径节点及其邻接节点的代价约束已被打破——比如原本可通行的邻接节点可能被障碍物阻断,或路径代价发生变化。必须通过
updateVertex更新这些节点的g-value和rhs-value,才能保证后续重规划的路径正确性,毕竟g与rhs的一致性是D* Lite判断节点是否需要进入优先级队列的核心标准。 - 那些只有
rhs-value没有g-value的邻接节点,本质是之前反向搜索中标记的「潜在候选节点」,它们的rhs值基于旧环境计算。现在环境变更,这些节点的代价基准已失效,必须重新计算才能避免规划出错误路径。
针对大地图下的耗时问题,可从以下方向优化:
- 精准定位受影响节点:不要盲目遍历全部原路径邻接节点,先检测出障碍物直接影响的原路径节点(如与障碍物重叠或直接相邻的路径节点),仅对这些节点及其直接邻接节点调用
updateVertex,砍掉无意义计算。 - 优化优先级队列实现:D* Lite的效率高度依赖优先级队列的操作速度,替换默认简单队列,改用二叉堆配合延迟删除,或更高效的斐波那契堆(工程可实现的前提下),能大幅降低
updateVertex和computeShortestPath的耗时。 - 跳过已稳定节点:对
g-value == rhs-value且完全未受障碍物影响的节点,直接跳过更新操作,无需重复计算。
内容的提问来源于stack exchange,提问作者OverDemon
相关产品推荐
相关产品推荐

