计算准确的 Ibeacon 距离

calculate accurate Ibeacon distance

我在 ios 的 Beacons 的帮助下开始开发室内导航系统。我们现在有 3 个 Bluecast 信标,但我无法获得与这三个信标的准确距离。我已经通过将三个信标放在同一位置进行了测试,但它在主要时间显示了不同的距离和 rssi 值。

我尝试使用 beacon provider reveal 应用程序和我自己的应用程序,但两个应用程序都显示相同的值。

示例代码是

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

注意不要对您可以获得的准确度设定不切实际的期望。使用蓝牙信号电平估算距离最多只能提供粗略的距离估算值,但存在许多可能使其无法正常工作的陷阱。

为了获得最佳效果:

  • 将您的信标发射器设置为尽可能高的值,以增加信噪比并使 rssi 更加一致。

  • 将信标广告率设置得尽可能高,以获得尽可能多的统计样本以平均掉噪音。

  • 将您的 txPower 常数调整为在特定设备接收器上一米处测得的平均 RSSI,用于距离估计。

  • 如果您发现与公式一致的高估或低估,请根据需要调整常量以获得最佳拟合。

意识到障碍物(甚至人体)、反射、无线电噪声、phone 案例,甚至不同的 phone 模型都会影响结果。估计距离在 2-3 米时效果最佳。在更远的距离处,您会看到更高的错误率,因为信号电平随距离呈指数下降。