В Android, как улучшить стабильность обнаружения нескольких маяков? Я использую маяки Gimbal для внутреннего позиционирования. Подходит ли BLE для доступа к данным о местоположении в помещении?
Как повысить стабильность и точность данных с помощью маяка Gimbal для позиционирования в помещении?
Ответы (2)
Я много работал над этим, так как разместил маяки в коридоре, полном конференц-залов, и все они находились в непосредственной близости.
Во-первых, рекомендую разместить маяки на потолке. Сигнал должен передаваться под углом вниз. Это немного снижает помехи. Имейте в виду, что это не может быть решением для каждой комнаты, но в моей ситуации с комнатами, расположенными близко друг к другу, это значительно помогло.
Затем обязательно используйте хороший вариант для сглаживания сигнала. Gimbal SDK работает над концепцией прибытия и отправления. Эти события будут запускаться только в том случае, если сигнал находится в пределах определенного порога. Сглаживание сигнала предотвратит ситуации, когда один маяк сообщает о сигнале -56, а затем в следующую секунду перескакивает на -75. Он использует алгоритм усреднения, который сглаживает сигналы, чтобы предотвратить такой огромный отчетный разрыв. Это предотвращает ложные прибытия и отправления из-за огромных всплесков в сообщаемых сигналах.
Наконец, настройте сигналы прибытия и отправления, параметры сглаживания сигналов и размещение маяков, чтобы найти то, что работает. К сожалению, не существует единого решения, подходящего для всех, и вам придется проводить постоянные опросы на сайте, чтобы убедиться, что ваши настройки работают так, как задумано.
Если вы хотите узнать больше о Gimbal SDK с Proximity для Android, я подробно рассказал об этом. Вы можете просмотреть эту статью здесь. Однако, если вы используете последний SDK от Gimbal, они обновили свой API и удалили VisitManager. Таким образом, моя статья актуальна только для их SDK до версии 1.33. В будущем я напишу новую статью об их обновленном SDK, над которым активно работаю сейчас.
На мой взгляд, ответ таков: да, BLE подходит для внутренней локализации.
Я бы рекомендовал использовать фильтр низких частот, чтобы сгладить показания расстояния/мощности сигнала. Я могу придумать 2 способа сделать это:
- Простой: скользящее среднее. Просто усредните последние 3/10/30 показаний. Посмотрите, что работает лучше всего.
Or:
Более сложный, но более настраиваемый: фильтр 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 значений и посмотрите, работает ли это для вас:
Максимальное расстояние, на которое мы смотрим [м], RC (constant)
:RC
1: 0.212212849
,
3: 0.636638548
,
10: 2.122128495
,
30: 6.366385485
,
60: 12.73277097
Удачи