💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
广度优先搜索算法(Breadth-First Search,BFS)是一种常用的图搜索算法,用于在图或树数据结构中寻找从起始节点到目标节点的最短路径。首先,将起始节点标记为已访问,并将其加入到一个队列(FIFO)中。同时,将起始节点的距离设置为0如果需要找到起始节点到目标节点的实际路径,可以在BFS执行过程中记录每个节点的父节点。这样,当找到目标节点时,可以通过父节点指针链条回溯到起始节点,构造出完整的最短路径。广度优先搜索算法常用于寻找最短路径、解决迷宫问题、图的遍历等。由于其找到的路径是最短的,因此在需要求解最短路径的问题中具有广泛的应用。
广度优先搜索算法(BFS)是一种常用的图搜索算法,用于在图或树数据结构中找到特定节点之间的最短路径。在路径规划中,BFS算法可以用于寻找从起点到终点的最短路径,同时确保路径的连续性和有效性。以下是基于广度优先搜索算法的路径规划研究的一般步骤:
1. 确定问题:首先确定路径规划的具体问题,包括起点和终点的位置,以及可能的障碍物或限制条件。
2. 构建图结构:将路径规划问题转化为图结构,其中节点表示可能的位置或状态,边表示节点之间的连接关系。确保图中包含所有可能的路径和连接。
3. 初始化队列:将起点添加到队列中,并标记为已访问。
4. 开始搜索:从队列中取出一个节点,检查其相邻节点是否为终点。如果是终点,则路径已找到;否则将相邻节点添加到队列中,并标记为已访问。
5. 循环搜索:重复上述步骤,直到找到终点或队列为空。在此过程中,确保每个节点只被访问一次,以避免陷入循环。
6. 回溯路径:一旦找到终点,可以通过回溯的方式找到从起点到终点的最短路径。从终点开始,沿着每个节点的父节点回溯,直到到达起点。
7. 输出结果:最终输出找到的最短路径,包括起点、终点和经过的所有节点。
通过以上步骤,基于广度优先搜索算法的路径规划研究可以有效地找到起点到终点的最短路径,并且保证路径的连续性和有效性。在实际应用中,可以根据具体情况对算法进行优化,以提高搜索效率和路径规划的准确性。
📚2 运行结果
主函数部分代码:
%% Defining Obstacle Parameters and Initializing Variables
clear all
clc
size_x = 250;
size_y = 150;
rect_x = [55,55,105,105];
rect_y = [67,112,112,67];
poly_x = [120,158,165,188,168,145,120];
poly_y = [55,51,89,51,14,14,55];
circ_x = 180;
circ_y = 120;
circ_r = 15;
Orectangle = [rect_x;rect_y];
Opolygon = [poly_x;poly_y];
Ocircle = [circ_x;circ_y;circ_r];
Arena = zeros(size_y,size_x);
Visited_x = [];
Visited_y = [];
Display_Live = 0;
% Calling the function to make Obstacle Space
[Arena] = ObstacleSpace_generator(Orectangle,Opolygon,Ocircle,Arena);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% SET THE MAP
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
% draw grid environment
xp3 = [0 ,250, 250, 0 ,0];
yp3 = [0 ,0, 150 ,150 ,0];
drawnow
plot(xp3,yp3);
alpha(0.3);
V = [0 0; 0 size_y; size_x size_y; size_x 0];
F = [1 2 3 4];
patch('Faces',F,'Vertices',V,'FaceColor','blue','FaceAlpha',0.4);
hold on;
% Defining Rectangular and Polygonal Obstacle
o1x = 55; o1y = 67; o1xw = 50; o1yw = 45;
rect_pos = [ o1x o1y o1xw o1yw];
rectangle('Position',rect_pos,'FaceColor','b');
OX1 = [120 158 165 188 168 145 120];
OY1 = [55 51 89 51 14 14 55];
patch(OX1,OY1,'blue');
% Defining Circular Obstacle
center_x=180;
center_y = 120;
t = 0:0.01:2*pi;
x = 15*cos(t)+ center_x;
y = 15*sin(t) + center_y;
drawnow
plot(x,y),
fill(x,y,'b');
title(' \fontsize{20} Please Select a Start Point');
% start locations
[ sx,sy] = ginput(1);
sx = round(sx); sy = round(sy);
Start_Node = [sx sy];
%%% Check inputs for boundaries
while Arena(sy,sx) == 1
title('\fontsize{20}Please Select a Correct Start Point');
[sx,sy] = ginput(1);
sx = round(sx); sy = round(sy);
Start_Node = [sx sy];
end
title('\fontsize{20}Now Please Select a Goal Point');
[gx,gy] = ginput(1);
gx = round(gx); gy = round(gy);
Goal_Node = [gx gy];
%%% Check inputs for boundaries
while Arena(gy,gx) == 1
title('\fontsize{20}Please Select a Correct Goal Point');
[gx,gy] = ginput(1);
gx = round(gx); gy = round(gy);
Goal_Node = [gx gy];
end
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
[1]丁金虎.基于改进蚁群算法的消防救援机器人路径规划方法[J].科技创新与应用,2024,14(14):133-136.DOI:10.19981/j.CN23-1581/G3.2024.14.032.
[2]颜明重,李琛,朱大奇.基于生物启发神经网络的无人水面艇实时避障路径规划系统[J/OL].上海海事大学学报:1-9[2024-05-15].https://doi.org/10.13340/j.jsmu.202304260096.