【機(jī)器人柵格地圖】基于A星算法求解多機(jī)器人柵格路徑規(guī)劃及避障Matlab源碼
【機(jī)器人柵格地圖】基于A星算法求解多機(jī)器人柵格路徑規(guī)劃及避障Matlab源碼
TT_Matlab
博主簡(jiǎn)介:擅長(zhǎng)智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無人機(jī)等多種領(lǐng)域的Matlab仿真,完整matlab代碼或者程序定制加qq1575304183。
1 簡(jiǎn)介
移動(dòng)機(jī)器人路徑規(guī)劃一直是一個(gè)比較熱門的話題,A星算法以及其擴(kuò)展性算法被廣范地應(yīng)用于求解移動(dòng)機(jī)器人的最優(yōu)路徑.該文在研究機(jī)器人路徑規(guī)劃算法中,詳細(xì)闡述了傳統(tǒng)A星算法的基本原理,并通過柵格法分割了機(jī)器人路徑規(guī)劃區(qū)域,利用MATLAB仿真平臺(tái)生成了機(jī)器人二維路徑仿真地圖對(duì)其進(jìn)行仿真實(shí)驗(yàn),并對(duì)結(jié)果進(jìn)行分析和研究,為今后進(jìn)一步的研究提供經(jīng)驗(yàn).
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è)方向運(yùn)動(dòng)
%如上所述, G 是從起點(diǎn)A移動(dòng)到指定方格的移動(dòng)代價(jià)。
% 在本例中,橫向和縱向的移動(dòng)代價(jià)為
10
,對(duì)角線的移動(dòng)代價(jià)為
14
。之所以使用這些數(shù)據(jù),是因?yàn)閷?shí)際的對(duì)角移動(dòng)距離是
2
的平方根,
% 或者是近似的
1.414
倍的橫向或縱向移動(dòng)代價(jià)。使用
10
和
14
% 就是為了簡(jiǎn)單起見。比例是對(duì)的,我們避免了開放和小數(shù)的計(jì)算。
% 這并不是我們沒有這個(gè)能力或是不喜歡數(shù)學(xué)。使用這些數(shù)字也可以使計(jì)算機(jī)更快。稍后你便會(huì)發(fā)現(xiàn),如果不使用這些技巧,尋路算法將很慢。
while
~findflag
[finish,hangshu]=inopen(ditu.mubiao,
open
);
if
finish==
1
%抵達(dá)終點(diǎn)結(jié)束
close
=[
open
(hangshu,:);
close
];
findflag=true;
break
;
end
[B,I]=
sort
(
open
(:,
3
));
open
=
open
(I,:);
close
=[
open
(
1
,:);
close
];%取節(jié)點(diǎn)最近的
jiedian=
open
(
1
,:);
open
(
1
,:)=[];
for
i=
1
:
8
m
(
1
)=jiedian(
1
,
1
)+
next
(i,
1
);%橫坐標(biāo)移動(dòng)
m
(
2
)=jiedian(
1
,
2
)+
next
(i,
2
);%縱坐標(biāo)移動(dòng)
m
(
4
)=jiedian(
1
,
4
)+
next
(i,
3
);%距離
m
(
3
)=
m
(
4
)+h(ditu.mubiao,
m
(
1
:
2
));%下一個(gè)點(diǎn)到終點(diǎn)的距離
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)境柵格地圖的多機(jī)器人路徑規(guī)劃方法[J]. 機(jī)械科學(xué)與技術(shù), 2009(10):5.
博主簡(jiǎn)介:擅長(zhǎng)智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)、信號(hào)處理、元胞自動(dòng)機(jī)、圖像處理、路徑規(guī)劃、無人機(jī)等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻(xiàn),若有侵權(quán)聯(lián)系博主刪除。
-
2023年各省最新電價(jià)一覽!8省中午執(zhí)行谷段電價(jià)! 2023-01-03
-
PPT導(dǎo)出高分辨率圖片的四種方法 2022-09-22
-
全國(guó)消防救援總隊(duì)主官及簡(jiǎn)歷(2023.2) 2023-02-10
-
我們的前輩!歷屆全國(guó)工程勘察設(shè)計(jì)大師完整名單! 2022-11-18
-
關(guān)于某送變電公司“4·22”人身死亡事故的快報(bào) 2022-04-26
