【路径规划】基于蚁群算法求解机器人栅格地图路径规划matlab代码

266 阅读4分钟

1 简介

通过栅格法建立栅格地图作为机器人路径规划的工作环境,采用蚁群算法作为机器人路径搜索的规则.将所有机器人放置于初始位置.经过NC次无碰撞迭代运动找到最优路径.到达目标位置.为防止机器人在路径搜索过程中没有达到最大迭代次数时路径大小已不发生变化而陷入局部最优.可通过对各路径上的信息素进行增减来使机器人路径搜索跳出当前值继续搜索.直到迭代完毕,获得最优路径.

2 部分代码

%function main() 
G=[0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
  0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
  0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
  0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
  0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
  0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
  0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
  0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 0 0 0 0
  0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0
  0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0
  0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0
  0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0
  0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0
  0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0
  1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0
  1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0
  0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 0
  0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0
  0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0
  0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0;];
MM=size(G,1);                  % G 地形图为01矩阵,1表示障碍物 
Tau=ones(MM*MM,MM*MM);         % Tau 初始信息素矩阵
Tau=8.*Tau
K=200;                         % K 迭代次数(指蚂蚁出动多少波)
M=80;                          % 蚂蚁个数
S=1 ;                          % 最短路径的起始点
E=MM*MM;                       % 最短路径的目的点
Alpha=1;                       % Alpha 表征信息素重要程度的参数
Beta=8;                        % Beta 表征启发式因子重要程度的参数
Rho=0.4 ;                      % Rho 信息素蒸发系数
Q=1;                           % Q 信息素增加强度系数 
minkl=inf
mink=0
minl=0
D=G2D(G)
N=size(D,1);            %N表示问题的规模(象素个数)
a=1;                   %小方格象素的边长
Ex=a*(mod(E,MM)-0.5);  %终止点横坐标
if Ex==-0.5 
Ex=MM-0.5
end 
Ey=a*(MM+0.5-ceil(E/MM));%终止点纵坐标
Eta=zeros(N);           %启发式信息,取为至目标点的直线距离的倒数
%以下启发式信息矩阵
for i=1:N 
ix=a*(mod(i,MM)-0.5)
  if ix==-0.5 
  ix=MM-0.5
  end 
iy=a*(MM+0.5-ceil(i/MM));  
  if i~=E 
  Eta(i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5
  else 
  Eta(i)=100
  end 
end 

figure(1) 
plot(minPL)
hold on 
grid on 
title('收敛曲线变化趋势')
xlabel('迭代次数')
ylabel('最小路径长度'); %绘爬行图
figure(2) 
axis([0,MM,0,MM]) 
for i=1:MM 
for j=1:MM 
if G(i,j)==1 
x1=j-1;y1=MM-i; 
x2=j;y2=MM-i; 
x3=j;y3=MM-i+1; 
x4=j-1;y4=MM-i+1; 
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2])
hold on 
else 
x1=j-1;y1=MM-i; 
x2=j;y2=MM-i; 
x3=j;y3=MM-i+1; 
x4=j-1;y4=MM-i+1; 
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1])
hold on 
end 
end 
end 
hold on 
title('机器人运动轨迹')
xlabel('坐标x')
ylabel('坐标y');
ROUT=ROUTES{mink,minl}
LENROUT=length(ROUT)
Rx=ROUT
Ry=ROUT
for ii=1:LENROUT 
Rx(ii)=a*(mod(ROUT(ii),MM)-0.5)
if Rx(ii)==-0.5 
Rx(ii)=MM-0.5
end 
Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM))
end 
plot(Rx,Ry) 
end 
plotif2=1;%绘各代蚂蚁爬行图
if plotif2==1 
figure(3) 
axis([0,MM,0,MM]) 
for i=1:MM 
for j=1:MM 
if G(i,j)==1 
x1=j-1;y1=MM-i; 
x2=j;y2=MM-i; 
x3=j;y3=MM-i+1; 
x4=j-1;y4=MM-i+1; 
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2])
hold on 
else 
x1=j-1;y1=MM-i; 
x2=j;y2=MM-i; 
x3=j;y3=MM-i+1; 
x4=j-1;y4=MM-i+1; 
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1])
hold on 
end 
end 
end 
for k=1:K 
PLK=PL(k,:)
minPLK=min(PLK)
pos=find(PLK==minPLK)
m=pos(1)
ROUT=ROUTES{k,m}
LENROUT=length(ROUT)
Rx=ROUT
Ry=ROUT
for ii=1:LENROUT 
Rx(ii)=a*(mod(ROUT(ii),MM)-0.5)
if Rx(ii)==-0.5 
Rx(ii)=MM-0.5
end 
Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM))
end 
plot(Rx,Ry) 
hold on 
end 
end

3 仿真结果

4 参考文献

[1]周东健, 张兴国, 马海波,等. 基于栅格地图-蚁群算法的机器人最优路径规划[J]. 南通大学学报:自然科学版, 2013, 12(4):91-94.

部分理论引用网络文献,若有侵权联系博主删除。

5 MATLAB代码与数据下载地址

见博客主页