网站首页 > 技术教程 正文
A星算法是游戏中常用的最短路规划算法,在室内机器人导航路径的规划也有着非常优秀的表现,其实现原理如下:
- 首先我们要有一张简化的地图(二维数组),障碍物为1,自由空间为0,有在地图中源点和目标点的坐标;
- 第二步,我们要理解几个概念:
2.1 Open 列表,用来记录所有需要被用来寻找最短路径的点
2.2 Close列表,用来记录经过算法评估不会再用来评估路径的点
2.3 针对每一个点我们需要计算他的两个值:G和H。G代表从源点到达当前点的移动量,通常我们从它的前继(上一个点)获取,然后加1。H代表从当前点到终点的移动量估算值,估算值离真实值越接近,最终的路径会更加精确。如果估算值停止作用,很可能生成出来的路径不会是最短的(但是它可能是接近的)。H的计算方法决定了算法的聪明程度及收敛的快慢。通常我们使用曼哈顿距离 (计算出从当前点经过的剩下的水平和垂直的点数量,略去了障碍物或者不同陆地类型的数量。)或者欧几里得距离来作为估算函数。最终F=G+H来代表当前点的综合评估值。 - 第三步,算法的具体计算伪代码:
将源点添加到Open列表中;
while(Open列表不为空) {
查找Open列表中F值最小的点,将该点移动到Close列表中,我们把这个点称作当前评估点;(第一次肯定是源点放入Close列表中);
找到与当前评估点相邻的每一个可通行的点P(地图值为0);
如果P在Closed列表中:不管它;
如果P不在Open列表中:添加它到Open列表中,然后计算出它的综合评估值,并且把当前评估点作为该点的父节点;
如果P已经在Open列表中:当我们使用当前生成的路径到达那里时,检查F 和值是否更小。如果是,更新它的和值和它的前继;
如果P是终点,则退出循环(break),按照P的父节点逆向搜索即可得到最终的路径;
}
在实际的机器人导航中,地图并不是简单的0或1,那我们只需要改变我们计算G和H的方式,将地图的代价值或者地形的影响因素都考虑进去而不是简单的点与点之间的距离就可以得到理想的路径。
最后,A星和Dijkstra都是寻找最短路径的算法,我总结的两者区别是:
- Dijkstra算法计算源点到其他所有点的最短路径长度,A*关注点到点的最短路径。
- Dijkstra算法建立在较为抽象的图论层面,实质是广度优先搜索,是一种发散式的搜索,其空间复杂度和时间复杂度都比较高。而A*算法不但记录其到源点的代价,还计算当前点到目标点的期望代价,是一种启发式算法,也可以认为是一种深度优先的算法,并且是一种快速的朝着目标深度遍历的搜索算法。
- Dijkstra可以认为是A星算法的特例,是启发度为0的搜索。
猜你喜欢
- 2024-10-25 AMEYA360报道:智能扫地机器人 SLAM技术与A算法
- 2024-10-25 基于LFOA算法的相关向量机核参数优化
- 2024-10-25 定积分的换元法与分部积分法 定积分的换元和分部
- 2024-10-25 Apriori算法是什么?适用于什么情境?
- 2024-10-25 用Python写一个A*搜索算法含注释说明
- 2024-10-25 浅谈什么是分治算法 浅谈什么是分治算法是什么
- 2024-10-25 技术分享 | Prometheus避障—A_star算法代码阅读
- 2024-10-25 浅析机器人学位置与姿态之坐标系绕任意轴线旋转算法
- 2024-10-25 一文简介常见的机器学习算法 常见机器学习算法
- 2024-10-25 欧几里得算法 最大公约数欧几里得算法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)