91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

D*算法又稱為動態A*算法,在未知環境或有動態障礙物出現時,采用A*算法需要丟棄初始規劃完成的open表和close表,重新進行規劃。造成規劃時間的增加,D*算法的核心思想是先用dijkstra或A*從目標點向初始點進行反向搜索,然后機器人從起點向目標點移動,當遇到動態障礙物時,只進行局部的更改即可,效率明顯提高。本仿真基于matlab進行D*算法的動畫演示。

資源截圖

代碼片段和文件信息

function?Dstar
clc;
clear;
%%?初始化界面
?n?=?10;???%?field?size?n?x?n?tiles??20*20的界面
%wallpercent?=?0.3;??%?this?percent?of?field?is?walls???15%的界面作為阻礙物(墻)
cmap?=?[1?1?1;?...%??1?-?white?-?空地
????????0?0?0;?...%?2?-?black?-?障礙?
????????1?0?0;?...%?3?-?red?-?已搜索過的地方
????????0?0?1;?...%?4?-?blue?-?下次搜索備選中心?
????????0?1?0;?...%?5?-?green?-?起始點
????????1?1?0;...%?6?-?yellow?-??到目?標點的路徑?
???????1?0?1];%?7?-?-??目標點?
colormap(cmap);?
global?field;
field?=?ones(n);?
startposind?=12;???%sub2ind用來將行列坐標轉換為線性坐標,這里是必要的,因為如果把startposind設置成[xy]的形式,訪問field([xy])的時候
goalposind?=77;????%它并不是訪問x行y列元素,而是訪問線性坐標為x和y的兩個元素
%?field(ceil(n^2.*rand(floor(n*n*wallpercent)1)?))?=?Inf;
field(81:3)?=?2;?
field(2:53:5)=2;
?%???field(810)=Inf;
%?startposind?=?sub2ind([nn]ceil(n.*rand)ceil(n.*rand));???%sub2ind用來將行列坐標轉換為線性坐標,這里是必要的,因為如果把startposind設置成[xy]的形式,訪問field([xy])的時候
%goalposind?=?sub2ind([nn]ceil(n.*rand)ceil(n.*rand));????%它并不是訪問x行y列元素,而是訪問線性坐標為x和y的兩個元素
field(startposind?)=5;
field(goalposind?)=7;
global?costchart;
costchart?=?NaN*ones(n);??????%costchart用來存儲各個點的實際代價,NaN代表不是數據(不明確的操作)
costchart(goalposind)?=?0;?????%起點的實際代價
%?生成n*n的元胞
global?fieldpointers;
fieldpointers?=?zeros(n);??????%fieldpointers用來存儲各個點的來源方向
%??起點設置為“S“終點設置為“G“
%fieldpointers{startposind}?=?‘S‘;?fieldpointers{goalposind}?=?‘G‘;
%?墻的方向設置為0
%fieldpointers(field?==?2)?=?{0};??
global?setOpen;
global?setOpenCosts_h;
global?setOpenCosts_k
global?setClosed;
global?setClosedCosts;
global?movementdirections
setOpen?=?(goalposind);?setOpenCosts_h?=?(0);?%setOpenHeuristics?=?(Inf);
setOpenCosts_k=(0);
setClosed?=?[];?setClosedCosts?=?[];%初始化起點的open表和close表
movementdirections?=?{‘L‘‘R‘‘U‘‘D‘};
%counterIterations?=?1;
tic
while?true?%ismember(AB)返回與A同大小的矩陣,其中元素1表示A中相應位置的元素在B中也出現,0則是沒有出現
????if(max(ismember(setOpenstartposind)))?
???????break;
????end???
????if?isempty(setOpen)
??????break;?
????end?????????%當OPEN表為空,代表可以經過的所有點已經查詢完畢?
????process_state(2nstartposindgoalposind)?????????????????
end

%%?顯示路線運動過程中不會出現動態障礙物
if?max(ismember(setOpenstartposind))????%當找到目標點時
??disp(‘已找到路徑!‘);??%disp:?Display?array,?disp(X)直接將矩陣顯示出來,不顯示其名字,如果X為string,就直接輸出文字X
?????posind?=?startposind;
?????while?(fieldpointers(posind(1))?~=?0)?
?????????posind?=?[fieldpointers(posind(1))?posind];?????
?????end?
??????posind=flip(posind);????%翻轉矩陣
?????for?k?=?2:length(posind)?-?1?
????????field(posind(k))?=6;
????????image(1.5?1.5?field);
????????field(startposind?)=5;
????????field(goalposind?)=7;
????????grid?on;
????????set(gca‘gridline‘‘-‘‘gridcolor‘‘y‘‘linewidth‘2‘GridAlpha‘0.5);
????????set(gca‘xtick‘1:1:11‘ytick‘1:1:11);
????????axis?image;
????????drawnow;
????????title(‘基于D*算法的路徑規劃?‘‘fontsize‘16)
????end??????
elseif?isempty(setOpen)
??????disp(‘路徑不存在!‘);?
end
%%?運動過程中出現障礙物
??figure(2);
??cmap?=?[1?1?1;?...%??1?-?white?-?空地
????????0?0?0;?...%?2?-?black?-?障礙?
????????1?0?0;?...%?3?-?red?-?已搜索過的地方
???????

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????11974??2019-04-25?09:10??Dstar.m

評論

共有 條評論