【机器人】 D*算法-动态路径规划

本文详细介绍了动态路径规划中的D*算法,包括其命名由来、使用场合、算法逻辑以及与Dijkstra和A*算法的关系。D*算法适用于动态环境中的路径规划,当遇到障碍时能快速重新规划路径,具有低计算成本和高效率的特点。算法核心在于PROCESS_STATE()和MODIFY_COST()函数,分别处理路径优化和异常信息传播。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

D*算法-动态路径/运动规划

目录

D*算法-动态路径/运动规划

1 前言

1.1 命名由来

1.2 使用场合

2 算法逻辑

2.1 主流程

2.2 核心函数

3 要点探讨

3.1 D* 主要特点

3.2 D* 和Dijkstra、A* 到底什么关系

4 实例

5 参考资料

5.1 原文


1 前言

1.1 命名由来

原话:The name of the algorithm, D*, was chosen because it resembles A*

解释:就是觉着像A*干脆起名D*,说是Dynamic A* 不太严谨

1.2 使用场合

适用于动态环境(/路网)中的路径/运动规划(motion planning),与Dijkstra、A* 形成对比(两者适用于静态环境/路网)

解释:

  • 动态是指在沿着最优路径前进时,突然出现了既定路径中断的情况需要进行重新规划。

  • 路径中断在现实生活中可以理解为诸如塌方、巨石、车祸、阻塞等情况的发生,在图/Graph中是某条边Edge/弧Arc的代价/权重cost/weight突然变得非常大,使得当前路径成本陡增,需要重新规划。

  • 当然该方法也可以应用在静态环境/路网中,向下兼容,实际就相当于反向(从终点G开始求解)Dijkstra算法。

  • 该方法不是唯一的算法,比如在遇到障碍时再次调用A*(参考A* replanner)也是可以的,但是该方法计算成本低,效率高。

  • 同时该方法对已知局部环境(类似游戏中的趟地图开荒)、未知环境情况下也有很好的实用性。

2 算法逻辑

2.1 主流程

2.1.1 情形模拟

  • 假设有一机器人任务是从起点S到终点G,首先寻找一条最优路径{S, ……, Y, X, ……,G}

  • 之后沿该路径行驶过程中在Y处发现X点塌方(无法到达),需要寻找新的路径{ Y, Z, ……,G}继续行驶。

2.1.2 符号约定

1、有向图:D* 算法以有向图作为前提,即在A、B节点间,“A到B” 与 “B到A” 表示两个弧,因此对应的权重不一定一样。

2、X、Y 、Z、S、G等:称为节点,也称为state,可理解为一个坐标position,其中S表示Start,G表示Goal。

3、{S,……,G}:表示一条路径,该路径以S为起点,G为终点,简记为{S}。

4、c(X, Y):表示“Y->X”节点的成本/权重(cost),具体计算逻辑如下。

  • 以Y为中心构成8邻域的九宫格

  • 当不存在障碍物时,横向、竖向的连接/移动成本为1、斜向连接成本为1.4

  • 当存在障碍物时,不管什么方向的连接/移动成本都设置为比较大的值,比如10000,以确保很难通过

  • 虽然是有向图,但是在此文中可以设定双向移动成本一样即c(X, Y) == c(Y, X)

5、b(X) = Y: 用来记录反向指针(backpointer),即X->Y,当处于X位置时可以根据b(X)获得下一个要到达的节点Y,以使得路径最优

6、t(X):节点的访问标记位(tag),支持3个类型:NEW、OPEN、CLOSED

  • NEW:节点从未访问过,最初的设置,可能存在部分节点永远处于改状态

  • OPEN:节点正在访问中,存储在OPEN_LIST(使用优先队列PriorityQueue实现)中,也称为OPEN_QUEUE,以待访问扩展

  • CLOSED:节点已经被访问过,从优先队列中移除

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值