【机器人栅格地图】基于A星算法求解多机器人栅格路径规
划及避障Matlab源码
1 简介
移动机器人路径规划一直是一个比较热门的话题,A星算法以及其扩展性算法被广范地应用于求解移动机
器人的最优路径.该文在研究机器人路径规划算法中,详细阐述了传统A星算法的基本原理,并通过栅格法分
割了机器人路径规划区域,利用MATLAB仿真平台生成了机器人二维路径仿真地图对其进行仿真实验,并对
结果进行分析和研究,为今后进一步的研究提供经验.
2 部分代码
3 仿真结果
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.qish
i(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
endendpath=close;end
评论0