一、获取代码方式

获取代码方式1:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

获取代码方式2:
通过紫极神光博客主页开通CSDN会员,凭支付凭证,私信博主,可获得此代码。

获取代码方式3:
完整代码已上传我的资源:【路径规划】基于matlab A_star算法机器人栅格地图路径规划【含Matlab源码 116期】

备注:开通CSDN会员,仅只能免费获得1份代码(有效期为开通日起,三天内有效);
订阅紫极神光博客付费专栏,可免费获得2份代码(有效期为订阅日起,三天内有效);

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

三、部分源代码

%% A* democlc;
clear;
% pause(3);
%% init
n=30;
starNum=1;
% starNum = randi(n*n,[1,1]);
goalNum=172;
goalNum = randi(n*n,[1,1]);
banper=0.25;
%% map init
figure('name','A*','NumberTitle','off','MenuBar','none');
global point
for ii=1:n*npoint(ii).num = ii;point(ii).father=[];point(ii).Gcost=[];point(ii).Hcost=[];
end
%% banper
banList=[randi(n*n,[1,floor(banper*n*n)])];
load banList
banList(find(banList==goalNum))=[];
for jj = 1:length(banList)if banList(jj)~=goalNum || banList(jj)~=starNumpoint(banList(jj)).Gcost = Inf;end
end
point(starNum).Gcost=0;
point(starNum).father = point(starNum).num;
point(starNum).Hcost=getHcost(point(starNum),point(goalNum),n);%% A*core
openList = [];
closeList = [];
closeListNum=[];
openListNum=[];
openList = [openList,point(starNum)];
while length(openList)% opneListcostList = getCost(openList,point(goalNum),n);currentPoint = openList(find(costList==min(costList),1));openList(find(min(costList)==costList,1))=[];closeList = [closeList,currentPoint];neighbourNum = getNeighbour(currentPoint,n);closeListNum = cat(1,closeList.num);openListNum = cat(1,openList.num);for ii = 1:length(neighbourNum)if neighbourNum(ii)==point(goalNum).numpoint(neighbourNum(ii)).father = currentPoint.num;point(goalNum).father = currentPoint.num;disp('ok')routPlot(goalNum,n);return;endlog1=0;trytmp=point(neighbourNum(ii)).Gcost;if tmp ==inflog1 = 1;endcatchlog1=0;endif log1 || ismember(neighbourNum(ii),closeListNum)continue;elseif (ismember(neighbourNum(ii),openListNum))oldGcost = getGcost(point(neighbourNum(ii)),n);father = point(neighbourNum(ii)).father;point(neighbourNum(ii)).father = currentPoint.num;newGcost = getGcost(point(neighbourNum(ii)),n);if newGcost>oldGcostpoint(neighbourNum(ii)).father = father;elsepoint(neighbourNum(ii)).Gcost = newGcost;endcontinue;elseif ~ismember(neighbourNum(ii),closeListNum)point(neighbourNum(ii)).father = currentPoint.num;point(neighbourNum(ii)).Gcost = getGcost(point(neighbourNum(ii)),n);point(neighbourNum(ii)).Hcost = getHcost(point(neighbourNum(ii)),point(goalNum),n);openList = [openList,point(neighbourNum(ii))];endendcloseListNum = cat(1,closeList.num);openListNum = cat(1,openList.num);pause(0.1);mydrawnow(starNum,goalNum,banList,closeListNum,openListNum,n);
end## 四、运行结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021011309440483.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RJUUNtYXRsYWI=,size_16,color_FFFFFF,t_70)
## 五、matlab版本及参考文献
**1 matlab版本**
2014a**2 参考文献**
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]钱程,许映秋,谈英姿.A Star算法在RoboCup救援仿真中路径规划的应用[J].指挥与控制学报. 2017,3(03)

【路径规划】基于matlab A_star算法机器人栅格地图路径规划【含Matlab源码 116期】相关推荐

  1. 【Matlab路径规划】A_star算法机器人栅格地图路径规划【含源码 116期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]A_star算法机器人栅格地图路径规划[含源码 116期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  2. 【A_star三维路径规划】基于matlab A_star算法机器人栅格地图三维路径规划【含Matlab源码 190期】

    一.A_star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息.启发信息经过文字提炼和公式化后转变为启发函数.启发函数可以表示自起始顶点至目标顶 ...

  3. 【路径规划】基于matlab灰狼算法机器人栅格地图最短路径规划【含Matlab源码 2334期】

    ⛄一.灰狼算法的厂房巡检机器人路径规划简介 0 引言 近年来,我国各行各业的不断发展使相关工作流程得到了完善,其中巡检岗位是一个不可或缺的职位,尤其是在电厂.燃气厂房和煤矿等危险领域中的工作,更不能缺 ...

  4. 【路径规划】基于matlab灰狼算法机器人栅格地图最短路径规划【含Matlab源码 1761期】

    ⛄一.灰狼算法的厂房巡检机器人路径规划简介 0 引言 近年来,我国各行各业的不断发展使相关工作流程得到了完善,其中巡检岗位是一个不可或缺的职位,尤其是在电厂.燃气厂房和煤矿等危险领域中的工作,更不能缺 ...

  5. 【路径规划】基于matlab A_star算法机器人动态避障【含Matlab源码 2571期】

    ⛄一.A_star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息.启发信息经过文字提炼和公式化后转变为启发函数.启发函数可以表示自起始顶点至目标 ...

  6. 【路径规划】基于matlab Theta_star算法机器人栅格地图最短路径规划【含Matlab源码 2618期】

    ⛄一. Theta_star算法简介 ​Lazy_Theta_star是在 Theta_star上的进一步改进,Theta_star是当节点加入open表时和当前点的父节点进行比较g值是否更小,对一些 ...

  7. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  8. 【Matlab车牌识别】停车计费系统【含GUI源码 735期】

    一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

  9. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  10. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

最新文章

  1. java四种xml_Java中四种XML解析技术
  2. 阿里云配置服务器报:bind: cannot assign requested address
  3. 网络资源(4) - extJS视频
  4. python中self_一个例子带你入门Python装饰器
  5. python的工资为什么这么低-Python为什么这么火 Python岗位薪资水平如何
  6. Cannot load 32-bit SWT libraries on 64-bit JVM
  7. java继承与实现的_[Java学习] Java继承的概念与实现
  8. Grunt教程——安装Grunt
  9. LINUX Find命令使用
  10. PHP array_merge_recursive()函数与示例
  11. 大华工业相机使用说明_大华C900系列SSD | 极速传输,不负美名
  12. 【C++】图书管理系统(含全部源代码)
  13. 【Android 10 源码】深入理解 MediaCodec configure
  14. python qq协议_利用webqq协议使用python登录qq发消息 | 学步园
  15. 《人工智能》机器学习 - 第1章 机器学习简介
  16. Debian11更换阿里源
  17. Project免费视频教程来了
  18. html页面缩小图片缩小,如何缩小html页面中的图片大小?
  19. 我们是选择开源CRM,还是选择商业CRM?
  20. 网络波动造成服务器文件系統损坏,和平精英网络波动异常 与服务器失去连接解决方法...

热门文章

  1. 【万里征程——Windows App开发】如何使用粘贴板
  2. [转载] Ajax中使用Response.Write输出javascript脚本出错的解决办法
  3. animate auto
  4. 保存/读取图片到数据库
  5. Atitit 基于文件的数据库保存系统json文档数据库 目录 1.1. 一行数据一个文件,一个文件夹微数据表表 1 1.2. 保存C:\wamp\www\tisye\tisye.php 1 1.3
  6. Atitit 艾提拉音频资源列表与统计 t6 六月份战果与7月份规划.docx 目录 1. 第一层次 原始资源类 采集资源类 1 1.1. K歌类采集资源 整理 1 1.2. K歌类资源初步分类
  7. Atitti.软件的一些理论补充 Atitti.软件的原理原则定律法则补充 目录 1.1. 分布式领域CAP理论, 1 1.2. 关系数据库的ACID模型拥有 高一致性 + 可用性 很难进行分区:
  8. atitit.人脸识别的应用场景and使用最佳实践 java .net php
  9. PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束
  10. paip.提升性能---协程“微线程”的使用.