2017-08-04 168 views
1

我在ios的Beacons幫助下開發室內導航系統。現在我們有3個Bluecast信標,而且我沒有從這三個信標獲得準確的距離。我已經通過將三個信標放在同一位置進行測試,但它在主要時間顯示不同的距離和rssi值。計算精確的Ibeacon距離

我試過與信標提供程序顯示應用程序和我自己的應用程序相同,但是這兩個應用程序都顯示相同的值。

示例代碼

locationManager = CLLocationManager() 
locationManager.delegate = self 

let uuid = UUID(uuidString: uuidStr) 
beaconRegion = CLBeaconRegion(proximityUUID: uuid!, identifier: "Beacones") 

beaconRegion.notifyOnEntry = true 
beaconRegion.notifyOnExit = true 
locationManager.requestAlwaysAuthorization() 
locationManager.startMonitoring(for: beaconRegion) 
locationManager.startUpdatingLocation() 

距離計算器邏輯是在下面

public func calculateAccuracy(txPower : Double, rssi : Double) -> Double { 
     if (rssi == 0) { 
      return -1.0; // if we cannot determine accuracy, return -1. 
     } 

     let ratio :Double = rssi*1.0/txPower; 
     if (ratio < 1.0) { 
      return pow(ratio,10.0); 
     } 
     else { 
      let accuracy :Double = (0.89976)*pow(ratio,7.7095) + 0.111; 
      return accuracy; 
     } 
    } 

回答

1

要小心,不要設置精度可以得到程度不切實際的期望。使用藍牙信號電平估計距離最多隻能提供一個粗略的距離估計值,但有許多缺陷可能導致它不能正常工作。

爲了達到最佳效果:

  • 設置你的信標發射機以儘可能高的價值儘可能的增加信噪比,使RSSI更加一致。

  • 將信標廣告率設置得儘可能高,以獲得儘可能多的統計樣本,以平均噪音。

  • 將您的txPower常數調整爲在距離估計中使用的特定設備接收器上一米處的測量平均RSSI。

  • 如果您發現一致性超出或低於該公式的估計值,請根據需要調整常數以最佳擬合。

認識到障礙物(甚至人體),反射,無線電噪音,手機外殼甚至不同的手機型號都會影響結果。估計2-3米的距離效果最好。在距離較遠時,隨着距離信號電平呈指數下降,您將看到更高的錯誤率。