一、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算法流程

二、部分源代码

% Main entry:ObstList = [-25:25;15*ones(1,51)]';            % Obstacle point list
ObstList = [ObstList; [-10: 10; 0*ones(1,21)]'];
ObstList = [ObstList; [-25:-10; 5*ones(1,16)]'];
ObstList = [ObstList; [ 10: 25; 5*ones(1,16)]'];
ObstList = [ObstList; [ 10*ones(1,6);0:  5;]'];
ObstList = [ObstList; [-10*ones(1,6);0:  5;]'];
% Park lot line for collision check
ObstLine = [-25, 15 , 25, 15;-25,  5, -10,  5;-10,  5, -10,  0;-10,  0,  10,  0;10,  0,  10,  5;10,  5,  25,  5;-25,  5, -25, 15;25,  5,  25, 15];
% ObstList and ObstLine
ObstInfo.ObstList = ObstList;
ObstInfo.ObstLine = ObstLine;
% ObstInfo.ObstMap = GridAStar(ObstList,End,XY_GRID_RESOLUTION);Vehicle.WB = 3.7;         % [m] wheel base: rear to front steer
Vehicle.W  = 2.6;         % [m] width of vehicle
Vehicle.LF = 4.5;         % [m] distance from rear to vehicle front end of vehicle
Vehicle.LB = 1.0;         % [m] distance from rear to vehicle back end of vehicle
Vehicle.MAX_STEER = 0.6;  % [rad] maximum steering angle
Vehicle.MIN_CIRCLE = Vehicle.WB/tan(Vehicle.MAX_STEER); % [m] mininum steering circle radius% Motion resolution define
Configure.MOTION_RESOLUTION = 0.1;             % [m] path interporate resolution
Configure.N_STEER = 20.0;                      % number of steer command
Configure.EXTEND_AREA = 0;                     % [m] map extend length
Configure.XY_GRID_RESOLUTION = 2.0;            % [m]
Configure.YAW_GRID_RESOLUTION = deg2rad(15.0); % [rad]
% Grid bound
Configure.MINX = min(ObstList(:,1))-Configure.EXTEND_AREA;
Configure.MAXX = max(ObstList(:,1))+Configure.EXTEND_AREA;
Configure.MINY = min(ObstList(:,2))-Configure.EXTEND_AREA;
Configure.MAXY = max(ObstList(:,2))+Configure.EXTEND_AREA;
Configure.MINYAW = -pi-0.01;
Configure.MAXYAW = pi;
% Cost related define
Configure.SB_COST = 0;             % switch back penalty cost
Configure.BACK_COST = 1.5;         % backward penalty cost
Configure.STEER_CHANGE_COST = 1.5; % steer angle change penalty cost
Configure.STEER_COST = 1.5;        % steer angle change penalty cost
Configure.H_COST = 10;             % Heuristic costStartState = [22, 13, pi  ];
EndState =   [7,   2, pi/2];
[x,y,th,~,~] = HybridAStar(StartState,EndState,Vehicle,Configure,ObstInfo);
if isempty(x)disp('Failed to find path!')
elsehold on;VehicleAnimation(x,y,th,Configure,Vehicle,ObstInfo)
end
% path = FindRSPath(5,1,pi);function path = FindRSPath(x,y,phi,veh)rmin = veh.MIN_CIRCLE; %minimum turning radiusx = x/rmin;y = y/rmin;[isok1,path1] = CSC(x,y,phi);[isok2,path2] = CCC(x,y,phi);[isok3,path3] = CCCC(x,y,phi);[isok4,path4] = CCSC(x,y,phi);[isok5,path5] = CCSCC(x,y,phi);isoks = [isok1, isok2, isok3, isok4, isok5];paths = {path1, path2, path3, path4, path5};Lmin = inf;for i = 1:5if isoks(i) == trueelem = paths{i};if Lmin > elem.totalLengthLmin = elem.totalLength;path = elem;endendend
%     PlotPath(path,veh);
endfunction v = mod2pi(x)v = rem(x,2*pi);if v < -piv = v+2*pi;elseif v > piv = v-2*pi;end
endfunction [tau,omega] = tauOmega(u,v,xi,eta,phi)delta = mod2pi(u-v);A = sin(u)-sin(delta);B = cos(u)-cos(delta)-1;t1 = atan2(eta*A-xi*B,xi*A+eta*B);t2 = 2*(cos(delta)-2*cos(v)-2*cos(u))+3;if t2 < 0tau = mod2pi(t1+pi);elsetau = mod2pi(t1);endomega = mod2pi(tau-u+v-phi);
end% formula 8.1
function [isok,t,u,v] = LpSpLp(x,y,phi)[t,u] = cart2pol(x-sin(phi),y-1+cos(phi));if t >= 0v = mod2pi(phi-t);if v >= 0isok = true;returnendendisok = false;t = 0;u = 0;v = 0;
end% formula 8.2
function [isok,t,u,v] = LpSpRp(x,y,phi)[t1,u1] = cart2pol(x+sin(phi),y-1-cos(phi));if u1^2 >= 4u = sqrt(u1^2-4);theta = atan2(2,u);t = mod2pi(t1+theta);v = mod2pi(t-phi);if t >= 0 && v >= 0isok = true;returnendendisok = false;t = 0;u = 0;v = 0;
endfunction [isok,path] = CSC(x,y,phi)Lmin = inf;type = repmat('N',[1,5]);path = RSPath(type,0,0,0,0,0);[isok,t,u,v] = LpSpLp(x,y,phi);if isokL = abs(t)+abs(u)+abs(v);if Lmin > LLmin = L;path = RSPath(RSPath.Types(15,:),t,u,v,0,0);endend[isok,t,u,v] = LpSpLp(-x,y,-phi); % timeflipif isokL = abs(t)+abs(u)+abs(v);if Lmin > LLmin = L;path = RSPath(RSPath.Types(15,:),-t,-u,-v,0,0);endend[isok,t,u,v] = LpSpLp(x,-y,-phi); % reflectif isokL = abs(t)+abs(u)+abs(v);if Lmin > LLmin = L;path = RSPath(RSPath.Types(16,:),t,u,v,0,0);endend[isok,t,u,v] = LpSpLp(-x,-y,phi); % timeflp + reflectif isokL = abs(t)+abs(u)+abs(v);if Lmin > LLmin = L;path = RSPath(RSPath.Types(16,:),-t,-u,-v,0,0);endend[isok,t,u,v] = LpSpRp(x,y,phi);if isokL = abs(t)+abs(u)+abs(v);if Lmin > LLmin = L;path = RSPath(RSPath.Types(13,:),t,u,v,0,0);endend[isok,t,u,v] = LpSpRp(-x,y,-phi); % timeflipif isokL = abs(t)+abs(u)+abs(v);if Lmin > LLmin = L;path = RSPath(RSPath.Types(13,:),-t,-u,-v,0,0);endend

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]钱程,许映秋,谈英姿.A Star算法在RoboCup救援仿真中路径规划的应用[J].指挥与控制学报. 2017,3(03)

【路径规划】基于matlab HybridA_Star算法机器人路径规划【含Matlab源码 1390期】相关推荐

  1. 【Matlab路径规划】改进的遗传算法机器人避障路径规划【含GUI源码 703期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]改进的遗传算法机器人避障路径规划[含GUI源码 703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  2. 【MVO TSP】基于matlab灰狼算法求解旅行商问题【含Matlab源码 1327期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab灰狼算法求解旅行商问题[含Matlab源码 1327期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  3. 【BA TSP】基于matlab蜜蜂算法求解旅行商问题【含matlab源码 1248期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab蜜蜂算法求解旅行商问题[含matlab源码 1248期] 获取代码方式2: 付费专栏Matlab路径规划(初级版 ...

  4. 【IA TSP】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[旅行商问题]基于matlab免疫算法求解旅行商问题[含Matlab源码 195期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  5. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  6. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  7. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  8. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  9. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  10. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

最新文章

  1. 被陆奇看好的项目都好奇葩
  2. MySQL之一致性检测及数据同步
  3. 10进制与16进制之间的转换 delphi
  4. cdn收费方式有几种
  5. 物理光学10 相干光与相干性
  6. Oracle拆分字符串及排序,Oracle 字符串查询以及拆分函数
  7. Pytorch中图像预处理相关函数
  8. Mxnet的.lst文件介绍
  9. DotNetty 实现 Modbus TCP 系列 (一) 报文类
  10. 简述DNS进行域名解析的原理
  11. FastStone Capture 注册码 序列号
  12. 前端项目集成 stylelint
  13. 下载各种百度文库以及豆丁网文章的简便方法
  14. 如何调用WebService
  15. markdown数学公式编辑指令大全
  16. 解决IAR printf函数输出中文字符乱码问题
  17. 调色板的原理和调色板显示模式
  18. 微信公众平台开发[6] —— 微信开发集成类的使用
  19. Gameplay常用编写方法(持续更新)
  20. amd显卡用黑苹果输出黑屏_AMD锐龙Ryzen系列黑苹果教程

热门文章

  1. Carthage的安装和使用
  2. 003_如何正确的进入容器
  3. VS2010 安装包打包(转)
  4. ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现
  5. 拉里·佩奇 密歇根大学演讲
  6. (转)让页面自动滚动到刷新页面之前的控件处,减少页面刷新带来的不便。
  7. 简单神经网络和卷积神经网络识别手写数字
  8. python协程,asyncIO
  9. 181009词霸有道扇贝每日一句
  10. unity制作预制体,动态加载预制体,实用资源的导出