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

图搜索基础

  • 图搜索基础
  • 迪杰斯特拉和A星(Dijkstra and A*)
  • 点跳转搜索(Jump Point Search)

图搜索基础

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

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

image.png

实际空间和配置空间障碍物
  • 实际空间中机器人有形状和大小
  • 配置空间C-space中机器人是一个点,在运动规划前障碍物就已经在C-space中生成
  • 在C-space中模拟障碍物可能比实际障碍物更复杂,这样就可以在实践中使用

图搜索方法

  • 首先要创建一棵图搜索树
  • 在通过结点之间的关系,来找到目的结点

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

图遍历

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

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

Heuristic Search(启发式搜索)

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

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

行动成本(Cost on Actions)

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

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

Dijkstra

Dijkstra’s Algorithm:

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

遍历如下路径:

1640166207_1_.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
  --结束循环

这样一遍可以得到蓝色的搜索路径,可以从终点反向再进行一次对openlist的A*搜索,这样就可以得到黄色的优化后的路径

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Atom明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值