淘宝客做网站怎样推广,空间购买后打不开网站,拓者设计吧官方网站,网站推广最有效的方法先做一个声明#xff1a;文章是由我的个人公众号中的推送直接复制粘贴而来#xff0c;因此对智能优化算法感兴趣的朋友#xff0c;可关注我的个人公众号#xff1a;启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法#xff0c;经典的#xff0c;或者是近几年…先做一个声明文章是由我的个人公众号中的推送直接复制粘贴而来因此对智能优化算法感兴趣的朋友可关注我的个人公众号启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法经典的或者是近几年提出的新型智能优化算法并附MATLAB代码。 “有不少的同学利用智能优化算法搞路径规划往往需要创建栅格地图这里分享两段MATLAB创建栅格地图的代码~” 路径规划需要环境建模环境建模的目的是模拟现实场景将物理空间复刻到抽象空间建立一个可以并且便于计算机处理的环境模型。环境建模其实质就是将算法需要处理的约束条件与物理环境中的障碍物等进行一一映射并且使路径搜索的情况可以直观的展示在虚拟场景中。机器人路径规划的重要环节之一就是建立一个环境模型了方便直观地展现出路径规划的场景和规划结果。
建立环境模型的基本要求就是计算机便于存储、处理和使用。在路径规划方面最常用的图形学环境建模方法有几何法和栅格法。这里介绍一下栅格法。
栅格法根据比例和分割要求将模拟环境进行分割划分成若干相同的栅格然后针对每个栅格设置环境参数根据实际或假设环境设置其中各个栅格障碍物的情况。栅格法处理的环境模型所得栅格数据结构实际就是一张二维表因此栅格地图在计算机中是比较容易创建和维护的。由于栅格地图是按照一定的规则划分的所以很容易将其转移到坐标系下这样障碍物的位置和可行区域就能更加直观的展示出来通过行列来显著标识各位置信息。
栅格法建模的优点在栅格地图中每个位置都可由坐标点来确定该位置状态也可由具体数据来表示。栅格地图很容易于在计算机中进行存储、更新与分析且该方法已在许多机器人系统中得到了成功应用。 01 随机生成 原理其实很简单随机生成一个01矩阵1就表示障碍物指定起点和终点后画出来就行了。障碍物以概率来生成这个概率可以自己定义。比如以0.3的概率随机生成障碍物的40×40的实例那么在40×401600个格子中有0.3×1600480个格子是障碍物画成黑色。
MATLAB代码如下(可直接复制粘贴)
%% 栅格地图创建 %%
%% By 后会无期 %%
%% 2023.10.24 %%
%% 关注微信公众号启发式算法讨论 %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear
clc%% 以Probability的概率生成m×n的栅格图障碍物环境
Probability0.2; % 设置障碍区概率(可自行更改)
m30;n30; % 设置地图的大小(可自行更改)Rrand(m,n); % 初始化一个m×n的[0,1]之间随机矩阵用来生成矩阵G
Gzeros(m,n); % 初始化一个m×n的零矩阵后续用来存储地图
for i1:mfor j1:nif R(i,j)0.2G(i,j)1; % 1表示障碍物elseG(i,j)0; % 0表示无障碍endend
end% 规定起点和终点(可自行更改)
G(1,1)0;
G(m,n)0; %% 画栅格地图
figure;
axis([0,m,0,n]);
for i1:mfor j1:n% 计算小方框的四个顶点的横、纵坐标x1j-1;y1n-i;x2j;y2n-i;x3j;y3n-i1;x4j-1;y4n-i1;% 绘制栅格图if G(i,j)1fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0,0,0]);hold onelsefill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);hold onendend
end% 画起点图标(可自行更改)
fill([0,1,1,0],[n-1,n-1,n,n],[1,0,0]);
% 画终点图标(可自行更改)
fill([m-1,m,m,m-1],[0,0,1,1],[0,0,1]);
比如以0.2概率随机生成障碍物的30×30栅格地图运行代码结果如下 但是也有一个弊端。因为是随机生成障碍物所以障碍物有可能把起点或者终点包围就没办法求解了。比如我们把障碍物的概率提升到0.4还是以30×30的地图为例就有可能出现下面这种情况 如果是这种情况就只能再重新随机生成栅格地图了。 02 手动创建 手动创建就是自己手动设置障碍物的位置这样就可以避免上面那种方法的弊端不会让障碍物包围起点或者终点。
MATLAB代码如下(可直接复制粘贴)
%% 栅格地图创建 %%
%% By 后会无期 %%
%% 2023.10.24 %%
%% 关注微信公众号启发式算法讨论 %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear
clc%% 生成m×n的栅格图障碍物环境
m30; n30;% 规定每个坐标中的对象
matrix(ones(m,n)); % 地图矩阵
imshow(matrix,InitialMagnification,fit)
[Row,Column] size(matrix); % 获取图像的大小% 产生网格
x 0.5:1:Column1;
y 0.5:1:Row1;
M meshgrid(x,y);
N meshgrid(y,x);
hold onplot(x,N,b); % 画出水平横线
plot(M,y,b); % 画出垂直竖线
pause(1);% 构建一个对话框
zuomsgbox(利用鼠标左键定义障碍物位置定义完成后右键定义最后一个障碍物结束定义);
uiwait(zuo,10);
if ishandle(zuo) 1delete(zuo);
end% 设置横坐标题目, 再次提醒
xlabel(利用鼠标左键定义障碍物位置定义完成后右键定义最后一个障碍物结束定义,Color,red);ob 1;
while ob 1[xval,yval,ob] ginput(1);xvalfloor(xval 0.5);yvalfloor(yval 0.5);matrix(yval,xval)0; % 设置障碍物imshow(matrix,InitialMagnification,fit)plot(x,N,b); % 画出水平横线plot(M,y,b); % 画出垂直竖线
end
hold offfigure
imshow(matrix,InitialMagnification,fit) % 画出最终栅格图
save(MAP.mat,MAP); % 存储栅格地图的矩阵
还是以30×30的地图为例运行结果如下 然后就自己手动创建障碍物。用鼠标来点点点。我这里懒得点。
手动创建的弊端就是繁琐。比如以0.3的概率随机生成障碍物的30×30的实例那么在30×30900个格子中有0.3×900270个格子是障碍物你需要点270次才能完成创建。而在这个过程中你需要自己计数。 最后应大家要求建立了一个算法交流群912369858
欢迎大家进群交流谢谢 可通过下方链接下载代码清单在里面寻找需要的算法代码然后去对应的链接获取。清单会同步更新一旦有新的代码就可以在清单里找到。清单里面有部分代码是开源获取的。可随时免费下载。
链接https://pan.baidu.com/s/1SFDMplrL7tiqGZlrpOSGYg
提取码8023