如何提高Android中多个信标检测的稳定性?我正在使用Gimbal信标进行室内定位。BLE是否适用于室内位置数据访问?
我在一个会议室走廊里放置了许多信标,因此我对此进行了广泛的研究。
首先,我建议将信标放在天花板上。信号应该向下角度广播,这可以大大减少干扰。请记住,这可能不是每个房间的解决方案,但在我接近彼此的房间的情况下,这有很大帮助。
其次,请确保使用信号平滑的良好选项。Gimbal SDK基于到达和离开的概念工作。只有当信号处于某个阈值范围内时,才会触发这些事件。信号平滑将防止出现一种情况,即一个信标报告的信号为-56,然后在下一秒跳到-75。它使用一种平均算法来平滑信号,以防止出现如此巨大的报告间隙。这可以防止由于报告的信号出现巨大峰值而导致的虚假到达和离开。
最后,请调整您的到达和离开信号、信号平滑选项和信标位置,找到适合您的解决方案。不幸的是,并没有一种通用的解决方案,您将不断进行现场调查,以确保您的调整达到预期的效果。
如果您想了解有关Android上带有Proximity的Gimbal SDK的更多信息,我已经对此进行了深入探讨。您可以在这里查看该文章。然而,如果您正在使用来自Gimbal的最新SDK,则他们已更新其API并删除了VisitManager。因此,我的文章仅适用于他们的SDK版本v1.33及以下。我将来会写一篇关于他们更新后的SDK的新文章,我现在正在积极与之合作。更复杂但更可配置的算法是RC滤波器。该算法如下:
// 对于每个来自BLE的新读数,执行以下操作:
// fc = 截止频率[Hz];即:
// 您想要检测BLE何时从接收器进入和离开的频率
// 这取决于人员的范围和速度(见下表)
var real fc := 0.21 // <-- 配置此项!
// 一个常数[-],也是pi = 3.1415
var real RC := 1 / (2*pi + fc) // <-- 或者从下表中配置此项!
// dt = 两个连续读数之间的时间[s]
var real dt := 1 // <-- 可能需要在每次读数时更新!
// 一个常数
var real α := dt / (RC + dt)
// 基于以下内容的当前距离估计值:
// 当前读数x[i]和先前估计值y[i-1]
y[i] := α * x[i] + (1-α) * y[i-1] // <-- 结果!!!
我已经计算了一个RC
(常数)的表格;我认为它取决于BLE的范围,因为如果一个人在那个范围内走来走去,进出的频率会更高,如果距离较小,则频率会更高。尝试这些5个值,看看是否适用:
我们考虑的最大距离[m],RC(常数)
:RC
1:0.212212849
,
3:0.636638548
,
10:2.122128495
,
30:6.366385485
,
60:12.73277097
祝好运