Bug系列路径规划算法原理介绍(二)——BUG1 BUG2算法

news2024/11/19 9:34:40

在这里插入图片描述


   本系列文章主要对Bug类路径规划算法的原理进行介绍,在本系列的第一篇文章中按照时间顺序梳理了自1986年至2018年Bug类路径规划算法的发展,整理了13种BUG系列中的典型算法,从本系列的第二篇文章开始依次详细介绍了其中具有代表性的BUG1、BUG2、Tangent BUG、I-BUG、RandomBug、BugFlood等算法。


   本篇文章作为本系列文章第二篇文章,主要对BUG1和BUG2算法进行介绍

   本系列其他文章见:BUG系列路径规划算法原理介绍——总结篇


   一、BUG1 BUG2算法的提出

   1987年 Vladimir J. Lumelsky 和 Alexander A. Stepanov 在论文《Path-planning strategies for a point mobile automaton moving amidst unknown obstacles of arbitrary shape》中回顾了BUG1 算法,并提出了BUG2算法。

   (1)论文链接:https://linkspringer.53yu.com/article/10.1007/bf01840369

   (2)论文DOI:10.1007/bf01840369


   二、BUG1算法

   BUG1算法的基本思想是在没有障碍物时,沿着直线向目标运动可以得到最短的路线。当遇到障碍物时,机器人绕行障碍物直到能够继续沿直线项目标运动。即BUG1算法在不断的执行两个行为:向目标直行和绕着障碍物的边界走,直至到达目标点或发现无可行路径。

   算法的基本流程是机器人从起点出发,沿着从起点到目标点的直线运动,直至遇到障碍物停止直行行为,开始绕行行为,机器人会沿着障碍物的边界绕行一圈,直至回到开始绕行的位置,然后找到绕行当前障碍物一圈中距离目标点最近的点,并将机器人移动到该点,绕行行为结束,判断从该点到目标点的直线是否与当前障碍物相交,若相交则认为不存在目标点的路径,结束规划,若不相交,则继续从该点开始继续朝目标点执行直行行为,如此循环直至到达目标点或发现无可行路径退出规划。

   上述中遇到障碍物开始绕行的点称为撞击点,结束绕行继续朝目标点直行移动的点称为离开点。以下图的例子中,机器人从①处出发,沿着直线①–⑥的方向移动,直至到达撞击点②处,从②处开始执行绕行行为,绕着当前障碍物运动一圈回到②处,并判断出绕行过程中距离目标点⑥处最近的点③,机器人从②处移动到离开点③处,判断直线③–⑥是否与当前障碍物相交,本例中不相交,机器人开始沿着直线③–⑥运动,此时机器人以成功绕过了第一个障碍物WO1,以此类推绕过WO2,到达目标点。

   在下面的例子中,机器人在离开点③处,发现③到目标点④的直线与当前障碍物相交,即认为不存在从起始点①到目标点④的可行路径。

   BUG1算法的伪代码如下:


   总的来说,BUG1算法采用了一种比较保守的策略,效率很低,但可以保证机器人能到达任何可达的目标。


   三、BUG2算法

   BUG2算法也包含朝向目标的直行和沿边界绕行两种运动。与BUG1算法不同的是,BUG2算法中的直行运动始终是沿着从起点到目标点的直线方向进行的,并且BUG2算法在遇到障碍物时不再采用绕行一圈再判断距离目标点最近的离开点的策略,而是改用以下策略:

   当机器人沿着从起始点到目标点方向执行直线运动的过程中遇到障碍物时,机器人开始绕行障碍物,如果机器人在绕行过程中在距离目标更近的点与从起始点到目标点方向的直线相交,并且此时从此处朝着目标点移动暂时不会碰到障碍物时,就停止绕行,继续沿着该直线向目标直行,若不满足以上条件就继续绕行,直至找到满足条件的点停止绕行,转而执行直行运动,若一种不满足,机器人回到了开始绕行的点,那么此时便认为机器人不能到达目标点。

   比如在下面的例子中,机器人从①处出发沿着①–⑥的方向执行直线运动,直至在②处遇到障碍物,开始执行绕行运动,绕行到③处后重新与直线①–⑥相交,并且③处比开始绕行的②处距离目标点更近,则在③处停止绕行,并继续从③处沿着直线①–⑥的方向执行直线运动,以此类推,最终达到目标点⑥处。

   再比如在下面的例子中,机器人从①处出发沿着①–④的方向执行直线运动,直至在②处遇到障碍物,开始执行绕行运动,绕行到③处后重新与直线①–⑥相交,但是经过判断发现相比于开始绕行的②处,③处离目标点④更远,因此继续绕行,绕行到②处重新与直线①–⑥相交,发现回到了开始绕行的地方,此时认为没有从起点①到目标点④的路径,退出规划。


   现在总结一下,在某点处停止绕行运动,转而执行直行运动,需要满足以下5个条件:

   (1)没有达到目标点 (若在绕行过程中,恰好到达了目标点,则规划完成,不需要再执行直行运动)

   (2)该点与由起始点和目标点所确定的直线相交,或者说该点在由起始点和目标点所确定的直线上

   (3)没有回到开始绕行的点

   (4)从该点处朝着目标点执行直线运动暂时不会遇到障碍物

   (5)相比于开始绕行的点,该点距离目标点更近

   以上条件可按照(1)~ (5)的顺序进行判断,且只有在满足(1)和(2)的情况下,才需要进行(3)~(5)的判断。


   在如下面的例子所示的环境中,算法的效率会变得很低,机器人从①处出发沿着由起始点①和目标点⑩确定的直线①–⑩执行直行运动,到达②处,开始绕行,绕行到③处,满足以上5个停止绕行的条件,结束绕行,转而执行直行运动到达④处,再次开始绕行,绕行到⑤处,依次判断以上5个条件,不满足条件(4),因此继续绕行到⑥处(即②处),不满足条件(4),继续绕行到⑦处(即③处),不满足条件(5),继续绕行到⑧处,若⑧处比开始绕行的④处离目标点⑩处更近,则⑧处满足以上5个条件,由⑧处朝着⑩处直行运动达到目标点结束规划,下图的例子中认为⑧处比④处距离⑩处远,即不满足条件(5),继续绕行到⑨处,满足5个条件,结束绕行,从由⑨处朝着⑩处直行运动达到目标点,结束规划。


   BUG2算法的伪代码如下:



   总的来说,相比于BUG1算法,BUG2算法采用了一种更贪心的策略,部分情况下效率会比BUG1要高一点。

   随着环境的复杂性增加(环境中障碍物数量增加),BUG1搜索效率越来越有可能胜过BUG2。BUG1采用详尽的搜索以找到最优的离开点 。BUG2采用贪心搜索,选择找到的第一个有希望的离开点 ,但不能保证最优。当障碍很简单时,BUG2 的贪心搜索会很快获得回报,但是当障碍很复杂时,BUG1更保守的方法通常会产生更好的性能。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试官:高并发场景下,你们是怎么保证数据的一致性的?图文详解

面试的时候,总会遇到这么一个场景。 1. 场景分析 面试官:你们的服务的QPS是多少? 我:我们的服务高峰期访问量还挺大的,大约是3万吧。 面试官:这么大的访问量,你们的服务器能撑住吗&#xff…

自学unity,该不该阻止?

看清现状,展望未来 进入游戏公司前 进入游戏行业一大契机:在校生身份。各大厂同一个岗位对校招和社会招聘的要求不是一个维度。从学校校招生的身份毕业成为社会人,按照再给两年来算,两年后技术会如何革新?各大公司的招…

【苹果推群发iMessage推】软件安装个性化必要高度 - (void) updateListH

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

MySQL8.0.26—Linux版安装详细教程

❤ 作者主页:Java技术一点通的博客 ❀ 个人介绍:大家好,我是Java技术一点通!( ̄▽ ̄)~* 🍊 记得关注、点赞、收藏、评论⭐️⭐️⭐️ 📣 认真学习,共同进步!&am…

Network error: Connection refused

Network error: Connection refused1 问题的现象2 确认vmware ubuntu侧ssh是否启动2.1 确认ubuntu侧ssh的状态2.2 重启ssh服务2.3 安装ssh1 问题的现象 在用mobaXterm ssh去链接vmware虚拟机ubuntu时一直报下面的错误。 出现该问题之后我做了下面的检测: 检查vmw…

腾讯云年终选购云服务器攻略!

随着云计算的快速发展,很多用户都选择上云,上运中最常见的产品就是云服务器CVM和轻量应用服务器了,那么怎么选购最优惠呢,这篇文章将介绍新老用户选购腾讯云服务器的几个优惠方法。 一、买赠专区 第一个介绍的就是买赠专区&…

在kubernetes中对pod使用tcpdump+wireShark进行抓包

1.查看pod信息,获得pod所在的宿主机 kubectl get pod -n demo -o wide 2.获取宿主机的详情 kubectl get node zeebe.node1 -o wide 3.ssh连接到宿主机 ssh 用户名10.10.11.202 4.查看容器ID,使用POD名称中的关键字进行查找 docker ps|grep nodeapp 5…

java计算机毕业设计ssm图书馆预约管理系统txke6(附源码、数据库)

java计算机毕业设计ssm图书馆预约管理系统txke6(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xf…

【Shell 脚本速成】07、Shell 流程控制——if 判断语句

目录 一、if 介绍 二、单 if 语法 三、if…else 语句 四、if…elif…else 五、if 嵌套 if 5.1 使用 if 嵌套 if 的方式判断两个整数的关系 5.2 写一个nginx安装初始化脚本 六、if 语句与 shell 运算 6.1 与文件存在与否的判断 6.2 文件权限相关的判断 6.3 整数之间…

【数据结构】建堆的方式、堆排序以及TopK问题

建堆的方式、堆排序以及TopK问题1、建堆的两种方式1.1 向上调整建堆1.2 向下调整建堆2、堆排序3、TopK问题4、建堆、堆排序、TopK问题全部代码1、建堆的两种方式 我们知道,堆是二叉树的一种,二叉树的建立是借助结构体与数组完成的(通过在结构…

扫描电镜下的人体感官结构,超震撼

我们对自己的感官最熟悉不过了,但是如果把这些器官放大一千倍一万倍,你还能分辨出来吗?能做到这一点的不是普通的光学显微镜,而是电子显微镜。 电子显微镜可以将物体放大近300000倍,其分辨率可达1纳米(10-9…

Minio学习

目录 一、概述 1、Minio介绍 2、Minio的基础概念 3、Minio安装 3.1、Docker容器中安装 3.2、Windows运行安装 4、分布式Minio优势 数据保护 高可用 一致性 5、Minio客户端使用 6、SpringBoot工程引入Minio 一、概述 Minio分布式文件系统。 Minio是一个基于Apache…

客服回复差评的话术模板

当店铺出现差评时,客服首先要去与客户进行沟通,帮助客户解决问题,尽可能去消除差评;如果客户不愿意沟通,无法消除差评的情况下,客服也要及时对差评进行回复。 前言 对于开网店的店主来说,客户…

如何搭建一个自己的音乐服务器

点赞再看,动力无限。 微信搜「 程序猿阿朗 」。 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章。 最近发现,经常用的网易云音乐,有很多歌曲下架了,能听的越来越少了;…

【电气安全】安科瑞电气火灾监控系统在江苏某大学中设计与应用

摘要:本文以安科瑞电气火灾系统在江苏大学科技园的应用为案例,介绍电气火灾系统实现对现场设备的系统集成,数据的采集、传输以及存储,验证了该系统的功能及实用性。 关键词:江苏大学科技园;电气火灾系统&a…

【数据结构】Map和Set

目录 一、JDK中的Map和Set 1.1Map接口的使用 (1)元素的添加操作 (2)在Map集合中查询特定的值 (3)删除Map中指定的value和key (4)Map集合的遍历 1.2Set集合的应用 集合java.u…

RK3588平台开发系列讲解(Thermal篇)Thermal的设备树配置

平台内核版本安卓版本RK3588Linux 5.10Android12🚀返回专栏总目录 文章目录 一、Tsadc 配置二、cooling device配置2.1、CPU配置2.2、 GPU配置三、 Thermal Zone配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍Thermal的设备树配置方法。 一、Tsadc 配…

【GD32F427开发板试用】+demo的正确打开方式(一)

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:四季的温度 这个系列用于汇总我在使用GD32时遇到的问题,为大家排坑 MDK环境准备 打开https://aijishu.com/a/1060000000356925&a…

搜索与图论-树与图的深度优先遍历

文章目录一、树与图的深度优先遍历1. 构造2. 遍历3. 具体实现详见例题——树的重心二、树与图的深度优先遍历例题——树的重心具体实现1. 样例演示2. 实现思路3. 代码注解4. 实现代码DFS 深度优先遍历详见搜索与图论-DFS 一、树与图的深度优先遍历 数与图的深度优先遍历与 DF…

JDK8新特性超详细总结

JDK8新特性 ​ Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台 课程内容的介绍 了解Java发展史Lambda表达式…