Измерьте расстояние до iBeacon с устройства Android
Я работаю над приложением, которое должно измерять расстояние до iBeacon. Когда пользователь находится на расстоянии (1 метр), пользователь должен быть уведомлен.
Он отлично работает на iOS, но на Android я получаю различные результаты. Я использую Estimote Android SDK (https://github.com/Estimote/Android-SDK ) и Android 4.3.
Ниже приведены измерения от Nexus 4 и Nexus 5. IBeacon находится на расстоянии одного метра от телефона (измерения согласуются с более образцы):
Nexus 4:
08-25 11:39:04.788: : Major: 27485 Accuracy: 0.36351308115918884 Power: -74 Rssi: -67
08-25 11:39:05.880: : Major: 27485 Accuracy: 0.31923897946172497 Power: -74 Rssi: -66
08-25 11:39:06.911: : Major: 27485 Accuracy: 0.31923897946172497 Power: -74 Rssi: -66
08-25 11:39:07.962: : Major: 27485 Accuracy: 0.41856988869951295 Power: -74 Rssi: -68
08-25 11:39:09.003: : Major: 27485 Accuracy: 0.31923897946172497 Power: -74 Rssi: -66
Nexus 5:
08-25 11:35:31.443: : Major: 27485 Accuracy: 0.14058401218665711 Power: -74 Rssi: -61
08-25 11:35:32.483: : Major: 27485 Accuracy: 0.14058401218665711 Power: -74 Rssi: -61
08-25 11:35:33.513: : Major: 27485 Accuracy: 0.17333602268971005 Power: -74 Rssi: -62
08-25 11:35:34.553: : Major: 27485 Accuracy: 0.17333602268971005 Power: -74 Rssi: -62
08-25 11:35:35.593: : Major: 27485 Accuracy: 0.17333602268971005 Power: -74 Rssi: -62
Как уже отмечалось, ни один из них не приближается к одному метру. У Nexus 4 самый близкий результат-0,42 метра. Точность взята из Utils.computeAccuracy в Estimote SDK.
Большая проблема заключается в том, что разные устройства дают разные результаты. Большинство устройств, которые я пробовал (Nexus 4, Nexus 7, HTC One Mine), дают результаты, аналогичные Nexus 4. Однако Nexus 5 показывает, что он намного ближе, чем другие устройства.
Есть ли способ заставить все устройства давать (близко к) похожие результаты? Альтернативный способ узнать, как измеряют различные устройства (таким образом, алгоритм может компенсировать различные результаты)
Также кто-нибудь нашел способ повысить частоту дискретизации на Android Bluetooth LE?
Я действительно хотел бы предотвратить использование некоторой калибровки, когда пользователь запускает приложение.
Я должен использовать iBeacons (customer demand), но другая библиотека может быть вариантом, если это поможет решить проблему.
2 ответа:
Открытый исходный кодБиблиотека Android Beacon (преемник библиотеки, упомянутой @tar, содержит фильтр, который сохраняет 20-секундное среднее значение измерений RSSI, отбрасывая верхние и нижние 10 процентов выборок. Это дает оценку расстояния, которая является довольно стабильной, с компромиссом, что она отстает во времени, когда пользователь перемещается относительно маяка. Тем не менее, это похоже на поведение оценок устройств iOS.
Другая проблема с Android-устройствами заключается в том, что каждая модель имеет различную антенну Bluetooth с различным коэффициентом усиления. Это означает, что средний уровень принимаемого сигнала на двух различных моделях устройств в одном и том же положении относительно маяка будет отличаться. Я могу подтвердить из моего тестирования, что Nexus 4 и Nexus 5 имеют очень разные антенные усиления.
Формула в библиотеке Android Beacon предназначена для Nexus 5, но это открытый исходный код, так что вы можете настроить код для любой модели устройства, которую вы хотите. Чтобы сделать новый формула для другого прибора, вам нужно сделать несколько средних измерений RSSI 60 сек на различных расстояниях (0.5 м, 1м, 2м, 3м,... 10м, 12М ... 20m), затем выполните расчет наилучшего соответствия.Будущий план для библиотеки с открытым исходным кодом состоит в том, чтобы иметь другую формулу, встроенную для наиболее распространенных моделей устройств, и использовать формулу расстояния, используемую на основе проверки устройства. Это большая работа, поэтому, если вы можете помочь добровольцу, пожалуйста, нажмите на мою фотографию, чтобы связаться со мной!
Ну, для начала расстояние-это оценка, и никакой SDK не даст вам последовательных ответов, потому что RSSI зависит от стольких факторов, которые находятся вне его контроля. Если вам нужен какой-то материал для чтения, Шейн Рассел опубликовал "Полутехническое описание работы с iBeacons".
Radius Networks раньше имела библиотеку с открытым исходным кодом для Android и iOS. Возможно, вы сможете вежливо попросить их об этом, хотя они сняли его в конце этого лета. Кроме того, они похоже, вы сделали заменуAltBeacon library , которая может удовлетворить ваши потребности. Плюс, быть гитхабом...этот репо по-прежнему содержит весь код, который он использовал, поэтому не стесняйтесь просматривать его и брать то, что вам нужно.
Что касается вашего беспокойства, что измерения находятся так далеко от 1 метра, это может быть связано с тем, что маяк не калибруется. Посмотрите документацию по вашему оборудованию, и вы почти наверняка найдете способ ввести значение калибровки. Это значение передается во что угодно прослушивание, чтобы эти устройства могли оценить расстояние.
Обратите внимание, что некоторые устройства iBeacon имеют настраиваемый уровень мощности, поэтому, если вы измените его, вам также потребуется его перенастроить.