gpt4 book ai didi

android - Altbeacon - 在最短距离检测信标并在继续扫描前稍作停顿

转载 作者:可可西里 更新时间:2023-10-31 22:03:30 26 4
gpt4 key购买 nike

使用测距信标,从理论上讲,它工作正常。我有 3 个信标,一个简单的算法可以在最短距离内一次只检测一个信标,但由于 RSSI 值的连续波动,我最终会非常频繁地检测到其他信标。好吧,如果我可以在检测之间多“暂停”一点,那将不会那么有害。我的扫描周期是 setForegroundBetweenScanPeriod(0l)。现在的问题是,我应该增加 setForegroundBetweenScanPeriod() 来实现“暂停”属性还是使用某种计时器手动处理它?该算法是否正确检测到最短距离的一个信标?这是我的代码

protected void onCreate(Bundle savedInstanceState) {
...
beaconManager.setForegroundScanPeriod(1100l);
beaconManager.setForegroundBetweenScanPeriod(0l);

beaconManager.bind(this);
...
}


@Override
public void onBeaconServiceConnect(){
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {

//find the beacon with shortest distance
int idx = -1; //when no beacon is there
double min = Double.MAX_VALUE;

for (int i = 0; i < beaconArray.length; i++) {
double d = ((Beacon) beaconArray[i]).getDistance();
if (d < min) {
min = d;
idx = i; //1st beacon in the array
}
}


if (count == 0 && idx != -1) {
//show the data associated with the beacon
}

最佳答案

算法看起来是正确的。我不会更改扫描周期以使最近的信标更稳定,因为这会导致检测延迟等副作用。

我通常会做三件事来使最近的信标确定更加稳定:

  1. 将最近的信标设为类变量,并添加时间戳作为类变量,指示最近的信标何时发生变化。然后,您可以添加逻辑以拒绝更改最近的信标(如果它在过去 n 秒内已更改)。

  2. 添加切换到另一个信标所需的最小百分比距离变化作为最近的信标。 (例如,拒绝更改最近的信标,除非另一个信标距离至少 10%。)

  3. 增加距离估计的平均周期。默认情况下它是 20 秒,但您可以增加它以获得更多数据点并减少距离估计的噪音:RunningAverageRssiFilter.setSampleExpirationMilliseconds(30000l);

选项 1 和 3 的时间取决于您的用例。如果您需要快速更改估计最近的信标,您可能无法将这些时间设置得很大。

最后,您还应该确保您的信标尽可能频繁地传输。 10 Hz 的传输速率为距离估计提供的 RSSI 样本数量是 1 Hz 传输速率的 10 倍,因此距离估计更加平滑。

关于android - Altbeacon - 在最短距离检测信标并在继续扫描前稍作停顿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31088853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com