【路径规划】基于matlab A_star算法多机器人仓储巡逻路径规划【含Matlab源码 2125期】

举报
海神之光 发表于 2022/09/25 06:05:00 2022/09/25
【摘要】 一、A_star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息.启发信息经过文字提炼和公式化后转变为启发函数.启发函数可以表示自起始顶点至目标顶点...

一、A_star算法简介

1 A Star算法及其应用现状
进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息.启发信息经过文字提炼和公式化后转变为启发函数.启发函数可以表示自起始顶点至目标顶点间的估算距离, 也可以表示自起始顶点至目标顶点间的估算时间等.描述不同的情境、解决不同的问题所采用的启发函数各不相同.我们默认将启发函数命名为H (n) .以启发函数为策略支持的搜索方式我们称之为启发型搜索算法.在救援机器人的路径规划中, A Star算法能结合搜索任务中的环境情况, 缩小搜索范围, 提高搜索效率, 使搜索过程更具方向性、智能性, 所以A Star算法能较好地应用于机器人路径规划相关领域.

2 A Star算法流程
承接2.1节, A Star算法的启发函数是用来估算起始点到目标点的距离, 从而缩小搜索范围, 提高搜索效率.A Star算法的数学公式为:F (n) =G (n) +H (n) , 其中F (n) 是从起始点经由节点n到目标点的估计函数, G (n) 表示从起点移动到方格n的实际移动代价, H (n) 表示从方格n移动到目标点的估算移动代价.

如图2所示, 将要搜寻的区域划分成了正方形的格子, 每个格子的状态分为可通过(walkable) 和不可通过 (unwalkable) .取每个可通过方块的代价值为1, 且可以沿对角移动 (估值不考虑对角移动) .其搜索路径流程如下:
在这里插入图片描述
图2 A Star算法路径规划
Step1:定义名为open和closed的两个列表;open列表用于存放所有被考虑来寻找路径的方块, closed列表用于存放不会再考虑的方块;
Step2:A为起点, B为目标点, 从起点A开始, 并将起点A放入open列表中, closed列表初始化为空;
Step3:查看与A相邻的方格n (n称为A的子点, A称为n的父点) , 可通过的方格加入到open列表中, 计算它们的F, G和H值.将A从open移除加入到closed列表中;
Step4:判断open列表是否为空, 如果是, 表示搜索失败, 如果不是, 执行下一步骤;
Step5:将n从open列表移除加入到closed列表中, 判断n是否为目标顶点B, 如果是, 表示搜索成功, 算法运行结束;
Step6:如果不是, 则扩展搜索n的子顶点:
a.如果子顶点是不可通过或在close列表中, 忽略它.
b.子顶点如果不在open列表中, 则加入open列表, 并且把当前方格设置为它的父亲, 记录该方格的F, G和H值.
Step7:跳转到步骤Step4;
Step8:循环结束, 保存路径.从终点开始, 每个方格沿着父节点移动直至起点, 即是最优路径.A Star算法流程图如图3所示.
在这里插入图片描述
图3 A Star算法流程

二、部分源代码

clear;
clc;

xlength=61;
ylength=29;
robotNum=10;
podNum=800;
depotNum = 8;
taskNum = robotNum;

xy2rc=@(x,y)[ylength+1-y;x];
rc2xy=@(r,c)[c;ylength+1-r];

sz=get(0,‘screensize’);
sz(1,2) = 80;
sz(1,4) = 950;
h=figure(‘outerposition’,sz);
assignin(‘base’,‘h’,h); %in case of any callback errors.
hold on;
grid on;
set(gca,‘xtick’,0:1:xlength);
set(gca,‘ytick’,0:1:ylength);
axis equal;
axis([0 xlength+1 0 ylength+1]);
axis manual;

% stores current states
globalTime = 1;
AllRobotState = zeros(robotNum,3);
AllPodState = zeros(podNum,3);

MapOccupancy = zeros(ylength,xlength);
RobotOccupancy = zeros(ylength,xlength);

[RobotStates,PodStates,DepotStates,StorageOccupancy]=initialize(xlength,ylength,robotNum,podNum,depotNum);
PodOccupancy = StorageOccupancy;

MapOccupancy = MapOccupancy+PodOccupancy;

%generate random tasks
TaskCell=cell(taskNum,1);
for i=1:taskNum
task=Task;
task.PodID=randi([1 podNum]);
task.StationID=randi([1 depotNum]);
task.ProcessTime=randi([5 20]);
task.ReturnState = zeros(1,3);
TaskCell{i,1}=task;
end

save(‘taskSet.mat’,‘TaskCell’);
load(‘taskSet.mat’);

%% Task Allocation

%% path planning problem
StartXYA = RobotStates;
GoalXYA = zeros(robotNum,3);
StartRCA = zeros(robotNum,3);
GoalRCA = zeros(robotNum,3);

temp= randperm(podNum);
for i=1:robotNum
StartRCA(i,1:2) = xy2rc(StartXYA(i,1),StartXYA(i,2));
StartRCA(i,3) = StartXYA(i,3);
GoalXYA(i,1:2) = PodStates(temp(i),1:2);
GoalRCA(i,1:2) = xy2rc(GoalXYA(i,1),GoalXYA(i,2));
GoalRCA(i,3) = randi([1 4]);
end
tic;
AllPathCell=MRPP_CBS(MapOccupancy,StartRCA,GoalRCA,0);
toc;
save(‘allPath.mat’,‘AllPathCell’,‘StartRCA’,‘GoalRCA’);

load(‘allPath.mat’);
futureSize=3;
HeatMap=cell(futureSize,1);
for i=1:futureSize
HeatMap{i,1}=zeros(robotNum,3);
end
%% plot results
video = VideoWriter(‘simulation’);
video.FrameRate=2;
open(video);
for loop=1:100
frame = getframe;
writeVideo(video,frame);
pause(0.5);
cla;

for i=1:robotNum
    if  ~isempty(AllPathCell{i,1})
        path = AllPathCell{i,1};
        if globalTime<=size(path,1)
            state = path(globalTime,:);
            AllRobotState(i,1:2)=rc2xy(state(1,1),state(1,2));
            AllRobotState(i,3)=state(1,3);
        end
        
        for j=1:futureSize
            if globalTime+j<=size(path,1)
                state = path(globalTime+j,:);
                temp = HeatMap{j,1};
                temp(i,1:2)=rc2xy(state(1,1),state(1,2));
                temp(i,3)=state(1,3);
                HeatMap{j,1} = temp;
            else
                state = path(end,:);
                temp = HeatMap{j,1};
                temp(i,1:2)=rc2xy(state(1,1),state(1,2));
                temp(i,3)=state(1,3);
                HeatMap{j,1} = temp;
            end
        end                       
    end
end
AllPodState=PodStates;
plotAll(AllRobotState,AllPodState,DepotStates);
globalTime = globalTime + 1;
loop=loop+1;

end

close(video);

三、运行结果

在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]钱程,许映秋,谈英姿.A Star算法在RoboCup救援仿真中路径规划的应用[J].指挥与控制学报. 2017,3(03)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/126922636

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。