0
点赞
收藏
分享

微信扫一扫

【机器人栅格地图】基于帝国企鹅、粒子群、遗传算法求解机器人栅格地图路径规划及避障问题附matlab代码

小迁不秃头 2022-04-15 阅读 76
matlab

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.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

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

举报

相关推荐

0 条评论