路徑規划算法D*學習總結


通過調研發現目前移動機器人動態路徑規划用的比較多的路徑規划算法是D*,本人寫這篇博客的目的在於記錄自己自己這幾天的調研總結和學習體會。

1.簡介

D*是動態A*(D-Star, 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*算法在動態環境中尋路非常有效,向目標點移動中,只檢查 最短路徑上下一節點或臨近節點的變化情況,如機器人尋路等情況。對於距離遠的 最短路徑上發生的變化,則感覺不太適用。
本文寫作的過程中主要參考了百度百科: https://baike.baidu.com/item/D*%E7%AE%97%E6%B3%95,並且閱讀了最初的論文,但是對於D*算法的精髓理解的還是不太到位,還需要進一步的領會!
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM