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