2014-01-24 3 views
4

Я довольно новичок в iBeacon, но я потратил этот день, пытаясь получить информацию и работающее приложение для Android с iBeacon.колебания колебания диапазона ibeacon Radius Networks

Я наткнулся на Android iBeacon Library samples и дал ему попробовать. Я использовал последний файл aar (0.7.3) и в основном копировал/вставлял свои примеры в новый проект. Я создал маяк, используя iPad с AirLocate (скомпилированный из кода Apple от Dev Center) и запустил код.

Моя проблема - диапазон, колеблющийся все время без логики. Например, телефон (в данном случае, Nexus 5, оригинальный диск, без модификации), расположенного в полуметре от IPad дает мне следующие меры:

  • 0,0оГО
  • 0,03 М
  • 0,07 М
  • 0.48m
  • 0,01М
  • 0.02m

и т. д.

Когда я использую другой iPad с AirLocate, он дает более стабильную и реалистичную меру. Исключая маяк как источник проблемы.

Я проверил тест Nexus 7 2013 (оригинальный ролик, не был изменен), и я получил ту же проблему. Я прочитал, что Wi-Fi может вызвать проблемы, поэтому я отключил его, но он все тот же. У меня также такая же проблема с приложением Radius Networks в Play Маркете: iBeacon Locate

Мне было интересно, есть ли у кого-нибудь проблемы с этой библиотекой? Есть ли что-то, что я могу сделать, чтобы помочь устранить эту проблему? Знаете ли вы другую библиотеку, которую я могу использовать, которая не вызовет такой проблемы?

Любая помощь ценится. Заранее спасибо.

ответ

12

Большая часть вариации, которую вы видите, вызвана ограничением в том, как Android позволяет измерять уровень сигнала доступа от Bluetooth LE. К сожалению, об этом не обойтись без изменений в Android.

Как в iOS CoreLocation, так и в iBeacon Library, оценка расстояния - это только оценка, а колебания с шумом при измерении уровня сигнала заставляют оценки отскакивать.

Алгоритм в библиотеке iBeacon для Android не такой же, как в iOS CoreLocation, поскольку реализация iOS CoreLocation является закрытым источником. Предполагается, что они ведут себя аналогичным образом. Android IBeacon Библиотека основана на 10-секундном беге в среднем 80 измерений процентилей (например, верхние и нижние 10-измерения процентильных выбрасываются в среднем.) Вы можете увидеть детали расчета здесь:

protected static double calculateAccuracy(int txPower, double rssi) { 
    if (rssi == 0) { 
    return -1.0; // if we cannot determine accuracy, return -1. 
    } 

    double ratio = rssi*1.0/txPower; 
    if (ratio < 1.0) { 
    return Math.pow(ratio,10); 
    } 
    else { 
    double accuracy = (0.89976)*Math.pow(ratio,7.7095) + 0.111;  
    return accuracy; 
    } 
} 

На Android API сканирования Bluetooth LE допускает только одно измерение уровня сигнала на сканирование. В iOS можно получить другое измерение для каждого рекламного вещания. По умолчанию библиотека iBeacon для Android выполняет одно сканирование bluetooth каждые 1,1 секунды, когда оно находится на переднем плане, поэтому позволяет выполнять одно измерение каждые 1,1 секунды.Поэтому, если у вас есть iBeacon, который передает 30 раз в секунду (как iOS-устройства, действующие как iBeacons), iOS сможет получить 300 отсчетов за 10 секунд, а только для Android 9. Это объясняет, почему оценка имеет более высокий уровень шума на Android. И снова очень мало того, что можно сделать без него, без изменения операционной системы.

В зависимости от вашего варианта использования вы можете уменьшить шум в оценке расстояния на Android, выполнив собственный расчет, который включает в себя больше образцов в течение более длительного периода времени. Это было бы целесообразно только в том случае, если вашему прецеденту не нужны быстрые обновления в оценке. Если вас это интересует, вы можете open a feature request в библиотеке с открытым исходным кодом.

+0

Благодарим вас за ответ, и это немного лучше говорит о том, что происходит. Тем не менее, когда я иду дальше с помощью своих устройств (скажем, на расстоянии 10 м), у меня есть очень большие вариации от 1 м до 20 м. Это нормально? Должен ли я иметь такую ​​важную вариацию? –

+1

_Sorry для двойного комментирования этого, я не могу отредактировать свой последний комментарий._ Для вашей информации здесь приведен график точности с течением времени, я стоял с моим Nexus 5, в 3 метрах от мини-радиовещания ipad в качестве ibeacon. http://imgur.com/dG7NYi2 –

+0

Это нормально для вариации с увеличением расстояния. График действительно выглядит немного больше, чем я обычно вижу на расстоянии 3 м, но это может быть вызвано отражениями в вашем месте тестирования или другими факторами. Если вы хотите еще раз просверлить это, также запишите rssi рядом с расстоянием от 'iBeacon.getRssi()'. – davidgyoung

Смежные вопросы