博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
路径规划算法D*学习总结
阅读量:3903 次
发布时间:2019-05-23

本文共 1161 字,大约阅读时间需要 3 分钟。

通过调研发现目前移动机器人动态路径规划用的比较多的路径规划算法是D*,本人写这篇博客的目的在于记录自己自己这几天的调研总结和学习体会。

1.简介

D*是动态A*(, Dynamic A*) 卡耐基梅隆机器人中心的Stentz在1994和1995年的两篇文章提出,主要用于机器人探路。美国火星探测器上采用的就是此寻路算法。

2.主要方法

1.先用Dijkstra算法从目标节点G向起始节点搜索。储存路网中目标点到各个节点的最短路和该位置到目标点的实际值h,k(k为所有变化h之中最小的值,当前为k=h。每个节点包含上一节点到目标点的最短路信息1(2),2(5),5(4),4(7)。则1到4的最短路为1-2-5-4。

原OPEN和CLOSE中节点信息保存。

2.机器人沿最短路开始移动,在移动到下一节点没有变化时,无需计算,利用上一步Dijstra计算出的最短路信息从出发点向后继续即可,当在Y点探测到下一节点X状态发生改变,如堵塞,机器人首先调整自己在当前位置Y到目标点G的实际值h(Y),h(Y)=X到Y的新权值c(X,Y)+X的原实际值h(X),X为下一节点(到目标点方向Y->X->G),Y是当前点。k值取h值变化前后的最小值。

3.其他的方法

用A*算法,遍历Y的子节点,点放入CLOSE,调整Y的子节点a的h值,h(a)=h(Y)+Y到子节点a的权重C(Y,a),比较a点是否存在于OPEN和CLOSE中,方法如下:

while()

{

从OPEN表中取k值最小的节点Y;

遍历Y的子节点a,计算a的h值 h(a)=h(Y)+Y到子节点a的权重C(Y,a)

{

if(a in OPEN) 比较两个a的h值

if( a的h值小于OPEN表a的h值 )

{ 更新OPEN表中a的h值;k值取最小的h值

有未受影响的最短路经存在

break;

}

if(a in CLOSE) 比较两个a的h值 //注意是同一个节点的两个不同路径的估价值

if( a的h值小于CLOSE表的h值 )

{

更新CLOSE表中a的h值; k值取最小的h值;将a节点放入OPEN表

有未受影响的最短路经存在

break;

}

if(a not in both)

将a插入OPEN表中; //还没有排序

}

放Y到CLOSE表;

OPEN表比较k值大小进行排序;

}

机器人利用第一步Dijkstra算法计算出的最短路信息从a点到目标点的最短路径进行。

4.优缺点

D*算法在动态环境中寻路非常有效,向目标点移动中,只检查上下一节点或临近节点的变化情况,如机器人寻路等情况。对于距离远的上发生的变化,则感觉不太适用。

本文写作的过程中主要参考了百度百科:,并且阅读了最初的论文,但是对于D*算法的精髓理解的还是不太到位,还需要进一步的领会!

转载地址:http://juxen.baihongyu.com/

你可能感兴趣的文章
Linux日志学习
查看>>
Linux块设备加密之dm-crypt分析
查看>>
网站建设工具对比:IM Creator, Mobirise, Webydo以及uKit
查看>>
python利用企业微信api来进行发送自定义报警的类实现
查看>>
linux内核中协议栈--tcp实现的一点细节
查看>>
Linux-2.6.25 TCPIP函数调用大致流程
查看>>
BP 神经网络之我见s庆
查看>>
java中对文件的操作
查看>>
java中的内部类之简单学习
查看>>
java的字符流简单介绍
查看>>
java用FileReader和FileWrite读取和写入字符
查看>>
java的序列化和反序列化
查看>>
初识java的xml
查看>>
通过DOM方式对xml文件进行解析
查看>>
利用DOM方式生成XML文件
查看>>
java中使用SAX生成XML文件
查看>>
利用java获取网页内容
查看>>
Matlab中画图的说明
查看>>
python之对list进行切片学习
查看>>
五人预测比赛结果均答对一半,求比赛名次
查看>>