【问题标题】:Beacon - StartRanging and stopRanging depend on the Beacon ProximityBeacon - StartRanging 和 stopRanging 取决于 Beacon Proximity
【发布时间】:2016-09-01 07:56:08
【问题描述】:

谁能帮我解决这个问题。

我当前的信标设置:

信标设备 - Estimote。 UUID - 两个信标相同。

  1. 我已将每个信标放置在两个房间中,房间之间相距 20-30 米
  2. 当我进入特定房间时(检查该房间的主要和次要是否确实属于该房间),我正在点击网络服务并更新某些内容(当接近或立即时) 3.它还会访问另一个 Web 服务并更新某些内容(当距离很远且未知时)。

当前算法的问题: 1. 当我进入房间 1 时,如果它在附近或立即,它会点击 webservice1。发生这种情况时,room2 的距离会很远或未知,然后 webservice2 再次出现,并且波动很大。有时当我在房间 1 时,房间 2 信标接近显示为近。我不会发生这种情况

新方法和问题

  1. 我想监视特定区域,例如当我在 5 米远的地方时说 room1,并且只有在接近或立即接近时才开始测距信标。当距离较远或未知或距离我超过 5 米时停止测距
  2. 当我移动到房间 2 附近(5 米外)并且如果房间 2 接近或立即,它应该开始测距房间 2 并停止测距房间 1
  3. 我想有明确的方法或方法来编写算法来实现上述目标。计算可以使用邻近度或使用其他一些想法(例如 RSSI 和邻近度的组合或其他)

如果你能用例子详细解释我如何实现新方法,或者你可以告诉我是否有其他更好的方法,那就太好了,但请用代码解释。

我最担心的是,当我在房间 1 或距离房间 1 仅 5 米远时,它不应该在房间 2 的信标范围内,反之亦然。

【问题讨论】:

    标签: ios ibeacon use-case estimote


    【解决方案1】:

    您是否考虑过将每个信标放置在自己的区域中?因此,房间 1 将是一个区域,而房间 2 将是另一个区域。

    之后我会使用locationManager:didEnterRegion:locationManager:didExitRegion:。在这些范围内,您可以根据您所在的房间开始和停止两个信标区域的测距。

    请注意,Apple Docs 声明:

    在 iOS 模拟器或设备上测试您的区域监控代码时,请意识到区域事件可能不会在跨越区域边界后立即发生。为了防止虚假通知,iOS 在满足某些阈值条件之前不会发送区域通知。具体来说,用户的位置必须越过区域边界,离开边界最小距离,并在该最小距离上保持至少 20 秒,然后才会报告通知。

    具体的阈值距离由硬件和 目前可用的定位技术。例如, 如果禁用 Wi-Fi,区域监控会显着减少 准确的。但是,出于测试目的,您可以假设 最短距离约为 200 米。

    示例:

    - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
    {
        if (region.identifier == YOUR ROOM 1 IDENTIFIER)
        {
           //Start ranging room 1
        }
        else
        {
           //Start ranging room 2
        }
    }
    
    - (void)locationManager:(CLLocationManager *)manager
        didExitRegion:(CLRegion *)region
    {
        if (region.identifier == YOUR ROOM 1 IDENTIFIER)
        {
             //Stop ranging room 1
        }
        else
        {
             //Stop ranging room 2
        }
    }
    

    【讨论】:

    • 我没有尝试过使用标识符属性。我会尽力让你知道。正如我之前所说,两个房间很近(彼此相距约 20-30)。如果我在不确定接近度或其他范围决定因素的情况下使用标识符,您是否觉得完全可以?
    • @user3310076 是的,距离不重要。例如,当您停止对房间 1 的测距并开始对房间 2 进行测距时,设备将仅在房间 2 中寻找信标,房间 1 的信标将被忽略,直到您开始对它们进行测距。
    • 我快到了。我尝试使用标识符,当我走向房间 1 时,它开始测距房间 1 中的信标,当我离开房间 1 并走向房间 2 时,它开始测距房间 2 中的信标。但问题是,当我从房间 2 回到房间 1 时,它没有识别区域。由于它没有识别区域,因此它没有测距信标。
    • 谢谢。我尝试了进入和退出区域的方法,因为两个房间都只有 20-30 米远,当我靠近房间 1 或房间 2 时,两个房间都调用进入区域,当我靠近房间时,两个房间都调用退出区域从房间 1 或房间 2 移动 > 50 米。我不希望这种情况发生。我想要的输出是,当我靠近房间 1 或房间 2(比如 5 米远)时,我需要为特定区域设置信标范围并确定它的接近度/rssi/准确度/或任何更好的计算因子,然后点击网络服务.
    • @user3310076 我认为您要实现的目标很复杂,目前无法确定设备与特定区域的距离。我唯一使用的是proximity 属性来检查我是否立即越过信标。您是否将 CLLocationManager 的 desiredAccuracy 设置为 kCLLocationAccuracyBest
    【解决方案2】:

    核心问题是在不适当的时间向服务器发送信息。真的跟开始测距没关系。

    当接近度相对较近时,您无法开始测距 - 您必须进行测距以确定接近度。

    我建议您不要使用开始和停止测距的算法,而是始终将其保持打开状态,并构建一个过滤器来决定何时进行服务器调用。这是我建议的逻辑的起点:

    如果满足以下所有条件,则调用服务器:

    • beacon.accuracy
    • 检测到的所有其他信标的 beacon.accuracy > 3
    • 最近没有为此信标进行任何服务器调用

    编辑:您可以通过将信标发射器功率设置得尽可能高以最大限度地提高信噪比来减少准确度读数的波动。

    【讨论】:

    • 好答案。我建议开始和停止测距的原因是因为@user3310076 的设备说他在房间 2 的信标附近,而他不在。因此,如果他在另一个区域中停止对 2 号房间的信标进行测距,则此问题将不再发生。
    • 另外,apple docs 表示不要使用 accuracy 来确定信标的位置,因为这些值可能会因射频干扰而波动。
    • 是的,我尝试过准确和接近,因为波动很大,我想要更好的方法。
    • 在根据检测到蓝牙设备来决定是否采取行动时,您基本上有三种选择(1)如果看到信标就采取行动,无论信号强度如何(2)采取行动如果您看到一个信标并且其信号强度高于阈值(准确度、接近度和 RSSI 都是从信号强度得出的指标)或 (3) 基于来自多个信标的组合选项 2 的逻辑。您无法更改物理定律,因此如我的回答中所建议的那样,使用第三个选项的某些变体确实是您能做的最好的事情。
    • 我正在尝试第三种方法。准确率 + 特定时期的平均准确率 :) 感谢您迄今为止的意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多