Bug避障算法简介
移动机器人智能的一个重要标志就是自主导航,而实现机器人自主导航有个基本要求——避障。避障是指移动机器人根据采集的障碍物的状态信息,在行走过程中通过传感器感知到妨碍其通行的静态和动态物体时,按照一定的方法进行有效地避障,最后达到目标点。实现避障与导航的必要条件是环境感知,在未知或者是部分未知的环境下避障需要通过传感器获取周围环境信息,包括障碍物的尺寸、形状和位置等信息,因此传感器技术在移动机器人避障中起着十分重要的作用。避障使用的传感器主要有超声传感器、视觉传感器、红外传感器、激光传感器等。
目前移动机器人的避障根据环境信息的掌握程度可以分为障碍物信息已知(global knowledge of the environment)、障碍物信息部分未知或完全未知(local knowledge of the environment)两种。实际生活中,绝大多数的情况下,机器人所处的环境都是动态的、可变的、未知的。在一系列避障算法中Bug算法是最简单的机器人避障方法,其基本思想是让机器人朝着目标前进,如果遇到障碍则先环绕障碍物移动,然后绕离它,继续驶向目标。为完成避障需要机器人能实现两种功能:沿直线行走和跟踪障碍物的边界。Bug算法的优势之一就在于其只需要使用触觉传感器获得周围环境的局部信息而不必了解全局情况。
- Bug1算法
如图2.1所示,起始点和目标点分别为qstart 和qgoal. 初始时刻 i = 0,令qL0 = qstart ,并称连接qLi 和 qgoal的线段为m-line. 没有遇到障碍时,机器人沿着m-line朝目标qgoal直线移动. 如果遇到障碍,则称点qH1为第一次遇到障碍时的撞击点(hit point). 接着,机器人环绕障碍物移动直至返回 qH1点。然后判断出障碍物周边上离目标最近的点,并移到这个点上,该点称为离开点(leave point),由 qL1表示。从qL1开始机器人再次沿直线驶向目标,如果这条线与当前障碍物相交,则不存在到达目标的路径(如图2.2所示)。 Bug1算法的效率很低,但可以保证机器人能到达任何可达的目标。
机器人先跟踪障碍物的轮廓,与Bug1不同的是,当它能直接移动到目标点时,就立即离开。如图2.3所示,Bug2算法中的m-line连接qstart和qgoal,为一条固定不变的直线。遇到障碍物时机器人会进入轮廓跟踪模式,当其到达m-line上一个接近目标点的位置后(而非初次遇到障碍物的撞击点),继续沿m-line驶向目标。如果机器人再次在m-line遇到上之前的撞击点,则到达目标的路径不存在(如图2.3中第二种情况所示)。
Bug2算法在一般情况下具有很短的移动路径,然而这种策略并非完美。如图2.4所示的螺旋形障碍物,其边界与m-line多次相交,我们可以根据上述Bug2算法的伪代码确定其运动路径:
- qstart→qgoal,遇到障碍物,到达撞击点qH1;
- qH1开始环绕障碍物,直到与m-line相交到达m点(此时进行判断:没有到达目标;没有再次遇到qH1;相比qH1点m点离目标更近;继续朝目标前进不会碰到障碍),则qL1=m,i=2。机器人从qL1沿着m-line继续朝目标前进;
- 再次遇到障碍物,到达撞击点qH2,然后沿着障碍物边界移动,直到再次与m-line相交到达m点(此时进行判断:没有到达目标;没有再次遇到qH2;但继续朝目标前进会碰到障碍),由于不满足离开点的条件,则继续环绕;
- 机器人环绕边界到达qH1点,与m-line相交(此时进行判断:没有到达目标;没有再次遇到qH2;但继续朝目标前进会碰到障碍),由于不满足离开点的条件,则继续环绕目标;
- 机器人继续环绕边界到达qL1点,与m-line相交(此时进行判断:没有到达目标;没有再次遇到qH2;继续朝目标前进不会碰到障碍;但此时相比qH2机器人离目标位置更远),因此也不满足离开点条件,则继续环绕;
- 机器人环绕边界,与m-line相交到达m点(此时进行判断:没有到达目标;没有再次遇到qH2;继续朝目标前进不会碰到障碍;但此时相比qH2机器人离目标位置更远),因此也不满足离开点条件,则继续环绕;
- 机器人环绕边界,与m-line相交到达m点(此时进行判断:没有到达目标;没有再次遇到qH2;继续朝目标前进不会碰到障碍;相比qH2机器人离目标位置更近),满足离开点条件,则qL2=m,i=3;
- 机器人从qL2沿着m-line继续朝目标前进,到达目标位置。
Bug1 VS Bug2
• Bug1 is an exhaustive search algorithm——it looks at all choices before commiting
• Bug2 is a greedy algorithm—— it takes the first thing that looks better
• In many cases, Bug2 will outperform Bug1, but Bug1 has a more predictable performance overall
In fact, Bug1 and Bug2 illustrate two basic approaches to search problems. For each obstacle that it encounters, Bug1 performs an exhaustive search(穷举搜索) to find the optimal leave point. This requires that Bug1 traverse the entire perimeter of the obstacle, it is certain to have found the optimal leave point. In contrast, Bug2 uses an opportunistic(投机取巧的)approach. When Bug2 finds a leave point that is better than any it has seen before, it commits to that leave point. Such an algorithm is also called greedy, since it opts for the first promising option that is found. When the obstacles are simple, the greedy approach of Bug2 gives a quick payoff, but when the obstacles are complex, the more conservative approach of Bug1 often yields better performance. 即障碍物的“复杂度”越大的情况下,Bug1算法相比Bug2算法更有优势。
参考:
Principles of Robot Motion: Theory, Algorithms, and Implementation
Introduction to Autonomous Mobile Robots
http://www.leiphone.com/news/201605/tTC7DaH95LwnVIZW.html
http://www.codeproject.com/Articles/646347/Robotics-Motion-Planning-and-Navigation-Bug-Algori
Bug避障算法简介的更多相关文章
- ROS知识(14)----局部避障的动态窗口算法(DWA)及其调试的方法
Dynamic Window Approach(DWA)是重要的局部轨迹规划算法,ROS中使用了DWA算法获得了很好的局部路径规划的效果.具体的教程可参考官方的导航调试资料Navigation Tun ...
- SLAM+语音机器人DIY系列:(六)SLAM建图与自主避障导航——2.google-cartographer机器人SLAM建图
摘要 通过前面的基础学习,本章进入最为激动的机器人自主导航的学习.在前面的学习铺垫后,终于迎来了最大乐趣的时刻,就是赋予我们的miiboo机器人能自由行走的生命.本章将围绕机器人SLAM建图.导航避障 ...
- 具有避障和寻线功能的Arduino小车
标签: Arduino 乐高 机器人 创客对于成年人来说,多半是科技娱乐,或者是一种是一种向往科技的人生态度,总是希望自己不仅可以看到或者听到科技的资讯,还希望能够亲身制作科技玩意,从而更好地体 ...
- webrtc 的回声抵消(aec、aecm)算法简介(转)
webrtc 的回声抵消(aec.aecm)算法简介 webrtc 的回声抵消(aec.aecm)算法主要包括以下几个重要模块:1.回声时延估计 2.NLMS(归一化最小均方自适应算法) ...
- AES算法简介
AES算法简介 一. AES的结构 1.总体结构 明文分组的长度为128位即16字节,密钥长度可以为16,24或者32字节(128,192,256位).根据密钥的长度,算法被称为AES-128,AES ...
- 机器人局部避障的动态窗口法(dynamic window approach) (转)
源:机器人局部避障的动态窗口法(dynamic window approach) 首先在V_m∩V_d的范围内采样速度: allowable_v = generateWindow(robotV, ro ...
- [TPYBoard - Micropython 之会python就能做硬件 9] 五分种学会用TPYBoard V102 制作避障小车(升级版)
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 感谢山东萝卜电子科技公司授权 一.实验器材 1.TPYboard V102板 ...
- 排列熵算法简介及c#实现
一. 排列熵算法简介: 排列熵算法(Permutation Entroy)为度量时间序列复杂性的一种方法,算法描述如下: 设一维时间序列: 采用相空间重构延迟坐标法对X中任一元素x(i)进行相空间 ...
- 智能循迹避障小车&抢答器
智能循迹避障小车 →视频链接← 抢答器
随机推荐
- CentOS7.1搭建服务器篇(1)
服务器搭建篇 1.镜像选择,CentOS 7.1 minmal.iso 2.yum install net-tools[提供ifconfig工具,我不习惯IP命令] 3.配置静态IP地址58.154. ...
- NOIP201405生活大爆炸版石头剪刀布
NOIP201405生活大爆炸版石头剪刀布 试题描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一 样,则不分胜负.在<生活大爆炸>第二季第 8 集中出现了 ...
- 《REWORK》启示录 发出你的心声——程序员与身体
Sound Like You 所谓的标题在这里并不是为了吸引眼球,不过也是为了吸引眼球,只是出发点已经不一样了.这是一篇适合给程序员看的关于健康的文章,也许你认识李开复也可以给他看看,上过养生过,觉得 ...
- json_decode和json_encode
JSON出错:Cannot use object of type stdClass as array解决方法php再调用json_decode从字符串对象生成json对象时,如果使用[]操作符取数据, ...
- 161025、java提高篇之关键字static
一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概念,在Java中static表示"全局"或 ...
- CC2541的任务与事件,以及红外捕捉.
因为红外遥控要占用的系统中断时间可能超过了80ms, 极有可能导致蓝牙断线, 特别是连续两次按键, 100%断线. 后来根据蓝牙技术群里的哥们提示, 觉得不能在一个中断中delay得太久, 只能用任务 ...
- 安装SQL Server 2005
在安装SQL Server 2005时,经常会遇到一些错误,从而使系统无法正常安装.下面讲解在安装过程中经常出现的一些错误及其解决的方法.1.解决在安装SQL Server 2005时安装程序被挂起的 ...
- WebService工作原理
1.WebService工作原理-SOAP 当客户端调用一个WebService的方法时,首先将方法名称和需要传递的参数包装成XML,也就是SOAP包,通过HTTP协议传递到服务器端,然后服务器端解析 ...
- 13、mysql/触发器
1. mysql mysql基础 1)mysql存储结构: 数据库 -> 表 -> 数据 sql语句 2)管理数据库: 增加: create database 数据库 default ...
- 编译器 perforSelecter时 警告去除
#pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks&quo ...