Bug避障算法簡介

  移動機器人智能的一個重要標誌就是自主導航,而實現機器人自主導航有個基本要求——避障。避障是指移動機器人根據採集的障礙物的狀態信息,在行走過程當中經過傳感器感知到妨礙其通行的靜態和動態物體時,按照必定的方法進行有效地避障,最後達到目標點。實現避障與導航的必要條件是環境感知,在未知或者是部分未知的環境下避障須要經過傳感器獲取周圍環境信息,包括障礙物的尺寸、形狀和位置等信息,所以傳感器技術在移動機器人避障中起着十分重要的做用。避障使用的傳感器主要有超聲傳感器、視覺傳感器、紅外傳感器、激光傳感器等。html

  目前移動機器人的避障根據環境信息的掌握程度能夠分爲障礙物信息已知(global knowledge of the environment)、障礙物信息部分未知或徹底未知(local knowledge of the environment)兩種。實際生活中,絕大多數的狀況下,機器人所處的環境都是動態的、可變的、未知的。在一系列避障算法中Bug算法是最簡單的機器人避障方法,其基本思想是讓機器人朝着目標前進,若是遇到障礙則先環繞障礙物移動,而後繞離它,繼續駛向目標。爲完成避障須要機器人能實現兩種功能:沿直線行走和跟蹤障礙物的邊界。Bug算法的優點之一就在於其只須要使用觸覺傳感器得到周圍環境的局部信息而沒必要了解全局狀況。算法

  •  Bug1算法

  如圖2.1所示,起始點和目標點分別爲qstartqgoal. 初始時刻 i = 0,令qL0 = qstart ,並稱鏈接qLi 和 qgoal的線段爲m-line. 沒有遇到障礙時,機器人沿着m-line朝目標qgoal直線移動. 若是遇到障礙,則稱點qH1爲第一次遇到障礙時的撞擊點(hit point). 接着,機器人環繞障礙物移動直至返回 qH1點。而後判斷出障礙物周邊上離目標最近的點,並移到這個點上,該點稱爲離開點(leave point),由 qL1表示。從qL1開始機器人再次沿直線駛向目標,若是這條線與當前障礙物相交,則不存在到達目標的路徑(如圖2.2所示)。 Bug1算法的效率很低,但能夠保證機器人能到達任何可達的目標。app

  機器人先跟蹤障礙物的輪廓,與Bug1不一樣的是,當它能直接移動到目標點時,就當即離開。如圖2.3所示,Bug2算法中的m-line鏈接qstartqgoal,爲一條固定不變的直線。遇到障礙物時機器人會進入輪廓跟蹤模式,當其到達m-line上一個接近目標點的位置後(而非初次遇到障礙物的撞擊點),繼續沿m-line駛向目標。若是機器人再次在m-line遇到上以前的撞擊點,則到達目標的路徑不存在(如圖2.3中第二種狀況所示)。iphone

 

  Bug2算法在通常狀況下具備很短的移動路徑,然而這種策略並不是完美。如圖2.4所示的螺旋形障礙物,其邊界與m-line屢次相交,咱們能夠根據上述Bug2算法的僞代碼肯定其運動路徑:ui

  1. qstart→qgoal,遇到障礙物,到達撞擊點qH1
  2. qH1開始環繞障礙物,直到與m-line相交到達m點(此時進行判斷:沒有到達目標;沒有再次遇到qH1;相比qH1點m點離目標更近;繼續朝目標前進不會碰到障礙),則qL1=m,i=2。機器人從qL1沿着m-line繼續朝目標前進;
  3. 再次遇到障礙物,到達撞擊點qH2,而後沿着障礙物邊界移動,直到再次與m-line相交到達m點(此時進行判斷:沒有到達目標;沒有再次遇到qH2;但繼續朝目標前進會碰到障礙),因爲不知足離開點的條件,則繼續環繞;
  4. 機器人環繞邊界到達qH1點,與m-line相交(此時進行判斷:沒有到達目標;沒有再次遇到qH2;但繼續朝目標前進會碰到障礙),因爲不知足離開點的條件,則繼續環繞目標;
  5. 機器人繼續環繞邊界到達qL1點,與m-line相交(此時進行判斷:沒有到達目標;沒有再次遇到qH2;繼續朝目標前進不會碰到障礙;但此時相比qH2機器人離目標位置更遠),所以也不知足離開點條件,則繼續環繞;
  6. 機器人環繞邊界,與m-line相交到達m點(此時進行判斷:沒有到達目標;沒有再次遇到qH2;繼續朝目標前進不會碰到障礙;但此時相比qH2機器人離目標位置更遠),所以也不知足離開點條件,則繼續環繞;
  7. 機器人環繞邊界,與m-line相交到達m點(此時進行判斷:沒有到達目標;沒有再次遇到qH2;繼續朝目標前進不會碰到障礙;相比qH2機器人離目標位置更近),知足離開點條件,則qL2=m,i=3;
  8. 機器人從qL2沿着m-line繼續朝目標前進,到達目標位置。

Bug1 VS Bug2spa

• Bug1 is an exhaustive search algorithm——it looks at all choices before commiting3d

• Bug2 is a greedy algorithm—— it takes the first thing that looks bettercode

• In many cases, Bug2 will outperform Bug1, but Bug1 has a more predictable performance overallorm

  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算法更有優點。 htm

 

參考:

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

相關文章
相關標籤/搜索