D*算法:

特点:后向搜索,或者说是反向计算。按照论文中的结果,比replan的效率高不少,在动态环境中表现优秀。这是因为它提前把地图信息都计算并存储的缘故。

里面的节点被称为state,每个state有如下的值:
tag:new,open,closed  
分别标识三类节点,分别标识没有加入过open表的、在open表的、曾经在open表但现在已经被移走的。一开始所有的点的tag初值为new,当被加入到open表之后,被置为‘open’ , 从open表移走,被置为‘closed’

h: 每个点的h值代表当前该点,到终点,也就是目标点G的代价。第一次搜索到起点时时,所有点的h会被更新,计算方式同dijkstr算法,是用相邻两点的代价+上一个点的代价累加得到。

k: 该点最小的h值。k的计算在更新过本节点的h后,如果本点‘new’,k=h;如果本点'open',那就取一下当前k和new_h最小值,如果本点是'closed',取当前h和new_h最小值; 总而言之,k将会保持到最小,它表示了本点在全图环境中到G点的最小代价。

设想第一次搜索完成后:

每个节点的h和k是相等的。搜索的停止条件是把s点从open表中弹出,或者说s点状态是‘closed’,这与dijkstr算法是相同的。此时寻找到了这样的一条路径。可以看出,每个节点的指向(即节点的父节点)都是周围八个节点中k最小的那个。我们期望的路径出现了,并且每个节点到G的最短路径也标识出来了(+号标识),这样,当出现动态变化时,我们可以利用计算的这个图尽快修改我们的路径,而不是replan。

注意,此时openlist表不为空,里面的节点是比我们s的k值还大的节点,也就是标记为墙的节点(#),当然还有以s为源点扩展的节点,因为扩展后s才被请出openlist。

D*将处理这样变化的情况:我们规划的路径上的点,出现了拥堵。如果不是规划的路径上的点的变化,不予处理,因为我们按原计划仍能到达。

当我们检测到某点被阻碍了,我们可以迅速定位该节点的子节点,因为是反向指针,其实就是定位到了我们被堵的路径点的上一个点,那么我们要做如下事:

1.修改该点的h值,即state.h会变的很大,因为他的父节点是墙了,把它放入到open表中。注意此时该节点的k还是小值,是原来的那个h的值,因此,它将被立即取出展开。

2.把这个修改扩散出去,这个扩散过程需要利用到论文中的伪代码 process-state,直到k_min>= state.h 。

注意process-state运行过程中,state.h是会变的,因为该节点的父节点会被改成其他的h小的节点。

核心程序:

核心程序理解:

弹出open表中最小的节点,并删除这个节点。然后分类处理之:

k_old<h(x):  说明该节点x处于raise状态,可以设想x是之前那个父节点突变为墙的子节点。当前h(x)升高说明原来的路径已经不是最优的了,如果在x周围能找到一个点,h.y+c(x,y)更小,那就修改x的父节点,重置其h的值。

k_old=h(x):  该节点x处于lower的状态,并没有受到障碍影响,或者还在第一遍遍历的阶段。if后面的判断代表:周围是标记为new的节点,代表第一次被遍历到。or  它的父节点是X,但是h.y却不等, 设想一下说明这说明h.y被更改了,但是父节点还没有变。

————————————————————分割线————————————————————

再看D*算法的总结与思考:

D*算法常用于移动机器人领域的路径规划,其衍生算法如Focused D* ,D* lite,Field D* 目前已经是机器人路径规划的核心算法。在无人驾驶领域路径规划的潜力待讨论。这里作为个人学习后分享的感性的认知,可加快理解,有问题欢迎讨论。

D*是动态A*(D-Star,Dynamic A Star), 卡内及梅隆机器人中心的Stentz在1994和1995年两篇文章提出,主要用于机器人探路。

A*适宜于在静态路网(环境)中寻路,在环境变化后,往往需要replan,由于A*不能有效利用上次计算的信息,故计算效率较低。

D*由于储存了空间中每个点到终点的最短路径信息,故在重规划时效率大大提升。

A*是正向搜索,而D*特点是反向搜索,即从目标点开始搜索过程。在初次遍历时候,与Dijkstr算法一致,它将每个节点的信息都保存下来。

下图是PPT截图,起点为(2,1),目标终点为(7,6),搜索中每个节点都有一个反向指针,指向让其h最小的父节点。当起点在open表被弹出时,

从起点到终点的路径就出现了。

h代表该节点到终点,也就是目标点G的代价。k是该节点所有过的h的最小值。b是父节点。

假设我们检测到某点被阻碍了,如上图的(4,3)点,它变成了墙,它的h会被改为一个大值,并将该点和其邻接点重新加入open表中进行搜索,该点 h>k变成了“raise”态,(h=k为lower态)通过搜索,如果它自己周围找不到让h低下来(变为lower)的途径,则它会将这一状态传播到周围。(3,2)点会受影响,它的h将改变,(4,4)(5,4)(5,3)均不会受影响。具体原因可详细看论文。(3,2)点呢,它可以找到点(4,1),只需要把(2,3)的父节点从(4,3)改为(4,1),就能够降低其h的值,它的最终h,k将变为6.2+1.4=7.6 就变为lower态,这一改变也将扩散到(2,1)(2,2)点。

最终,只需要把(2,3)的父节点从(4,3)改为(4,1)即可,因为后面到目标点的路径其实是之前计算过的,不必计算。这样就保证了对动态障碍物再规划的效率。最终的路径规划为:

D*算法的思考与理解相关推荐

  1. 对敏感词过滤(DFA算法)的思考与理解

    对敏感词过滤的思考与理解 一.技术概述 1.这个技术是干什么用的? 2.学习这个技术的原因 3.技术的难点在哪 二.技术详述 1.流程图 2.代码 三.技术过程中遇见的问题和解决过程 四.总结 五.参 ...

  2. BP反向传播算法的思考和直观理解 -卷积小白的随机世界

    https://www.toutiao.com/a6690831921246634504/ 2019-05-14 18:47:24 本篇文章,本来计划再进一步完善对CNN卷积神经网络的理解,但在对卷积 ...

  3. 梯度的直观理解_BP反向传播算法的思考和直观理解 -卷积小白的随机世界

    本篇文章,本来计划再进一步完善对CNN卷积神经网络的理解,但在对卷积层反向传播算法的理解中,越发觉得之前对于BP反向传播算法的理解是不到位的.小白近日觉得,对于深度神经网络,"反向传播&qu ...

  4. 对线性代数的思考和理解

    前言 刚刚看完了"可汗学院公开课-线性代数的本质",对线性代数的理解上了不止一个台阶.虽然大学的时候上过这门必修课,以及本科毕业之后特意读了黄色书皮的<线性代数及其应用> ...

  5. 花了1晚上diy的matlab解数独算法,很好理解!

    花了1晚上diy的matlab解数独算法,很好理解! 前言 一.数独的规则 二.算法 1.思路 2.流程图 3.Matlab代码 总结 前言 老婆最近迷上了数独,还给我拍了张照片,初步了解了规则之后, ...

  6. 【经典算法实现 44】理解二维FFT快速傅里叶变换 及 IFFT快速傅里叶逆变换(迭代法 和 递归法)

    [经典算法实现 44]理解二维FFT快速傅里叶变换 及 IFFT快速傅里叶逆变换(迭代法 和 递归法) 一.二维FFTFFTFFT快速傅里叶变换 公式推导 二.二维FFTFFTFFT 及 IFFTIF ...

  7. 对拼多多优惠券事件的思考,理解流程为何如此重要

    前言 今天IT界最火的新闻莫过于拼多多被褥羊毛事件,损失达到千万级别.新闻链接:拼多多公布"优惠券漏洞"案件进展:上海警方已成立专案组. 从披露的信息来看,此优惠券是拼多多与江苏卫 ...

  8. 草莓采摘机器人——ROS导航(三)ROS自适应蒙特卡罗定位算法(ACML)理解

    草莓采摘机器人--ROS导航(三) ROS自适应蒙特卡罗定位算法(AMCL)理解 在详细解释ROS工作原理与步骤之前, 我想先Mark一下自适应蒙特卡罗定位算法的原理与思想. 毕竟算法才是王道. AM ...

  9. 关于实时TopN排名算法的思考

    关于实时TopN排名算法的思考 0.引言 1.TopN实时排名算法 1.1 一个失败的方案 1.2 现成的数据结构? 1.3 合理的方案 Reference 0.引言 实时排名是网络应用中常见的功能. ...

最新文章

  1. 服务器同步什么文件类型,不同服务器同步文件类型
  2. Docker 容器技术 — Overview
  3. 数学建模学习笔记——模糊综合评价模型(评价类,发放问卷一般不用)
  4. 2018年DApp分析 | 链塔区块链产业年鉴精选
  5. Content Compression Resistance和Content Hugging
  6. 都是套路:高并发系统的降级特技
  7. 前端UI框架《Angulr》入门
  8. 第一代计算机主要用于科学计算和数据处理,计算机一级第一章练习题.doc
  9. 深交所向华谊兄弟发问询函:是否存在对本期业绩“大洗澡”
  10. 锁-概念:可重入锁、可中断锁、公平锁、读写锁
  11. LeetCode 33 Search in Rotated Sorted Array(循环有序数组中进行查找操作)
  12. mysql hash分区 子分区_mysql分区管理 - hash分区
  13. 【Arduino】WIN7装不上arduino驱动解决办法
  14. Parcel 中文文档 | Parcel 中文网
  15. 不同波特率传输时间计算
  16. 安装 Windows Server 2019 VM虚拟机
  17. 估计的商是什么意思_《商》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
  18. 10组团队项目-Beta冲刺-1/5
  19. 【AI大咖】认真认识一代AI教父Hinton
  20. python win32 EnumWindows

热门文章

  1. 三角函数:图像和性质关系
  2. mysql修改100条数据_sql 修改前100条数据库
  3. 海思开发板中的YUV420格式解析
  4. c#split方法拆分为数据_C#实现字符串按多个字符采用Split方法分割 | 学步园
  5. CSDN芒果独家原创YOLOv5改进、YOLOv7改进(适用YOLOv8改进)专栏 | 《芒果YOLO改进系列进阶指南》来自人工智能专家唐宇迪老师联袂推荐
  6. 嵌入式linux模块复位,单片机嵌入式系统软件复位的几种方式
  7. 5G射频前端核心器件之一——射频滤波器向高频化、模组化方向发展
  8. 如何将jpg图片做成gif?教你简单三步快速做gif
  9. 2022年10大最受欢迎的顶级机器学习库(免费、开源)
  10. 到银联的调试过程,总结,记录