其他分享
首页 > 其他分享> > 全局规划——从零开始到A*(深蓝笔记)

全局规划——从零开始到A*(深蓝笔记)

作者:互联网

图搜索基础

图搜索基础

配置空间

  1. 机器人配置:指向机器人所有点的位置的大小
  2. 机器人自由度(DOF):最少真实坐标n需要的大概机器人配置
  3. 机器人配置空间:一个未知n大小包含所有机器人能配置的空间,表示为C-space
  4. 每个机器人都在C-space中变换成一个点

配置空间障碍物

膨胀障碍物大小,将机器人的大小膨胀到障碍物上,来实现将机器人在C-space中变换成一个点

image.png

实际空间和配置空间障碍物

图搜索方法

2021-12-22 16-29-41 的屏幕截图.png

图遍历

图有两种遍历方法:广度优先遍历(BFS)、深度优先遍历(DFS)

广度优先遍历使用的是队列,深度优先遍历使用的是栈(具体可以在数据结构中了解更详细的内容)

Heuristic Search(启发式搜索)

贪心优先搜索(Greedy Best First Search)

启发式搜索就是一种与目标位置距离远近检测的条件

行动成本(Cost on Actions)

在移动过程中,一个节点到另一个节点有一个成本“C”

Dijkstra and A*(迪杰斯特拉和 A星)

算法流程

Dijkstra’s Algorithm:

代价函数值最小的节点优先遍历

遍历如下路径:

1640166207_1_.jpg

一步步遍历过后如图:

B69F8AA7C75A70A5D29935316FC55BD8.jpg

比较关键的点是g(n)的值是叠加的,这样是为了能够当遇到障碍物较多的路径时,能够走出一条更优的路径

在地图的仿真中Dijkstra的效果如图

image.png

类似于同心圆的搜索

A*

所以只要时间足够长的情况下,使用Dijkstra就一定能够找出一条最优的路径来。耗时长也是Dijkstra的缺点,在添加了启发式函数之后效果如图

image.png

以上效果图都来自于PathFinding.js (qiao.github.io)网站。

可以明显看出,当添加了启发式函数之后,也就是贪心算法,搜索有了更明确的方向性。

Dijkstra的代价函数是到相邻节点的距离,而A*的代价函数则是在Dijkstra之上添加了启发式函数(Heuristic)

从开始状态到目标状态通过节点的最小估计成本f(n) = g(n) + h(n)

启发式函数h(n)常用的是曼哈顿距离、欧氏距离

代码流程:

--维护一个优先级队列来存储所有要扩展的节点(openlist、closelist)
--设置启发式函数h(n)
--初始化起点
--设置g(Xs) = 0,其他节点g(n) = 无穷大
  --循环
  --如果队列为空,返回false,break
  --从openlist里删除f(n) = g(n) + h(n)最小的节点"n"
  --把"n"加入closelist
  --如果"n"是目标节点,返回true,break
  --对于节点"n"不在closelist里的邻居"m"
  	--如果g(m)无限大
  	  --g(m) = g(n) + Cnm
  	  --将"m"推入队列
  	--如果g(m) > g(n) + Cnm
  	  g(m) = g(n) + Cnm
  --结束循环

标签:遍历,--,机器人,深蓝,笔记,Dijkstra,从零开始,搜索,节点
来源: https://blog.csdn.net/OutsiderMing/article/details/122093779