ios - Swift iBeacon 使用 accuracy 或 rssi 来保持距离

标签 ios swift xcode ibeacon beacon

我有一个有 6 个 iBeacon 的房间,如果其中一个 iBeacon 距离设备不到 2.5 米,我会调用一个 Action ,但这不是很好,因为经常有很大的干扰,导致错误的 Action 。 我的问题是,使用 rssi 值还是准确度对这些 Beacon 进行排序哪个更好?

在我用于排序/调用操作的代码下方:

if beacons.count > 0 {
        let sortedBeacons = beacons.sorted { (first, second) -> Bool in
            if first.accuracy == -1 || second.accuracy == -1 {
                return true
            }
            return first.accuracy < second.accuracy
        }
        let beacon = sortedBeacons[0]

        if beacon.major.intValue == helperMajorValue && beacon.accuracy < 2.5 {
            if beacon.accuracy != -1 {
                if triggeredMajor == 0 {
                    counter += 1
                } else if abs((helperMajorValue - triggeredMajor)) < 3 {
                    counter += 1
                }
            }
        } else {
            counter = 0
            helperMajorValue = beacon.major.intValue
        }
            if counter > 4 {
                counter = 0
                print("majorValue: \(beacon.major.intValue) distance: \(beacon.accuracy)")
                if beacon.accuracy < 2.5 {
                    startNavigation = true
                    majorValue = helperMajorValue
                    triggered = false
                }
            }

            if majorValue == 171 {
                //call action
            } else if majorValue == 170 {
                //call action
            } else if majorValue == 172 {
                //Call action
            }}

最佳答案

使用 CLBeaconrssiaccuracy 字段对信标进行排序的最大区别在于可变性或数量和平均间隔。

精度字段是大约 20 秒内的平均值,因此它实质上为您提供了设备在过去 20 秒内所处位置的估计距离。真正的优势是这个数字比 rssi 噪音小得多,但是有明显的滞后

rssi 字段平均超过 1 秒,因此它使用的数据点要少得多。虽然它有较少的时间延迟,但它也有很多更多的噪音。出于排序目的,如果使用 rssi,您会看到排序顺序跳跃得更多。

您必须根据@Duncan-C 在他的回答中描述的距离估计值,适本地设置您的期望值。但对于一些精度不重要的用例,它们可以很好地工作。

关于ios - Swift iBeacon 使用 accuracy 或 rssi 来保持距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41076392/

相关文章:

ios - 网速慢或服务器宕机时如何处理Alamofire请求?

iphone - 为什么 iphone SDK NSTimer 没有调用我告诉它的函数?

ios - 无法将模块 'Snapkit' 加载为 'Snapkit'

ios - UITableViewCell 选择背景颜色更改不起作用

swift - PFUser() 和处理密码成员

ios - Alamofire 4 在后台完成请求

xcode - 如何在 Xcode 中设置 Mac 应用程序的图标?

ios - AFNetworking 3.0 没有从响应中获取 json

objective-c - NSPredicate 键路径在右侧

ios - Apple Watch 的 url 图片