Возможно ли как-то через bluetooth определить, на каком расстоянии (или направлении) находится другое устройство с bluetooth? Т.е., может, через силу сигнала или как-то еще... Я имею в виду программно, например, через приложение на android. Почитал про android.bluetooth, но ничего интересного не нашел.
Ответ
Теоретически можно, но на практике будет нужно побегать (в прямом смысле слова).
Итак, датчик блютуса в телефоне один, и он ненаправленный. То есть азимут он определить не может. Узнать уровень сигнала можно (есть пример кода), но как перевести уровень в метры для неизвестного сигнала... а никак. Потому как передатчики у разных телефонов разной мощности (можно, конечно, по mac адресу адаптера определить девайс и внести поправочный коэффициент, но на всех девайсов не напасешся конфигов). Во-вторых, сам уровень может "прыгать".
Но если сильно очень хочется, то можно сделать. Нужно измерить уровень с нескольких точек и сделать "триангуляцию". Очень сильно может помочь, если есть несколько датчиков в заведомо известных местах.
Использовать gps для определения текущих координат вряд ли получится, так как точность gps обычно 5-10 метров (а в помещении и то ниже. Гугл во всю работает над проектом bluepoint, который позволяет определить положение в помещении по wifi), а для bluetooth, который в телефонах, максимальный радиус досягаемости также около 10-15 метров (да, я знаю, что некоторые девайсы могут брать на 100 метров, но, насколько я знаю, в телефонах такое не применяется).
Если стоит задача "найти устройство", а не определит координаты, то это сделать заметно проще. Пользователю предлагается просто идти прямо. Программа следит за уровнем сигнала. Пока он повышается - значит идем правильно, если начал понижаться - удаляемся. В этот момент предлагаем повернуть на 90 градусов вправо или влево (а акселерометр и гироскоп помогут определить пройденное расстояние и направление).
Как только пользователь пройдет немного, сразу станет понятно, где девайс.
Возможны такие варианты:
уровень сигнала увеличивался, потом уменьшился. После поворота снова увеличивался и уменьшился. Значит девайс внутри угла. По двум максимумам можно провести перпенидикуляры и пересечение даст положение;
уровень сигнала увеличивался, потом уменьшился. После поворота уменьшается. Значит повернули не в ту сторону. Предлагаем развернуться на 180 градусов; :)
уровень сигнала изначально уменьшался - развернуться на 180 градусов и попробовать с самого начала.
Подведем больше математики и физики. Известно, что уровень сигнала падает обратно пропорционально квадрату расстояния. Уровень сигнала (rssi) обычно измеряется в децибелах, а это просто логарифм умноженный на константу. Логарифм квадрата - это просто 2 раза логарифм расстояния. Поэтому уровень сигнала будет уменьшаться по логарифму расстояния. Измеряя в процессе ходьбы уровень и полагая, что он уменьшается по логарифму и окружностями (более-менее), можно сделать качественный поиск.
Комментариев нет:
Отправить комментарий