1.1 图搜索基础

配置空间

  • 机器人配置:机器人上所有点的位置描述
  • DOF自由度:表示机器人配置所需的最小实值坐标数 n,如无人机轨迹规划,在微分平坦状态,初始空间进行规划,需要x,y,z和偏航角四个变量,自由度为四。
  • 机器人配置空间:包含所有可能的机器人配置的n维空间,表示为 C-space。
  • 机器人任何可能的位姿,在C-space中都表示为一个点。

配置空间中障碍物表示

在工作空间中规划

一般不在工作空间中进行规划主要是由以下几个问题:
问题1:机器人有不同的形状和大小
问题2:碰撞检测需要了解机器人的几何形状,既耗时又困难
在这里插入图片描述

在配置空间中规划

特点1:机器人由C-space中的点表示,例如位置( R 3 R^3 R3中的点),姿态( s o ( 3 ) so(3) so(3)中的点)等
特点2: 障碍物需要在配置空间中表示,即将障碍物按照机器人的体积进行膨胀,使得机器人简化后的质点落在膨胀后的障碍物外面。膨胀后的障碍物空间称为配置空间障碍物或C-obstacle
特点3:C-space = C-obstacle ⋃ \bigcup C-free
特点4:路径规划是在C-free内找到起点q起点和目标点q目标之间的路径
  在配置空间中进行规划时,需要先对障碍物进行膨胀处理来避免碰撞,由于机器人在配置空间中被看成是一个质点,所以规划更为简单。
在这里插入图片描述

图概念

图由节点和边组成,边可以有方向,也可以有权重。
在这里插入图片描述

搜索算法

算法原理

  • 状态空间图:搜索算法的数学表示
    • 对于每个搜索问题,都有一个相应的状态空间图
    • 图中节点之间的连通性由(有向或无向)边表示

在这里插入图片描述

  • 图搜索步骤:从开始状态S开始
    • 搜索图生成搜索树
    • 回溯搜索树中的节点,可以得到从起始状态到该节点的路径
    • 对于许多情况,构建整个树代价很大或效率低下,如何尽可能快地求得最优路径才是需要考虑问题。

在这里插入图片描述

图搜索算法总体框架

  • 维护一个容器以存储要访问的所有节点
  • 容器初始化为开始状态S
  • 循环
    • 根据一些预定义的评价函数从容器中删除节点(访问一个节点)
    • 扩展:获取节点的所有邻居(发现所有存在的邻居节点)
    • 把邻居节点塞回容器
  • 循环结束

问题:

  1. 什么时候结束循环?
    当容器为空的时候
  2. 如果图是回环的怎么办
    添加一个新的容器,记录从容器中删除(弹出/访问)的节点,使得一个节点从容器中删除时,它不被再次添加回容器。
  3. 通过什么方式删除正确的节点,可以尽快达到目标状态,从而减少节点的扩展。(我们要实现的算法)

两种遍历图的算法(DFS、BFS)

  • 广度优先搜索Breadth First Search(BFS):
    • 先入先出,容器:队列
  • 深度优先搜索Depth First Search(DFS):
    • 先入后出,容器:栈
      在这里插入图片描述

深度优先搜索DFS

策略:移除/弹出容器中最深的节点
在这里插入图片描述

简要说明:先将S节点塞入容器,弹出S节点后,按照p、e、d的先后顺序将三个节点塞入容器,之后先弹出子节点d,再按照c,e,b的顺序将d的三个子节点依次塞入容器,先弹出b再塞入b的子节点a,弹出a后,a没有子节点,返回弹出d的另外一个子节点c,如此往复。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

如图为栅格地图DFS搜索,先逆时针塞入邻居节点1,2,3,4,弹出最后塞入的节点4,再逆时针塞入邻居节点5,6,7,弹出节点7后再顺时针弹出另据节点8,9,如此往复进行搜索。

广度优先搜索BFS

策略:移除/扩展容器中最浅的节点
在这里插入图片描述
简要说明:先将S节点塞入容器,弹出S节点后,按照p、e、d的先后顺序将三个节点塞入容器,之后先弹出子节点p,再塞入p的子节点q,并弹出节点e,弹出e后,按照r,h的顺序塞入e的子节点,再弹出节点d,塞入d的子节点e,c,b。此时树的第二层全部弹出,且第三层节点按照q,r,h,e,c,b的顺序全部塞入容器,之后再次按先后顺序弹出节点,逐层进行搜索。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

如图为栅格地图BFS搜索,先逆时针塞入邻居节点1,2,3,4,弹出最开始塞入的节点1,再逆时针塞入邻居节点5,6,7,此时再弹出最开始塞入的第二个节点2,再逆时针塞入邻居节点8,9,之后弹出节点3,塞入节点10,11,逐步向外探索。

BFS和DFS对比

在这里插入图片描述
原因:DFS在树中一个节点走到头,可能先找到一条路径可以走到终点,但可能搜索的层级很深,不一定是最短路径,而BFS向逐层搜索,先找到的路径一定是最短路径。由此可见在路径搜索中最好采用BFS。

启发式算法(贪心算法)

BFS和DFS根据“先入”或“后入”选择下一个节点。
贪心算法根据某种规则选择“节点”,这种规则称为启发式算法。

  • 定义:启发式算法猜测你离目标有多近。
  • 要求:
    • 启发式引导你朝着正确的方向前进
    • 启发式应该易于计算

在这里插入图片描述
如图所示是两种路径搜索中常见的启发式函数:欧氏距离( x 2 + y 2 \sqrt{x^2+y^2} x2+y2 )和曼哈顿距离( x + y x+y x+y
在这里插入图片描述
如图所示,贪心算法减少了探索的节点,且获得了最短路径。
在这里插入图片描述
如果有很多障碍物的话,贪心算法可能会陷入局部最优,搜索出的路径并不是最短路径。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值