在安卓中如何提高多路信标检测的稳定性?我正在使用云台信标进行室内定位.BLE是否适合室内位置数据访问?
我已经对此进行了广泛的研究,因为我将信标放置在充满会议室的走廊上, 所有这些都近在咫尺.
首先, 我建议将信标放在天花板上.信号应向下广播。这大大减少了干扰。请记住,这可能不是每个房间的解决方案,但在我房间彼此靠近的情况下,这有很大帮助。
接下来,请务必使用一个好的信号平滑选项。云台 SDK 适用于到达和离开的概念。仅当信号在某个阈值内时,才会触发这些事件。信号平滑将防止一个信标报告信号为 -56 然后下一秒跳到 -75 的情况.它使用平均算法来平滑信号以防止如此巨大的报告差距。这可以防止由于报告信号的巨大峰值而导致的错误到达和离开。
最后, 调整您的到达和离开信号, 信号平滑选项, 和信标放置以找到有效的方法.不幸的是,没有一个放之四海而皆准的解决方案,您必须执行持续的现场调查以确保您的调整按预期方式工作。
如果你想了解更多关于GimbalSDK和Proximity for Android的信息,我已经写了一篇关于这个主题的深入探讨。您可以在此处查看该文章。但是,如果您使用的是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
祝你好运