基于A*算法自动引导车的路径规划(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

动汽车动力系统复杂、行驶工况多变,能耗管理是其研究领域的基础任务和挑战,如果在确定能耗管理策略之前就确定与之相匹配的电动汽车的路径规划,则将降低实时需求和算法维数灾难。同时,路径规划也是确保智能车辆安全快速到达目的地的基础。针对这一挑战,作者提出了一种以二叉树为辅助数据结构的考虑电动汽车能耗为权重与启发函数量纲的BTEco-A*算法。首先,针对电动汽车构建了能耗模型,以便进行路径规划时提供科学的能耗计算;其次,在传统A*算法基础上加入二叉树数据结构,优化算法的效率;最后,考虑以电动汽车的能耗作为A*算法的路径权重与估价函数值,从而实现节能的路径规划。仿真结果表明,优化后的路径规划算法是可行且有效的。为了解决A*算法在全局路径规划中扩展节点过多导致搜索时间长、转弯过多导致路径不平滑的问题,提出了一种A*算法。首先,对估价函数进行改进,估价函数中包含实际代价和估计代价,在估计代价前乘以一个估计代价影响系数。其次,在扩展节点的过程中对于目标节点所在方位的相邻节点进行优先扩展。最后,节点的实际代价和估计代价的计算中加入转弯代价。通过仿真平台的验证,证明了本文的改进A*算法能够有效减少路径搜索时扩展节点的数量以及搜索路径结果的转弯次数,能够有效的提高寻路的计算效率和AGV的执行任务的效率。

📚2 运行结果

部分代码:

clear;
%clc;
close all;

%画出地图背景网格线和目标点、起始点
%PlotGrid(map);

obstacle = [0,30,8,5; 0,50,8,5; 
            10,0,5,18; %S6
            30,50,20,5; 45,55,5,20; 
            20,70,5,20; %S10
            75,30,17,5;90,0,5,20;  %S3
            65,80,5,20; %S5
            63,0,5,17;  
            37,10,5,20; 25,30,17,5; 50,30,13,5;  %S7\S2
            70,50,20,5; 78,55,5,20;   %右上T型
];
workstation = [40 62; 50 25; 85 25; 87 62; 60 90;
               18 10; 30 25; 5 62;  72 62; 27 80;
];
label = [40 60; 50 28; 87 25; 87 65; 60 90;
         18 10; 30 25; 5 65;  72 62; 29 80;
];


% obstacle = [15,20,20,3; 15,23,3,15; 32,23,3,15;];
hold on;
%axis off
%画出障碍区域
for i = 1 : length(obstacle(:,1))
    rectangle('Position',obstacle(i,:),'FaceColor','black');
end
displayStation(label);
%%
axis off
map.XYMAX=100; %%代表我们要画一个地图的长和宽
axis([0,map.XYMAX,0,map.XYMAX]);

map.start = [1,98];  
map.goal=workstation(2,:);  
 %pathD2 = AStar(obstacle,map); %A*算法得到路径
%path = smooth(path);
load pathD2 pathD2
p1 = plot(pathD2(:, 1), pathD2(:, 2),'k');

map.start = workstation(2,:);  
map.goal=workstation(3,:);  
%path23 = AStar(obstacle,map); %A*算法得到路径
load path23 path23
% plot(path23(:, 1), path23(:, 2),'k');

map.start = workstation(3,:);  
map.goal=workstation(4,:);  
%path34 = AStar(obstacle,map); %A*算法得到路径
%path = smooth(path);
%save path34 path34
load path34 path34 
% plot(path34(:, 1), path34(:, 2),'k');

map.start = workstation(4,:);  
map.goal=workstation(9,:);  
%path49 = AStar(obstacle,map); %A*算法得到路径
%save path49 path49
load path49 path49
%path = smooth(path);
% plot(path49(:, 1), path49(:, 2),'k');

map.start = workstation(9,:);
map.goal=[1,98];  
%path9D = AStar(obstacle,map); %A*算法得到路径
%save path9D path9D
load path9D path9D
%path = smooth(path);
% plot(path9D(:, 1), path9D(:, 2),'k');

%2号AGV
map.start = [1,98];  
map.goal=workstation(5,:);   
%  pathD5 = AStar(obstacle,map); %A*算法得到路径
%  save pathD5 pathD5
load pathD5 pathD5
%path = smooth(path);
p2 = plot(pathD5(:, 1), pathD5(:, 2),'k--');

map.start = workstation(5,:);  
map.goal=workstation(1,:);  
%path51 = AStar(obstacle,map); %A*算法得到路径
%save path51 path51
load path51 path51
%path = smooth(path);
% plot(path51(:, 1), path51(:, 2),'k--');

map.start = workstation(1,:);  
map.goal=[1,98];   
%  path1D = AStar(obstacle,map); %A*算法得到路径
%  save path1D path1D
load path1D path1D
%path = smooth(path);
%  plot(path1D(:, 1), path1D(:, 2),'k--');

%3号AGV
map.start = [1,98];  
map.goal=workstation(7,:);   
%   pathD7 = AStar(obstacle,map); %A*算法得到路径
%   save pathD7 pathD7
load pathD7 pathD7
%path = smooth(path);
% plot(pathD7(:, 1), pathD7(:, 2),'k:');

map.start = workstation(7,:);  
map.goal=workstation(6,:);  
% path76 = AStar(obstacle,map); %A*算法得到路径
% save path76 path76
load path76 path76
%path = smooth(path);
% plot(path76(:, 1), path76(:, 2),'k:');

map.start = workstation(6,:);  
map.goal=[1,98];   
%  path6D = AStar(obstacle,map); %A*算法得到路径
%  save path6D path6D
load path6D path6D
%path = smooth(path);
p3 = plot(path6D(:, 1), path6D(:, 2),'k:');

%4号AGV
map.start = [1,98];  
map.goal=workstation(10,:);   
%   pathD10 = AStar(obstacle,map); %A*算法得到路径
pathD10 = path1D(1:40, :);
  save pathD10 pathD10
load pathD10 pathD10
%path = smooth(path);
%  plot(pathD10(:, 1), pathD10(:, 2),'k-.');

map.start = workstation(10,:);  
map.goal=workstation(8,:);  
%  path108 = AStar(obstacle,map); %A*算法得到路径
%  save path108 path108
load path108 path108
%path = smooth(path);
% plot(path108(:, 1), path108(:, 2),'k-.');

map.start = workstation(8,:);  
map.goal=[1,98];   
%  path8D = AStar(obstacle,map); %A*算法得到路径
%  save path8D path8D
load path8D path8D
%path = smooth(path);
% p4 = plot(path8D(:, 1), path8D(:, 2),'k-.');
% legend
%  legend([p1, p2, p3, p4],{'AGV1','AGV2','AGV3','AGV4'},'Location','northeast','FontSize',8);
 axis off
 
 route1 = [flip(pathD2);flip(path23); flip(path34); flip(path49); flip(path9D)];
p1 =  plot(route1(:,1), route1(:,2),'k');
  route2 = [flip(pathD5);flip(path51); flip(path1D)];
p2 =  plot(route2(:,1), route2(:,2),'g--');
 route3 = [flip(pathD7);flip(path76); flip(path6D)];
p3 =  plot(route3(:,1), route3(:,2),'r:');
route4 = [flip(pathD10);flip(path108);];
  %route4 = [flip(pathD10);flip(path108); flip(path8D)];
p4 =  plot(route4(:,1), route4(:,2),'c-.');
legend([p1, p2, p3, p4],{'AGV1','AGV2','AGV3','AGV4'},'Location','northeast','FontSize',8);

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]张宇航,陈志军,吴超仲等. 基于改进A~*算法的电动汽车节能路径规划[C]//中国智能交通协会.第十七届中国智能交通年会科技论文集.机械工业出版社(CHINA MACHINE PRESS),2022:64-65.DOI:10.26914/c.cnkihy.2022.053514.

🌈4 Matlab代码实现

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值