资源简介
博文详细介绍用MATLAB实现基于A*算法的路径规划(附完整的代码,代码逐行进行解释)(四)--------固定障碍物,进一步对比 的附件,包含了文章介绍的完整的matlab文件
代码片段和文件信息
%matlab初始化
clc; %清除命令窗口的内容
clear all; %清除工作空间的所有变量,函数,和MEX文件
close all; %关闭所有的figure窗口
%方格数及障碍物比例的设定
n = 100; % 产生一个n x n的方格,修改此值可以修改生成图片的方格数
wallpercent = 0.4; % 这个变量代表生成的障碍物占总方格数的比例 ,如0.5 表示障碍物占总格数的50%
Environmental_Set=0; %这个参数用来选择是否随机生成障碍物,若设定为0,则使用上一次创建的环境信息,若设定为1,则重新随机生成障碍物
Reset_GS=1; %这个参数用来选择是否重新设定起始点和终止点,若设定为1,开始重新设定起始点和终止点,同时需要将变量New_goalposind和New_startposind的值修改为你所选择的起始点和终止点的索引值,设为0则关闭
New_startposind=4100; New_goalposind=8200; %若将Reset_GS设定为1,则需要将变量New_goalposind和New_startposind的值修改为你所选择的起始点和终止点的索引值,要确保新设的这两个点处没有障碍物
%方格以及障碍物的创建
if(Environmental_Set)
[field startposind goalposind costchart fieldpointers] =initializeField(nwallpercent); %随机生成包含障碍物,起始点,终止点等信息的矩阵
save(‘Environmental‘‘field‘‘startposind‘‘goalposind‘‘costchart‘‘fieldpointers‘ )
else
load(‘Environmental‘)
end
%重新设定起始点和终止点
if(Reset_GS)
[field startposind goalposind costchart fieldpointers] = Reset_G_S(field startposind goalposind costchart fieldpointersNew_startposindNew_goalposind);
end
% 路径规划中用到的一些矩阵的初始化
setOpen = [startposind]; setOpenCosts = [0]; setOpenHeuristics = [Inf];
setClosed = []; setClosedCosts = [];
movementdirections = {‘R‘‘L‘‘D‘‘U‘}; %移动方向
% 这个函数用来随机生成环境,障碍物,起点,终点
axishandle = createFigure(fieldcostchartstartposindgoalposind); %将随机生成的方格及障碍物的数据生成图像
%%
% 这个while循环是本程序的核心,利用循环进行迭代来寻找终止点
while ~max(ismember(setOpengoalposind)) && ~isempty(setOpen)
[temp ii] = min(setOpenCosts + setOpenHeuristics); %寻找拓展出来的最小值
%这个函数的作用就是把输入的点作为父节点,然后进行拓展找到子节点,并且找到子节点的代价,并且把子节点距离终点的代价找到
[costsheuristicsposinds] = findFValue(setOpen(ii)setOpenCosts(ii) fieldgoalposind‘euclidean‘);
setClosed = [setClosed; setOpen(ii)]; % 将找出来的拓展出来的点中代价最小的那个点串到矩阵setClosed 中
setClosedCosts = [setClosedCosts; setOpenCosts(ii)]; % 将拓展出来的点中代价最小的那个点的代价串到矩阵setClosedCosts 中
% 从setOpen中删除刚才放到矩阵setClosed中的那个点
%如果这个点位于矩阵的内部
if (ii > 1 && ii < length(setOpen))
setOpen = [setOpen(1:ii-1); setOpen(ii+1:end)];
setOpenCosts = [setOpenCosts(1:ii-1); setOpenCosts(ii+1:end)];
setOpenHeuristics = [setOpenHeuristics(1:ii-1); setOpenHeuristics(ii+1:end)];
%如果这个点位于矩阵第一行
elseif (ii == 1)
setOpen = setOpen(2:end);
setOpenCosts = setOpenCosts(2:end);
setOpenHeuristics = setOpenHeuristics(2:end);
%如果这个点位于矩阵的最后一行
else
setOpen = setOpen(1:end-1);
setOpenCosts = setOpenCosts(1:end-1);
setOpenHeuristics = setOpenHeuristics(1:end-1);
end
%%
% 把拓展出来的点中符合要求的点放到setOpen 矩阵中,作为待选点
for jj=1:length(posinds)
if ~isinf(costs(jj)) % 判断该点(方格)处没有障碍物
% 判断一下该点是否 已经存在于setOpen 矩阵或者setClosed 矩阵中
% 如果我们要处理的拓展点既不在setOpen 矩阵,也不在setClosed 矩阵中
if ~max([setClosed; setOpen] == posinds(jj))
fieldpointers(posinds(jj)) = movementdirections(jj);
costchart(posinds(jj)) = costs(jj);
setOpen = [setOpen; posinds(jj)];
s
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 13449 2020-10-10 16:06 A_ROAD_book03.m
文件 17631 2020-10-10 16:03 A_ROAD_book05.m
文件 13345 2020-10-10 16:08 A_ROAD_book02.m
相关资源
- 固定捕鱼.mqb
-
固态变压器simuli
nk模型 - 基于matlab的三维杆系有限元软件
- 转子系统固有频率的传递矩阵计算方
- 地心地固坐标系ECEF转地心惯性系ECI
- 有限元法求解两端简支、固定梁的固
- 发动机悬置系统解耦率、固有频率以
- Access做的固定资产系统
- 航天器轨道力学
- 5 matlab的几种小波阈值去噪方法实例。
- ITD 固有时间尺度分解——新的信号分
- gudinggonglv 在非正交(NOMA)环境下对用
- signal-sorting 针对信号分选的几种常见
- beamforming 固定权值的常规波束形成
- dynamic-model-of-fixed-aircraft
- 波束形成算法MATLAB
评论
共有 条评论