草庐IT

基于图的路径搜索技术基础知识

weihao-ysgs 2023-03-28 原文

基于搜索的路径规划

1.0 图搜索基础

1.1 Configuration Space(配置空间)

  • Robot configuration
    机器人配置,简单来说就是将机器人在空间中用一个点来描述,忽略了其外观信息,例如形状不管是圆形还是方形,都均会抽象成一个点进行表示。
  • Robot degree of freedom (DOF)
    在进行轨迹规划的时候是要考虑机器人的一个实际的运动模型的,不同的运动模型需要的输入和输出变量是不同的,即对应的控制变量的维度是不同的,尽可能的使用一个较小的自由度去表示机器人在配置空间中的位姿。
  • Robot configuration space
    一个 \(n\) 维的空间,包含着机器人的所有可能位置,称为 C-Space
  • 简单来说,每个机器人的位姿在 C-space 中就是一个点而已。

1.2 C-space Obstacle

  • Planning in workspace
    首选解释一下什么事工作空间即什么是 workspace,简单来说其实就是机器人真实的一个工作空间,就是我们所处的物理世界。如果在物理世界中进行机器人的一个路径规划,其实是一个比较麻烦的事情,有如下两个原因:
    • 每个机器人拥有不同的形状和大小(different shape and size)
    • 碰撞检测需要指导机器人的几何信息
      这样进行规划是非常耗时和困难的,因此引入 C-space 这一概念
  • Planning in C-space
    • C-space 中,机器人被抽象为了一个 C-space 中的一个点,例如三维空间中机器人可以由 position(a point in \(R^3\)),pose (a point in \(SO(3)\))
    • 至于真实世界中感知到的障碍物信息则需要提前展示部署到 C-space 中去,是一个在规划前要完成的工作,我们称这些障碍物为 C-space 中的障碍物,或者称为 C-obstacle
    • \(C_{space} = (C_{obstacle})\ U\ (C_{free})\)
    • 而我们通常所说的路径规划此时就可以说成是在 C-free 中找一个连接 \(q_{start}\)\(q_{goal}\) 的路径

1.3 总结

  • In workspace
    机器人是一个拥有形状和大小的实体 (hard for motion planning)

  • In configuration space

    • 机器人是一个点 (easy for motion planning)
    • 障碍物提前加入到 C-space 中去,其实严格上来说也不算是加入,只是以某种方式对规划时使用的地图进行了一定方式的变动,使得在后续的路径规划中可以忽略机器人的一个形状和大小的约束,从而简化规划问题的难度。
  • C-space 表示障碍物可能非常复杂。 因此在实践中使用了近似(但更保守)的表示,例如下图所示是将机器人通建模为一个半径为 \(r\) 的球形:

2.0 图和搜索技术

2.1 图

  • 首先图这个概念相信大家或多或少的在本科学习中都会接触到图论相关的内容,简单来说图是由节点和边构成的。根据节点和边的不同形式还可以分成无向图,有向图,赋权图等等。下面是一些例子。

    • 无向图

    • 有向图

    • 赋权图

  • 状态空间图 (state sapce graph)
    搜索算法的数学表示,即将一张图抽象成数学上的表达形式

    • 对于每一个搜索问题,都有一个对应的 state space graph
    • 图中节点之间的联系自然由链接两个节点之间的边所表示
    • 下面两张图分别代表了在基于栅格地图搜索是和基于概率路线图搜索是所对应的 state space graph

2.2 图搜索概述

  • 图搜索技术总是从一个起点 \(X_S\) 出发
    • 可以将搜索图画成一颗树(数据结构中的树),树的父节点就是起点
    • 然后对该树进行遍历,当在树中找到目标点的时候,通过该节点进行回溯,即可找到一条从起点到终点的路径。
    • 然而对于许多问题,我们永远无法真正构建整棵树,太大或效率低下——我们只想尽快到达目标节点。
    • 下面展示的则是一个简单的将图转换为树的过程

一个基于图搜索的大致流程可以归结为如下步骤

  • 维持一个 container 去存储将要访问的节点
  • container 初始化的时候只有 \(X_S\) 节点
  • LOOP
    • containerRemove 一个节点,移除的规则需要遵循提前定义好的 score function
      • Visit a node
    • Expansion: 获得移除节点的邻居节点
      • Discover all its neighbors
    • Push them (neighbors) into the container
  • End LOOP

2.3 图搜索回顾

  • Question 1: When to end the loop? 什么时候终止上述的 LOOP
    • Possible Option: 当所维护的 container 为空的时候
  • Question 2: What if the graph is cyclic? 如果图是循环的呢?
    • 当一个节点从容器中移除(扩展/访问)时,它不应该再次添加回容器。
  • Question 3: 以什么方式删除正确的节点,以便尽快达到目标状态,从而减少图节点的扩展。

\(\quad\)显而易见,问题3则是解决图搜索问题或者说基于搜索的路径规划问题的核心问题,起初,我们并不知道目标点在图中的哪个位置,因此我们只能尝试去遍历图中的所有节点,当到达目标节点的时候则停止遍历即可,那么下面的一个问题则变成了如何高效的进行图的遍历,从而快速的找到目标点。

2.4 图的遍历 (Graph Traversal)

\(\quad\)学过一点关于图论的同学可能知道,图的遍历遍历一般是基于两种方法,即我们通常所说的深度优先遍历(DFS)和广度优先遍历(BFS),两者的遍历方式有一定的区别,首先在编程实现的时候,所对应的数据结构一个对应的是堆,一个对应的则是栈,具体如下图所示:

2.4.1 Depth First Search (DFS)

\(\quad\)策略:移除/扩展容器中深度最大的节点,若深度一样,则根据自定义的策略进行选择移除(即后文所说的 Heuristic Function)
\(\quad\)具体的实现如下图所示,维护一个 last in first output container (i.e. statck)

\(\quad\)下面通过一个动图来展示这一过程,根据图中的编号,节点会依次的进行扩展和遍历。

2.4.2 Breadth First Search (BFS)

\(\quad\)广度优先搜索的策略:移除/扩展容器中最浅层的节点。
\(\quad\)实现方式:维护一个 first in first output container (i.e. queue)

\(\quad\)下面通过一个动图来展示这一过程,根据图中的编号,节点会依次的进行扩展和遍历。

2.4.3 BFS VS DFS

  • BFSDFS 的对比如下图所示:

\(\quad\) 从图中可以明显的看到虽然两个方法都可以找到最终的目标点,但是 DFS 明显找到的不是最优解,即并不是最短路。这里我们只是直观上说明 DFS 不能找到最优路径,事实上也确实不行因此在后面的讨论中,我们值讨论基于 BFS 的遍历方式。

3.1 贪心搜索

\(\quad\) BFSDFS 在选择下一个节点的时候,仅仅是依靠当前 container 中谁是 "first in" 或者谁是 last in 进行判断。

\(\quad\) 贪心算法进行搜索则是根据一种 heuristic function 进行选择,从而选择认为(最好的节点)

  • Heuristic Definition:

    A heuristic is a guess of how close to you are to the target。即启发式是一个对当前点距离目标点多远的猜测,那么我们自然就可以使用两点之间的一个范式距离来判断猜测了,下图就表示了利用欧式距离和曼哈顿距离当作 heuristic 时所猜测的距离。

    heuristic 应当满足以下两点:

  • 启发式搜索可以指导你朝着一个尽可能正确的方向向目标点靠近。

  • 启发式函数应当是非常简单进行计算的,因为本身我们在不使用启发式搜索时,单单通过广度优先遍历是可以找到一个起点到目标点的最有解的,但是其速度比较慢,因此才加入启发式搜索,但如果启发式函数计算较为复杂,反而会增加计算时间,得不偿失,启发式搜索也就是去了意义。

\(\quad\) 下面对 BFS 和 Greedy Best-First Search 通过一张动图进行简单对比(环境过于简单,起点和终点之间没有障碍物)。

\(\quad\) 看起来贪心搜索的表现确实不错。接下来看看如果在图中加入障碍物会怎么样。

\(\quad\) 很遗憾,贪心搜索失败了,并没有找到最优路径,太过于注重眼前利益。

\(\quad\) 导致这种问题i的原因是什么呢?在接下来的讨论中揭晓。

Reference

有关基于图的路径搜索技术基础知识的更多相关文章

  1. ruby-on-rails - Nokogiri:使用 XPath 搜索 <div> - 2

    我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll

  2. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  5. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  6. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  7. ruby-on-rails - Rails - 使用/自定义 URL : '/dashboard' 指定根路径 - 2

    如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b

  8. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  9. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  10. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

随机推荐