BUG1算法的基本思想

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

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

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_搜索

BUG2算法

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

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

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_搜索_02


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

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

参考文献:

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

Tangent BUG算法

是对BUG2算法的改进算法。它利用机器人上搭载的激光雷达等传感器对障碍物做出提前规避

借助传感器,我们可以测得每束光线到达传感器探测范围内障碍物的距离。假设传感器的探测半径为R,当探测光线在探测半径内没有遇到障碍物时,我们便规定该条探测光线与障碍物的距离为无穷远,当探测光线在探测半径内遇到障碍物时,可得到其到障碍物的距离ρ(x,θ),如下式所示,其中x是机器人当前位置,θ是当前探测光线的角度。

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_算法原理_03


根据上式,可以计算获得每条探测光线距离障碍物的距离,并可得到障碍物距离不连续的探测光线(即与相邻的探测光线相比,距离障碍物的距离发生突变的探测光线),如下面左图中的黑色粗线所示,易知这些探测光线出现在与探测范围内的障碍物相交与不相交的临界位置,这些探测光线与障碍物的交点记为Oi,如下面的右图中的O1 ~ O8所示,下面右图中的黑色粗线表示ρ(x,θ)连续的区间。


bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_搜索_04

了解以上内容之后,下面对Tangent BUG 算法的流程进行介绍,Tangent BUG 算法依然包括朝目标点移动和绕行障碍物两种行为,首先机器人从起始点沿着直线向目标运动,直到感应到位于自身和目标连线之间的障碍物,并得到ρ(x,θ)发生突变的边界点Oi,根据设定的规则,选取最佳的Oi点,比如我们可以选择d(x,oi)+d(oi,goal)最小的点作为最佳的Oi点,即选择Oi点中,机器人当前位置到该Oi点之间的距离与该Oi点到目标点的距离之和最小的点作为最佳Oi点。

在下面左图中的例子中,在O1~O4中,d(x,o2)+d(o2,goal)的值最小,即选取O2作为最佳Oi点,同理在下面右图的例子中选取O4作为最佳Oi点。


bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_路径规划_05

得到当前的最佳Oi点后,机器人开始朝着当前最佳Oi点移动,需要注意的是在机器人移动过程中传感器的探测光线与障碍物之间的距离和交点是实时变化的,Oi点和最佳Oi点的位置也是实时变化更新的,因此其运动轨迹会相对平滑一些,如下图所示。

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_搜索_06

在朝着目标移动行为中,当机器人在朝着Oi点移动的过程中,d(x,oi)+d(oi,goal)的值应该是逐渐减小的,若发现d(x,oi)+d(oi,goal)的值不再减少,而将要开始增加,则开始执行绕行障碍物行为,沿障碍物边界运动。

将障碍物区分为跟随障碍物(Followed obstacle)和阻挡障碍物(Blocking obstacle),跟随障碍物即为当前机器人正在感知的障碍,阻挡障碍物即为与从机器人当前位置到目标点之间的连线相交的障碍物。与此对应的也定义了两种距离:d_reach是机器人已感应到的边界与目标之间的最短距离。d_followed是在阻挡障碍物和目标之间的最短距离。

与朝目标运动过程相同,在绕行障碍物行为中,机器人会继续朝选定最佳Oi运动,并不断更新d_reach和d_followed值,当 d_reach<d_followed时,机器人终止绕行障碍物行为,停止沿障碍物边界运动。转而开始执行朝目标点移动行为,继续朝目标点移动,以此循环,直至到达目标点。

例子中,

机器人从起始点开始朝着目标点直线,在移动过程中搭载的激光雷达会首先探测到障碍物WO2,然而该障碍物与机器人当前位置与目标点之间的连线不相交,即该障碍物不会影响机器人到达目标点,机器人继续执行,直至机器人探测到障碍物WO1,即下面左图所示的状态,发现WO1与机器人当前位置与目标点之间的连线相交,停止朝目标点直行,开始朝最佳Oi点移动,在下面左图的状态中,即开始朝O2移动,在移动过程中会不断更新最佳Oi点的位置,直至d(x,oi)+d(oi,goal)的值不再减小,则开始绕行障碍物行为,并不断更新d_reach和d_followed值,在下面右图中的例子中,M点所在位置即为机器人观测到的障碍物距目标距离最近点,即d_followed=d(M,goal),当 d_reach<d_followed时,机器人终止绕行障碍物行为,停止沿障碍物边界运动。转而开始执行朝目标点移动行为,继续朝目标点移动,以此循环,直至到达目标点。

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_算法原理_07

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_搜索_08

Bug系列路径规划算法原理介绍(三)——Tangent BUG算法

I-BUG算法

使用了最少的感知信息,不需要机器人的定位信息,在很多无法定位、定位信息不准确的场景或者里程计累计误差较大的场景,存在较大的潜在应用价值,但是相应他是一种有源的算法,即需要在目标点处发出某种强度信号,来引导机器人前往目标点,使用I-BUG算法的机器人仅需要搭载三种传感器。

机器人搭载的传感器及其作用

 (1) contact sensor:接触传感器

 接触传感器用于判断机器人是否于障碍物接触。若机器人与障碍物接触则将变量ht(x)设为1,否则将其设为0,其中x表示机器人的当前位置。

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_路径规划_09

(2) intensity sensor:强度传感器

强度传感器用于指示来自位置p的信号的强度,在论文中,假设在目标点处存在一个Tower,可以理解为信号塔,会发出某种强度信号,如果这种强度信号是径向对称的,可以认为离信号塔越近的位置信号越强,强度传感器能够接收到目标点处的信号塔发出的这种强度信息,并能判断其强度大小,其数学表达式为:hi(x) = m(p − pt),其中p表示机器人当前位置,pt表示信号塔,也就是目标点所在位置,在径向对称强度信号中,m(p)可以简单的采用以下公式计算:

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_算法原理_10

并将m(p)的值限定在0~1之间,并规定信号塔处m(pt)=1

(3) tower alignment sensor 或 gradient alignment sensor

在径向对称强度信号的场景中,第三种传感器采用塔架对准传感器或者梯度对准传感器都可以,而在非径向对称强度信号的场景,只能采用梯度对准传感器。

塔架对准传感器需要判断机器人前进的方向是否朝着信号塔,也就是目标点。 朝向信号塔时规定ha(x)=1,否则为0;前面介绍的BUG1、BUG2、Tangent BUG算法中机器人都存在朝着目标点方向直行的行为,I-BUG算法中依然存在该行为,所以需要采用塔架对准传感器来判断机器人的朝向。

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_算法原理_11

梯度对准传感器用于判断机器人是否面向m的最陡上升方向, 面向m的最陡上升方向时规定ha(x)=1,否则为0;在径向对称强度信号的环境中,面向m的最陡上升方向也就是对准塔架的方向,此时两种传感器的效果是相同的。

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_算法原理_12

然而在非径向对称强度信号环境中,m(p)不再是上面表达式所示的那种简单的只与偏离信号塔的位置有关的模型,也就是说在偏离信号塔距离相同的位置中,其m(p)值可能不再相同,等m(p)值线不再是以信号塔为圆心的的一系列同心圆,而是不规则的封闭曲线,此时机器人就不能简单的朝着信号塔运动了,而是需要面向m的最陡上升方向运动,此时只能采用梯度对准传感器。

Bug系列路径规划算法原理介绍(四)——I-BUG 算法

RandomBug 算法

路径由一系列向量组成的路径向量集描述,在路径向量集中,每个向量代表总路径中的一部分分段路径,且前一个向量的终点是后一个向量的起点,这样向量集中的向量按照顺序就组成了规划的路径,很显然从起点到目标点的总路径由一系列折线组成,每一段折线都是路径向量集中的一个向量。下式中Pi代表路径向量集,a_i1 ~ a_in代表组成路径的有序分段路径,并且每个a_ik中储存了每段路径的长度||a_ik||,以及与上一段路径的夹角θ_ik ,取值范围为-π ~ π ,论文中取顺时针方向为正。

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_搜索_13

这样机器人只需要沿着当前路径段a_ik直行||a_ik||距离,然后旋转a_ik+1度,再沿着路径段a_ik+1,直行||a_ik+1||距离…以此类推即可达到目标点,即在机器人运动过程中仅包含沿着当前路径段直行,和旋转至下一个路径段的方向两种基础运动单元。

在RandomBug 算法中,首先,机器人根据起始位置和目标位置,建立初始路径向量集(此时向量集仅存在一个向量,即由起始位置指向目标位置的向量)。然后,判断路径向量集中的向量是否被障碍物阻塞,即判断路径上是否存在障碍物。当存在有障碍物时,在以当前位置为圆心,传感器探测距离为半径上限,机器人的安全距离为半径下限的圆环区域内随机生成一些中间点,然后选择最优的中间点插入到当前路径矢量集中来重新生成路径矢量集。以此循环,直至机器人达到目标位置。

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_搜索_14

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_算法原理_15

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_搜索_16

第一幅图为例,最初机器人从起始点q_start出发时初始化的路径向量集为Po,仅包含一个向量a_01,由起点指向终点,然后机器人开始沿着a_01运动至图中a_11末端所示位置时发现了障碍物,然后以该位置为圆心,按照上文介绍的方法,得到中间点p,路径集也由P0,变为P1,P1中包含如图中所示的三个向量。

论文中均采用的余弦定理来求解a_13和θ_13,其实完全可以更简单的利用两点间距离公式求a_13,以及点积公式的变形形式求θ_13。

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_算法原理_17

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_算法原理_18

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_算法原理_19

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_搜索_20

BUG系列路径规划算法原理介绍(五)——RandomBug算法

 BugFlood算法

期望达到的效果: ① 一种快速路径规划算法,该算法可生成接近最优的路径,但时间较少。 ②保证路径长度和完整性,③快速确定路径是否不存在

bug算法的学习(看其他文章的笔记,建议看文章原文,笔记仅仅供个人学习)_算法原理_21


看不下去了,看吐了,

BUG系列路径规划算法原理介绍(六)——BugFlood算法