在android中如何提高多重信标检测的稳定性?我正在使用Gimbal信标进行室内定位。BLE是否适合室内位置数据访问?
2 回答
我在这方面进行了广泛的工作,因为我在一个满是会议室的走廊里放置了信标,所有这些都在附近。
首先,我建议将信标放在天花板上。信号应该以向下的角度广播。这大大减少了干扰。请记住,这可能不是每个房间的解决方案,但在我的房间彼此靠近的情况下,这有很大帮助。
接下来,一定要使用一个好的信号平滑选项。Gimbal SDK 适用于到达和离开的概念。仅当信号在某个阈值内时才会触发这些事件。信号平滑将防止一个信标报告的信号为 -56,然后在下一秒跳到 -75。它使用一种平均算法来平滑信号,以防止出现如此巨大的报告差距。这可以防止由于报告信号中的巨大峰值而导致错误的到达和离开。
最后,调整您的到达和离开信号、信号平滑选项和信标位置,以找到有效的方法。不幸的是,没有万能的解决方案,您必须进行持续的现场调查,以确保您的调整按预期方式进行。
如果您想了解更多关于带有 Proximity for Android 的 Gimbal SDK,我已经写了一篇关于这个主题的深入研究。您可以在此处查看该文章。但是,如果您使用的是来自 Gimbal 的最新 SDK,他们已经更新了他们的 API 并删除了 VisitManager。因此,我的文章只与他们的 SDK 相关,直到 v1.33。我将来会写一篇关于他们更新的 SDK 的新文章,我现在正在积极使用它。
在我看来,答案是:是的,BLE适合室内定位。
我建议使用低通滤波器来平滑距离/信号强度读数。我可以想到两种方法来做到这一点:
- 简单:运行平均。只需平均最后 3/10/30 的读数。看看什么效果最好。
或者:
更复杂但更可配置:RC 过滤器。算法是这样的:
// FOR EACH new reading from the BLE do this: // fc = cutoff frequency [Hz]; i.e.: // how frequent do you want to detect the BLE coming and parting from the receptor // this depends on the range and speed of people (see table below) var real fc := 0.21 // <-- configure this! // a constant [-], also pi = 3.1415 var real RC := 1 / (2*pi + fc) // <-- OR configure this from the table below! // dt = time between two consecutive readings [s] var real dt := 1 // <-- might need updating at each reading ! // a constant var real α := dt / (RC + dt) //the current estimate of the distance that is based on: // the current reading x[i] and the previous estimate y[i-1] y[i] := α * x[i] + (1-α) * y[i-1] // <-- result !!!!
RC
我已经为(常量)计算了一个表;在我看来,这取决于 BLE 的范围,因为如果一个人在那个范围内进出,如果距离更小,进出的频率就会更高。试试这 5 个值,看看什么/是否适合你:
我们看到的最大距离 [m], RC (constant)
:RC
1: 0.212212849
, 3: 0.636638548
, 10: 2.122128495
, 30: 6.366385485
, 60:12.73277097
祝你好运