1 简介

采用栅格法建立机器人工作环境模型,并用MATLAB语言随机产生栅格中障碍物的位置及数量,应用遗传算法完成机器人路径规划,对遗传算法的插入和删除操作进行了改进,提高了遗传算法的搜索速度,并采用序号编码的方法,减小编码长度,简化遗传算法程序,缩短程序执行时间。仿真结果表明了该方法的有效性及可行性。

2 部分代码

clc

clear

close all

global liantong_point num_point sign hang_shange lie_shange zhangai_point

load('data.mat')%导入相关数据

figure(1)%画障碍图

hold on

for i=1:hang_shange

    for j=1:lie_shange

        if sign(i,j)==1

            y=[i-1,i-1,i,i];

            x=[j-1,j,j,j-1];

            h=fill(x,y,'g');

        end

        text(j-0.8,i-0.5,num2str((i-1)*lie_shange+j))

    end

end

axis([0 lie_shange 0 hang_shange])%限制图的边界

set(gca,'YDir','reverse');

for i=1:hang_shange

    plot([0 lie_shange],[i-1 i-1],'k-');

end

for i=1:lie_shange

    plot([i i],[0 hang_shange],'k-');%画网格线

end

pop=[1,2,randperm(num_point-2)+2];

pop=deal_fun4(pop);

re=re_fun(pop);

disp(['转向次数:',num2str(re(1))])

disp(['重复点数:',num2str(re(2))])

disp(['路径长度:',num2str(num_point-length(zhangai_point)-1+re(2))])

for i=2:num_point-length(zhangai_point)

    lt_lin=liantong_point{pop(i-1)};

    if sum(ismember(lt_lin,pop(i)))==1

        Q1=[mod(pop(i-1)-1,lie_shange)+0.5,ceil(pop(i-1)/lie_shange)-0.5];

        Q2=[mod(pop(i)-1,lie_shange)+0.5,ceil(pop(i)/lie_shange)-0.5];

        plot([Q1(1),Q2(1)],[Q1(2),Q2(2)],'r-','LineWidth',2)

        jiantou_fun(Q1,Q2)

    else

        Q2=[mod(pop(i)-1,lie_shange)+0.5,ceil(pop(i)/lie_shange)-0.5];

        lt_lin1=liantong_point{pop(i)};

        p_lin=pop(i-1);

        while sum(ismember(lt_lin1,p_lin(end)))==0

            Q1=[mod(p_lin(end)-1,lie_shange)+0.5,ceil(p_lin(end)/lie_shange)-0.5];

            lt_lin2=liantong_point{p_lin(end)};

            angle_lin=[];

            for j=1:length(lt_lin2)

                Q3=[mod(lt_lin2(j)-1,lie_shange)+0.5,ceil(lt_lin2(j)/lie_shange)-0.5];

                a=Q2-Q1;b=Q3-Q1;

                angle_lin(j)=acos(dot(a,b)/norm(a)/norm(b));

            end

            [~,index1]=sort(angle_lin);

            if sum(ismember(p_lin,lt_lin2(index1(1))))==0

                p_lin=[p_lin lt_lin2(index1(1))];

            else

                p_lin=[p_lin lt_lin2(index1(2))];

            end

        end

        p_lin=[p_lin pop(i)];

        for j=2:length(p_lin)

            Q1=[mod(p_lin(j-1)-1,lie_shange)+0.5,ceil(p_lin(j-1)/lie_shange)-0.5];

            Q2=[mod(p_lin(j)-1,lie_shange)+0.5,ceil(p_lin(j)/lie_shange)-0.5];

            plot([Q1(1),Q2(1)],[Q1(2),Q2(2)],'r-','LineWidth',2)

            jiantou_fun(Q1,Q2)

        end

        for j=2:length(p_lin)-1

            x_lin=mod(p_lin(j)-1,lie_shange)+1;

            y_lin=ceil(p_lin(j)/lie_shange);

            y=[y_lin-1,y_lin-1,y_lin,y_lin];

            x=[x_lin-1,x_lin,x_lin,x_lin-1];

            h=fill(x,y,'y');

            set(h,'facealpha',0.5)

        end

    end

end

title('路径图','fontsize',12);

xlabel('X-position','fontsize',12)

ylabel('Y-position','fontsize',12)

​3 仿真结果

4 参考文献

[1]薛冰冰. (2012). 基于改进型遗传算法的足球机器人路径规划研究. (Doctoral dissertation, 长春工业大学).

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐