本系列文章主要对Bug类路径规划算法的原理进行介绍,在本系列的第一篇文章中按照时间顺序梳理了自1986年至2018年Bug类路径规划算法的发展,整理了13种BUG系列中的典型算法,从本系列的第二篇文章开始依次详细介绍了其中具有代表性的BUG1、BUG2、Tangent BUG、I-BUG、RandomBug、BugFlood等算法。
本篇文章作为本系列文章第三篇文章,主要对Tangent BUG算法进行介绍
本系列其他文章见:BUG系列路径规划算法原理介绍——总结篇
一、Tangent BUG 算法的提出
1996年 I. Kamon和E. Rivlin在论文《A new range-sensor based globally convergent navigation algorithm for mobile robots》中提出了TangentBug算法
(1)论文链接:https://ieeexplore.ieee.org/abstract/document/503814
(2)论文DOI: 10.1109/ROBOT.1996.503814
二、Tangent BUG 算法
Tangent BUG算法是对BUG2算法的改进算法。它利用机器人上搭载的激光雷达等传感器对障碍物做出提前规避。
借助传感器,我们可以测得每束光线到达传感器探测范围内障碍物的距离。假设传感器的探测半径为R,当探测光线在探测半径内没有遇到障碍物时,我们便规定该条探测光线与障碍物的距离为无穷远,当探测光线在探测半径内遇到障碍物时,可得到其到障碍物的距离ρ(x,θ),如下式所示,其中x是机器人当前位置,θ是当前探测光线的角度。
根据上式,可以计算获得每条探测光线距离障碍物的距离,并可得到障碍物距离不连续的探测光线(即与相邻的探测光线相比,距离障碍物的距离发生突变的探测光线),如下面左图中的黑色粗线所示,易知这些探测光线出现在与探测范围内的障碍物相交与不相交的临界位置,这些探测光线与障碍物的交点记为Oi,如下面的右图中的O1 ~ O8所示,下面右图中的黑色粗线表示ρ(x,θ)连续的区间。
了解以上内容之后,下面对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点。
得到当前的最佳Oi点后,机器人开始朝着当前最佳Oi点移动,需要注意的是在机器人移动过程中传感器的探测光线与障碍物之间的距离和交点是实时变化的,Oi点和最佳Oi点的位置也是实时变化更新的,因此其运动轨迹会相对平滑一些,如下图所示。
在朝着目标移动行为中,当机器人在朝着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时,机器人终止绕行障碍物行为,停止沿障碍物边界运动。转而开始执行朝目标点移动行为,继续朝目标点移动,以此循环,直至到达目标点。
上面右图中画出的运动轨迹中,实线部分为机器人朝目标点直行轨迹,虚线部分为朝目标点移动过程中的朝最佳Oi点移动轨迹,点线部分为绕行障碍物行为中朝最佳Oi点移动轨迹。
下图中分别给出了传感器的探测半径为0和R时的两种轨迹
Tangent BUG 算法的伪代码如下: