【機器人柵格地圖】基于A星算法求解多機器人柵格路徑規(guī)劃及避障Matlab源碼
1 簡介
移動機器人路徑規(guī)劃一直是一個比較熱門的話題,A星算法以及其擴(kuò)展性算法被廣范地應(yīng)用于求解移動機器人的最優(yōu)路徑.該文在研究機器人路徑規(guī)劃算法中,詳細(xì)闡述了傳統(tǒng)A星算法的基本原理,并通過柵格法分割了機器人路徑規(guī)劃區(qū)域,利用MATLAB仿真平臺生成了機器人二維路徑仿真地圖對其進(jìn)行仿真實驗,并對結(jié)果進(jìn)行分析和研究,為今后進(jìn)一步的研究提供經(jīng)驗.
2 部分代碼
function path = Astar(zhangai,ditu)
close=[];%關(guān)閉路徑
path=[];
findflag=false;
open=[ditu.qishi(1),ditu.qishi(2),h(ditu.mubiao,ditu.qishi),0,ditu.qishi(1),ditu.qishi(2)];
next = [-1,1,14;0,1,10;1,1,14;-1,0,10;1,0,10;-1,-1,14;0,-1,10;1,-1,14];%八個方向運動
%如上所述, G 是從起點A移動到指定方格的移動代價。
% 在本例中,橫向和縱向的移動代價為 10 ,對角線的移動代價為 14 。 之所以使用這些數(shù)據(jù),是因為實際的對角移動距離是 2 的平方根,
% 或者是近似的 1.414 倍的橫向或縱向移動代價。使用 10 和 14
% 就是為了簡單起見。比例是對的,我們避免了開放和小數(shù)的計算。
% 這并不是我們沒有這個能力或是不喜歡數(shù)學(xué)。使用這些數(shù)字也可以使計算機更快。稍后你便會發(fā)現(xiàn),如果不使用這些技巧,尋路算法將很慢。
while ~findflag
? ?[finish,hangshu]=inopen(ditu.mubiao,open);
? ?if finish==1%抵達(dá)終點結(jié)束
? ? ? ?close=[open(hangshu,:);close];
? ? ? ?findflag=true;
? ? ? ?break;
? ?end
? ?[B,I]=sort(open(:,3));
? ?open=open(I,:);
? ?close=[open(1,:);close];%取節(jié)點最近的
? ?jiedian=open(1,:);
? ?open(1,:)=[];
for i=1:8
? ?m(1)=jiedian(1,1)+next(i,1);%橫坐標(biāo)移動
? ?m(2)=jiedian(1,2)+next(i,2);%縱坐標(biāo)移動
? ?m(4)=jiedian(1,4)+next(i,3);%距離
? ?m(3)=m(4)+h(ditu.mubiao,m(1:2));%下一個點到終點的距離
? ?if shizhangai(m,zhangai)%判斷是否是障礙,是障礙繼續(xù)
? ? ? ?continue;
? ?end
? ?if inclose(m,close)
? ? ? ?continue;
? ?end
? ?[flag,hang]=inopen(m,open);
? ?if flag==2
? ? ? ?m(5:6)=[jiedian(1,1);jiedian(1,2)];
? ? ? ?open=[open;m];
? ?end
? ?if flag==1
? ? ? ?if m(3)<open(hang,3)
? ? ? ? ? ?m(5:6)=[jiedian(1,1);jiedian(1,2)];
? ? ? ? ? ?open(hang,:)=m;
? ? ? ?end
? ?end ?
end
end
path=close;
end
3 仿真結(jié)果

4 參考文獻(xiàn)
[1]陳曉娥, 蘇理. 一種基于環(huán)境柵格地圖的多機器人路徑規(guī)劃方法[J]. 機械科學(xué)與技術(shù), 2009(10):5.
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號處理、元胞自動機、圖像處理、路徑規(guī)劃、無人機等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
