MATLAB栅格法地图环境

1    使用MATLAB实现地图栅格化

效果图如下所示

                                            《MATLAB栅格法地图环境》

                                                                                         图1

                 《MATLAB栅格法地图环境》

                                                                                 图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函数是自己编写的主要实现的是矩阵行列的坐标的转换,比较简单。

 

至此,你可以在栅格环境中,验证你自己的算法了,例如人工鱼群算法,蚁群算法等等在路径规划领域的应用了。

    原文作者:蚁群算法
    原文地址: https://blog.csdn.net/SimileciWH/article/details/83959249
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞