2016-04-12 101 views
2

我有一個移動機器人,它有一個距離傳感器連接到平移伺服電機。電機連續旋轉,將傳感器從0度移動到180度並返回。尋找一種機器人導航算法

距離傳感器每隔幾毫秒發送一個信號來掃描其周圍的障礙物。一個可以可視化由距離傳感器這樣產生的數據:

enter image description here

我希望創建的算法允許機器人在存在最可用空間的方向移動(或至少障礙物) 。

更正式地,我可以表示輸入和輸出,如:

  • 輸入:陣列的距離爲馬達旋轉的每個角度最近的對象的。

  • 輸出:表示最佳角度的單個值。

對於算法的要求是:

  • 不應該易於在數據異常值(傳感器有時不可預測尖峯)
  • 並不需要絕對最佳的,1-2%斷是可以接受的
  • 效率(這將在一個小的微處理器上運行)
  • 可理解到一個業餘愛好者(我不是ML專家;))
+1

1-2%的折扣是什麼?無論是什麼,都很難實現。有任何想法嗎?你嘗試過什麼嗎? (這裏被認爲是需要獲得幫助的要求) – Piglet

回答

0

我不知道你所使用的語言(我是一個Java和C#的傢伙),所以我只是用僞代碼:

EPSILON : Float = .02f -> this is our margin of error 

DIRECTION : Integer = 0 -> the best direction to go 

DISTANCE : Float = 0 -> the furthest distance from the robot 

DISTANCES : Float[181] -> the values you get from your sensor 

DISTANCE = DISTANCES[DIRECTION] // set the first distance 

    for(int index = 1; index < size_of(DISTANCES)-1; index++) { 
     //we are checking if the value is within 2% of the previous and next values 
     if((DISTANCES[index-1] * (1+EPSILON) >= DISTANCES[index] AND 
      DISTANCES[index-1] * (1-EPSILON) <= DISTANCES[index]) OR 
      (DISTANCES[index+1] * (1+EPSILON) >= DISTANCES[index] AND 
      DISTANCES[index+1] * (1-EPSILON) <= DISTANCES[index])) { 
     //if the distance at index is greater than the current max distance, 
     //we set that to be the new max distance 
     if(DISTANCES[index] > DISTANCE) { 
      DISTANCE = DISTANCES[index] 
      DIRECTION = index 
      } 
     } 
    } 

你也可以做兩次掃描與傳感器和比較每個點的距離,看看是否有尖峯,但考慮到你列出的規格應該工作。