1. 程式人生 > >MATLAB柵格法地圖環境

MATLAB柵格法地圖環境

1    使用MATLAB實現地圖柵格化

效果圖如下所示

                                            

                                                                                         圖1

                 

                                                                                 圖2 

圖1中的黑色柵格為障礙物柵格,白色柵格為可行走柵格(非障礙物柵格),黑色柵格 用0來表示,白色柵格用1來表示

2    柵格環境的environment.txt的構建

   1   0   1   1   1   1   1   0   1   1   0   1   1   1   0   0   0   1   1   1
   1   1   1   1   0   0   1   1   1   0   1   1   0   1   1   1   1   0   1   0
   1   1   1   0   1   1   0   0   1   1   1   1   1   1   0   1   1   0   1   1
   0   0   1   0   0   1   1   1   0   1   1   0   1   1   0   1   1   1   1   1
   1   0   1   1   1   1   0   1   1   0   1   1   1   0   0   1   1   1   1   1
   0   1   0   1   0   0   0   0   1   1   0   1   1   1   1   1   1   1   1   0
   1   1   0   0   0   1   0   1   0   1   1   1   0   0   0   1   1   1   0   1
   1   1   0   1   0   1   1   1   1   1   1   1   0   0   1   1   1   0   1   0
   1   0   1   1   1   0   1   1   1   1   0   0   0   1   0   1   1   1   1   1
   1   0   0   1   1   1   0   1   1   0   1   1   0   1   0   1   1   1   0   1
   1   0   1   1   1   1   1   0   1   0   1   0   0   1   1   1   0   1   1   1
   1   0   1   0   0   1   1   1   1   1   1   1   1   1   1   0   0   1   1   1
   1   1   1   0   1   1   1   1   0   1   0   1   1   1   0   1   1   0   1   1
   0   0   0   1   0   1   1   1   0   0   1   0   1   0   0   0   0   0   1   1
   1   0   1   0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   0   1
   0   0   0   0   1   1   1   1   0   1   1   1   1   0   1   1   1   1   1   0
   1   1   1   1   1   1   1   1   0   1   1   1   1   1   1   1   1   1   1   1
   1   1   1   1   1   0   0   1   0   1   1   0   1   1   1   0   1   0   0   1
   1   1   1   0   1   0   0   0   1   1   0   1   0   1   0   0   0   1   1   1
   1   0   1   1   1   0   1   1   1   1   0   1   0   1   1   1   0   0   1   1

這是就是圖1中的柵格地圖環境,1代表白色柵格,0代表黑色柵格。你可以手動編輯這樣一個環境檔案,也可以使用matlab的隨機函式rand實現

a = rand(20)>0.35

其中0.35表示的黑色柵格總數佔據全部柵格綜述的百分比。即柵格環境中障礙物柵格(黑色柵格數)為35%,你可以自己隨意定製。

2    構建柵格環境的程式碼部分 

a = load('environment.txt');%blacb--barrier occputy 35%.
% a = load('environment6060.mat', 'k');
% a = a.k;

n = size(a,1);
b = a;
b(end+1,end+1) = 0;
figure;
colormap([0 0 0;1 1 1])
pcolor(b); % 賦予柵格顏色
set(gca,'XTick',10:10:n,'YTick',10:10:n);  % 設定座標
axis image xy

% displayNum(n);%顯示柵格中的數值.

text(1,n+1.5,'START','Color','red','FontSize',10);%顯示start字元
text(n+1,1.5,'GOAL','Color','red','FontSize',10);%顯示goal字元

hold on
%pin strat goal positon
scatter(1+0.5,n+0.5,'MarkerEdgeColor',[1 0 0],'MarkerFaceColor',[1 0 0], 'LineWidth',1);%start point
scatter(n+0.5,1+0.5,'MarkerEdgeColor',[0 1 0],'MarkerFaceColor',[0 1 0], 'LineWidth',1);%goal point

hold on

3    如圖2所示的,賦予柵格數學意義,即每一位柵格數列化

因為柵格是被座標化的,所以只需要將數列的值,以座標(x,y)之間完成轉化即可,我通過displayNum函式實現了這個簡單的功能,程式碼如下:

function displayNum(n)
%輸入引數
%矩陣維數----n
%無輸出
%%
x_text = 1:1:n*n;%產生1-400的數值.
test_num = 32;
%%
%將數值在柵格圖上顯示出來
for i = 1:1:n*n
    [row,col] = ind2sub(n,i);
    [array_x,array_y] = arry2orxy(n,row,col);
    text(array_x+0.2,array_y+0.5,num2str(x_text(i)));
end
%驗證柵格數值與行列值是否對應
[row,col] = ind2sub(n,test_num);
[array_x,array_y] = arry2orxy(n,row,col);
fprintf('the value %d is on array_x = %d,array_y = %d\n',test_num,array_x,array_y);%顯示校對資訊,供人工檢驗.
end

主要通過ind2sub函式將數列和柵格的行列值換算,再通過arry2orxy函式完成,數列到柵格的資料化轉化。ind2sub函式是matlab自帶的通過doc ind2sub檢視函式的具體使用方法。arry2orxy函式是自己編寫的主要實現的是矩陣行列的座標的轉換,比較簡單。

 

至此,你可以在柵格環境中,驗證你自己的演算法了,例如人工魚群演算法,蟻群演算法等等在路徑規劃領域的應用了。