1 简介 栅格法是由W.E.Howden于1968年提出,主要是根据环境建立一个路径栅格地图(Map)。基本原理是将机器人工作环境分割成无数细小的具有二值信息的网格单元,每个网格的规格由机
1 简介
栅格法是由W.E.Howden于1968年提出,主要是根据环境建立一个路径栅格地图(Map)。基本原理是将机器人工作环境分割成无数细小的具有二值信息的网格单元,每个网格的规格由机器人的步长决定,即一个步长代表一个网格大小。在进行网格划分时,无论是障碍物栅格还是非障碍物栅格不满一个时,将其填满,按一个栅格计算。环境信息由黑白网格表示。黑色网格代表障碍物(Barrier),表示不可行区域;白色网格代表可通行区域,又称自由区域。栅格法将不可行区域和自由区域用一个二进制矩阵表示,矩阵中1代表障碍物,0代表自由栅格,由此在环境中建立一个可描述环境的路径规划地图。
2 部分代码
function [bestY,bestX,recording]=GA(x,y,option,data)%% 遗传算法
%% 初始化
recording.bestFit=zeros(option.maxIteration+1,1);
recording.meanFit=zeros(option.maxIteration+1,1);
%% 更新记录
[y_g,position]=min(y);
x_g=x(position(1),:);
y_p=y;
x_p=x;
recording.bestFit=y_g;
recording.meanFit=mean(y_p);
%% 开始更新
for iter=1:option.maxIteration
disp(['GA,iter:',num2str(iter),',minFit:',num2str(y_g)])
if iter==1
newX=x*0;
newY=y;
end
%% 竞标赛法选择个体
for i=1:option.numAgent*2
maxContestants=ceil(randi(option.numAgent));
index=randperm(option.numAgent,maxContestants);
[~,position]=min(y(index));
parent(i)=index(position(1));
end
newX=x*0;
newY=y*0;
%% 交叉(多点交叉)
for i=1:option.numAgent
newX(i,:)=x(parent(i),:);
if rand<option.p1_GA
tempR=rand(size(x(i,:)));
newX(i,tempR>0.5)=x(parent(i+option.numAgent),tempR>0.5);
end
end
%% 变异
for i=1:option.numAgent*option.p2_GA
index=randi(option.numAgent);
tempR=rand(size(x(i,:)));
temp=rand(size(option.lb)).*(option.ub-option.lb)+option.lb;
newX(index,tempR>0.5)=temp(tempR>0.5);
end
%% 重新计算适应度值
for i=1:option.numAgent
newX(i,:)=checkX(newX(i,:),option,data);
[newY(i),~,newX(i,:)]=option.fobj(newX(i,:),option,data);
if newY(i)<y_p(i)
y_p(i)=newY(i);
x_p(i,:)=newX(i,:);
if y_p(i)<y_g
y_g=y_p(i);
x_g=x_p(i,:);
end
end
end
x=newX;
%% 更新记录
recording.bestFit(1+iter)=y_g;
recording.meanFit(1+iter)=mean(y_p);
end
bestY=y_g;
bestX=x_g;
end
3 仿真结果
4 参考文献
[1]李吉功, 冯宜伟, 郭戈. 基于栅格地图的通用机器人避障算法[C]// 中国自动化学会第21届青年学术年会. 0.