MATLAB栅格法地图环境

 

该项目的完整代码,我已经全部开源了,请follow我的github查看,全部源码内容;

欢迎指正代码的错误之处。

如果,你对代码有任何修改的意见,可以加入到这个项目的讨论中,谢谢!

link:  https://github.com/SimileciWH/ELDO_AFSA-clone-


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

 

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

  • 58
    点赞
  • 427
    收藏
    觉得还不错? 一键收藏
  • 49
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 49
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值