【机器人栅格地图】基于A星算法求解多机器人栅格路径规划及避障Matlab源码
1 简介
移动机器人路径规划一直是一个比较热门的话题,A星算法以及其扩展性算法被广范地应用于求解移动机器人的最优路径.该文在研究机器人路径规划算法中,详细阐述了传统A星算法的基本原理,并通过栅格法分割了机器人路径规划区域,利用MATLAB仿真平台生成了机器人二维路径仿真地图对其进行仿真实验,并对结果进行分析和研究,为今后进一步的研究提供经验.
2 部分代码
function path = Astar(zhangai,ditu)
close=[];%关闭路径
path=[];
findflag=false;
open=[ditu.qishi(1),ditu.qishi(2),h(ditu.mubiao,ditu.qishi),0,ditu.qishi(1),ditu.qishi(2)];
next = [-1,1,14;0,1,10;1,1,14;-1,0,10;1,0,10;-1,-1,14;0,-1,10;1,-1,14];%八个方向运动
%如上所述, G 是从起点A移动到指定方格的移动代价。
% 在本例中,横向和纵向的移动代价为 10 ,对角线的移动代价为 14 。 之所以使用这些数据,是因为实际的对角移动距离是 2 的平方根,
% 或者是近似的 1.414 倍的横向或纵向移动代价。使用 10 和 14
% 就是为了简单起见。比例是对的,我们避免了开放和小数的计算。
% 这并不是我们没有这个能力或是不喜欢数学。使用这些数字也可以使计算机更快。稍后你便会发现,如果不使用这些技巧,寻路算法将很慢。
while ~findflag
[finish,hangshu]=inopen(ditu.mubiao,open);
if finish==1%抵达终点结束
close=[open(hangshu,:);close];
findflag=true;
break;
end
[B,I]=sort(open(:,3));
open=open(I,:);
close=[open(1,:);close];%取节点最近的
jiedian=open(1,:);
open(1,:)=[];
for i=1:8
m(1)=jiedian(1,1)+next(i,1);%横坐标移动
m(2)=jiedian(1,2)+next(i,2);%纵坐标移动
m(4)=jiedian(1,4)+next(i,3);%距离
m(3)=m(4)+h(ditu.mubiao,m(1:2));%下一个点到终点的距离
if shizhangai(m,zhangai)%判断是否是障碍,是障碍继续
continue;
end
if inclose(m,close)
continue;
end
[flag,hang]=inopen(m,open);
if flag==2
m(5:6)=[jiedian(1,1);jiedian(1,2)];
open=[open;m];
end
if flag==1
if m(3)<open(hang,3)
m(5:6)=[jiedian(1,1);jiedian(1,2)];
open(hang,:)=m;
end
end
end
end
path=close;
end
3 仿真结果

4 参考文献
[1]陈晓娥, 苏理. 一种基于环境栅格地图的多机器人路径规划方法[J]. 机械科学与技术, 2009(10):5.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
