Bug避障算法簡介


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

  目前移動機器人的避障根據環境信息的掌握程度可以分為障礙物信息已知(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算法的效率很低,但可以保證機器人能到達任何可達的目標。

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

 

  Bug2算法在一般情況下具有很短的移動路徑,然而這種策略並非完美。如圖2.4所示的螺旋形障礙物,其邊界與m-line多次相交,我們可以根據上述Bug2算法的偽代碼確定其運動路徑:

  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 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM