didRangeBeaconsInRegion 代表继续调用 iBeacon iPhone sdk
Posted
技术标签:
【中文标题】didRangeBeaconsInRegion 代表继续调用 iBeacon iPhone sdk【英文标题】:didRangeBeaconsInRegion delegate keep on calling iBeacon iPhone sdk 【发布时间】:2013-10-02 08:03:32 【问题描述】:我正在使用本教程iBeacons 在 iPad4 设备中运行此代码作为信标,将 iphone5 作为接收器。我注意到 SDK 有两件事
1) 即使我在同一个位置,委托方法(didRaneBeaconsInRegion) 也经常以不同的距离被调用。基本上,即使用户处于同一位置,它也不会变得稳定。
2) 当我带着设备移动时,信标和接收器之间的距离经常显示错误的值。我需要知道我是否可以依赖距离或完全依赖接近度?
我将非常感谢任何帮助。
【问题讨论】:
【参考方案1】:听起来您在谈论“准确性”领域的不稳定性。尽管名称如此,但这是对 iBeacon 与设备之间距离的估计,以米为单位。
如您所见,这个读数有很多噪音。这是因为它是基于测得的蓝牙信号强度 (rssi),它本质上是不稳定的。正如蒂莫的回应所说。 Apple 的 CLBeacon 类参考建议不要将此字段作为绝对距离测量值。
“接近度”字段不会告诉您精度字段不会告诉您的任何信息。它只是将准确度值放入四个存储桶之一(立即、近、远、未知),因此它不会发生太大变化。但有时您仍会看到它在两个相邻的邻近度值之间来回变化。
【讨论】:
【参考方案2】:proximity:此属性中的值给出了到信标的相对距离的一般意义。使用它来快速识别离用户较近而不是较远的信标。
accuracy:表示 1 sigma 水平精度,以米为单位。使用此属性来区分具有相同邻近度值的信标。不要用它来确定信标的精确位置。精度值可能会因射频干扰而波动。
【讨论】:
请添加参考,说明您引用的来源。【参考方案3】:回答你的问题:
1) 信标范围完全基于从信标观察到的 RSSI 值。准确度属性所看到的距离是感知距离,而不是实际距离。这在很大程度上取决于广播电台的强度。保持稳定范围的最简单方法是 - 每次调用 didRangeBeaconsInRegion 时的 RSSI 值的滑动平均/移动平均 (http://en.wikipedia.org/wiki/Moving_average)。 另一种很好的方法是在 Apple 的 Airlocate 示例的校准过程中描述:
// Measured power is an average of the mid-80th percentile of RSSI samples.
NSUInteger outlierPadding = allBeacons.count * 0.1f;
[allBeacons sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"rssi" ascending:YES]]];
NSArray *sample = [allBeacons subarrayWithRange:NSMakeRange(outlierPadding, allBeacons.count - (outlierPadding * 2))];
measuredPower = [[sample valueForKeyPath:@"@avg.rssi"] integerValue];
2) 当我带着设备移动时,信标和接收器之间的距离经常显示错误的值。我需要知道我是否可以依赖距离或完全依赖接近度? 同样,您不能依赖任何这些。精度是观察到的距离,接近度是根据测量的Power属性确定的,该属性不过是 1m 距离的平均 RSSI。
【讨论】:
以上是关于didRangeBeaconsInRegion 代表继续调用 iBeacon iPhone sdk的主要内容,如果未能解决你的问题,请参考以下文章