• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Позиционирование в сетях Wi-Fi

kharlashkin

New member
Добрый день всем.
После довольно довольно успешной реализации на ESP8266 отслеживания вращения твердых тел в пространстве и передачи данных по MQTT протоколу на ПК встал вопрос отслеживать позиционирование носителя датчиков в помещении. У меня есть реализация перемещения через определение вектора от акселерометра, но точность заставляет желать лучшего - раз, и учитывая девиацию по магнитометру - невозможно просчитать точно перемещение. Для общего понимания как вообще может работать данная технология рекомендую для начала эту статью и гугль.
Сходу на форуме не нашел довольно полного объяснения что к чему, сам сейчас ковыряю математику по трилатерации, мультилатерации и триангуляции. Теперь собственно пару вопросов:
  • Promiscuous mode - кто копал более глубоко чем установка готовых прошивок? Может кто соизволит более подробно советом помочь, чем ткнуть в документацию.
  • Wifi.monitor - то же самое как и выше или нет.
  • Time Of Flight - есть на родном форуме упоминание что вроде как разработчики собираются добавить данный функционал. И я где-то встречал упоминание что для ESP32 для протокола ESPNOW и так же есть наработки здесь.
В общем, тема интересная - предлагаю обсуждать и пробовать.
 

Victor

Administrator
Команда форума
Promiscuous mode для 8266 не очень интересен для этих целей: RSSI сильно плавает (часто в разы) и не отражает реальную силу сигнала - максимум это можно отключать клиентов от роутера (DeAuth пакеты), анонсировать несуществующие WiFi сети с веселыми названиями (рассылка beacon каждые 100мс) или прикидываться какими-то популярными открытыми сетями (те же беконы). TOA - Time of arrival решений на 8266 даже с модулем GPS также не сделать в силу низкой производительности и одного ядра (поддержание низкоуровневых операций WiFi и точный расчет времени происходят в одном и не самом быстром потоке). Посмотрите ESP32, может там что-то получится, но я сам не пробовал. В вашей ссылке на форум вопросы от заинтересованных пользователей, оставшиеся без ответа производителя.
 

nikolz

Well-known member
Добрый день всем.
После довольно довольно успешной реализации на ESP8266 отслеживания вращения твердых тел в пространстве и передачи данных по MQTT протоколу на ПК встал вопрос отслеживать позиционирование носителя датчиков в помещении. У меня есть реализация перемещения через определение вектора от акселерометра, но точность заставляет желать лучшего - раз, и учитывая девиацию по магнитометру - невозможно просчитать точно перемещение. Для общего понимания как вообще может работать данная технология рекомендую для начала эту статью и гугль.
Сходу на форуме не нашел довольно полного объяснения что к чему, сам сейчас ковыряю математику по трилатерации, мультилатерации и триангуляции. Теперь собственно пару вопросов:
  • Promiscuous mode - кто копал более глубоко чем установка готовых прошивок? Может кто соизволит более подробно советом помочь, чем ткнуть в документацию.
  • Wifi.monitor - то же самое как и выше или нет.
  • Time Of Flight - есть на родном форуме упоминание что вроде как разработчики собираются добавить данный функционал. И я где-то встречал упоминание что для ESP32 для протокола ESPNOW и так же есть наработки здесь.
В общем, тема интересная - предлагаю обсуждать и пробовать.
Замечание к Вашей статье:
Вы слишком усложнили решение, так как ошиблись с определением времени опроса датчика.
Согласно документации, минимальная задержка составляет 0.1ms, т е 200 раз меньше, чем Вы посчитали.
-------------------------------
Кроме того, все модули датчиков можно по SPI или I2C подключить к одной ESP8266.
---------------------------------
В итоге набор железа для костюма с 16 датчиками обойдется всего в 50 долларов.
------------------------------
Используя передачу данных по ESP-NOW либо UDP получите задержку не более 0.01 сек, что эквивалентно 100 кадрам в секунду.
 

nikolz

Well-known member
но в Вашей разработке возможно лучшим решением будет применение BLE,
либо внутренний протокол NRF, который подобен ESP-NOW .
 

kharlashkin

New member
RSSI сильно плавает (часто в разы) и не отражает реальную силу сигнала
Спасибо за замечание, я подумывал сделать двустороннюю связь - имеется ввиду следующие манипуляции (хочу услышать критику):
  • ESP в определенном периоде собирает пакеты и считает среднее значение RSSI.
  • Переключается в режим клиента, цепляется к существующей сети и шлет полученные за период данные, не только по точкам доступа но и по соседним ESP-шкам.
  • Со стороны нескольких точек доступа эфир также постоянно мониторится на предмет уровня RSSI клиентов.
  • В итоге у нас будет два взгляда на уровень сигнала - от ESP и от точки доступа.
Кто то замерял может сколько времени нужно ESP для переключения между режимом клиента и мониторинга, я может попробую на днях подобный эксперимент провести. Может кто-то пробовал привести RSSI к корректным показателям на ESP или подскажет правильный фильтр для усреднения показателей.
Замечание к Вашей статье:
Ответил на хабре, повторю и здесь:
Дело не во времени опроса — дело во времени передачи буфера размером 48 Байт 50 раз в секунду по шине I2C.
Датчики MPU-9250 имеют один неизменяемый адрес и все датчики нужно было подключать через мультиплексор, я об этом писал в статье.
Хотелось избавиться от проводов, как в Perception Neuron — что сильно упрощает снятие/надевание костюма.
 

nikolz

Well-known member
Добрый день всем.
После довольно довольно успешной реализации на ESP8266 отслеживания вращения твердых тел в пространстве и передачи данных по MQTT протоколу на ПК встал вопрос отслеживать позиционирование носителя датчиков в помещении. У меня есть реализация перемещения через определение вектора от акселерометра, но точность заставляет желать лучшего - раз, и учитывая девиацию по магнитометру - невозможно просчитать точно перемещение. Для общего понимания как вообще может работать данная технология рекомендую для начала эту статью и гугль.
Сходу на форуме не нашел довольно полного объяснения что к чему, сам сейчас ковыряю математику по трилатерации, мультилатерации и триангуляции. Теперь собственно пару вопросов:
  • Promiscuous mode - кто копал более глубоко чем установка готовых прошивок? Может кто соизволит более подробно советом помочь, чем ткнуть в документацию.
  • Wifi.monitor - то же самое как и выше или нет.
  • Time Of Flight - есть на родном форуме упоминание что вроде как разработчики собираются добавить данный функционал. И я где-то встречал упоминание что для ESP32 для протокола ESPNOW и так же есть наработки здесь.
В общем, тема интересная - предлагаю обсуждать и пробовать.
Полагаю что Вы интересуетесь определением местоположения объекта в пределах одной комнаты.
Если так, то Wifi - это как гланды смотреть через задницу.
-----------------
Приведу пример.
Встаньте в середину комнаты. А потом сделайте шаг в сторону.
Теперь подумайте : Что изменилось в параметрах сигнала Wifi , который принимает Ваш смартфон в этих двух точках, расстояние между которыми не более 1 метр и они находятся в открытом пространстве?
Мощность сигнала? возможно но это микроватты и вы это не измерите.
Задержка сигнала? возможно но это наносекунды и Вы это не измерите.
------------------
В сотовой связи речь идет о выборе ближайшей вышки. При этом разность расстояний составляет сотни метров и более
-------------------
Если в помещении по WiFi - то это различные комнаты или этажи
 

kharlashkin

New member
1) шина I2C как минимум 400 кГц это 40 000 байт в секунду, а у вас всего 2500 байт в секунду.
2) есть еще у MPU-9250 SPI , это еще в 20 раз быстрее.
Ну так и я о чем и писал ;) что используя 15 датчиков - я только и буду забирать данные с датчиков, а их ещё обработать нужно и передать куда то.
Полагаю что Вы интересуетесь определением местоположения объекта в пределах одной комнаты.
Если так, то Wifi - это как гланды смотреть через задницу.
В пределах одной комнаты можно все сделать гораздо проще, хотя по "отпечаткам" с 3 и более ТД говорят о точности в 1 м. Речь идёт о помещениях размером со спортзал, когда нужено определения местоположения для волейбольной команды, например. Точности в +/- 0.5 м. более чем достаточно.
Я понимаю, что вы шибко умный и можете правильно все советовать, лучше поделитесь программным кодом и соответствующей литературой, если набивали шишек именно в этих вопросах.
 

nikolz

Well-known member
теперь про рекламу Cisco.
На ютубе они убрали рекламу своей системы гиперлокации.
вот картинка с их сайта
1598372766232.png

Т е обещают погрешность 3 метра. Т е Вы либо в центре комнаты либо в стене этой комнаты.
Но с вероятностью 50% Вы где-то в пределах 1 метра.
--------------------------
Фишка их системы в специальной антенне. Т е они осуществляют пеленгацию смартфона
Антенны предположу в виде фазированных решеток.
---------------------
С сайта:
Гиперлокация (Круговая антенная решетка) - это 32-элементная антенная конструкция, обеспечивающая 360-градусный охват вокруг точки доступа. Она предназначена для интеграции в модуль Hyperlocation с передовой безопасностью обеспечивая точный угол RF Информация о прибытии (AoA), позволяющая встроенному программному обеспечению получать данные, необходимые для вычислите местоположение, используя более детальный подход.

Антенная решетка а модуль Гиперлокации с повышенной безопасностью интегрируется в Cisco 3600 и Точки доступа серии 3700 с использованием опции модуля, позволяющей использовать оба модуля антенны (центр) и Гиперлокационная круговая решетка (снаружи) пример ниже AP-3700.
 

kharlashkin

New member
Вы и правда писатель. Я специально привел ссылку на статью именно Cisco на Хабре.
 

Victor

Administrator
Команда форума
Переключается в режим клиента, цепляется к существующей сети и шлет полученные за период данные, не только по точкам доступа но и по соседним ESP-шкам
лучше сделать две ESP8266 и соединить их через UART друг с другом - одна собирает пакеты, а другая их отправляет, тогда процесс можно сделать непрерывным, без задержек на переключение
ESP в определенном периоде собирает пакеты и считает среднее значение RSSI.
среднее считать бесполезно (я пробовал), потому что показания RSSI сильно кривые и даже фильтр Калмана не поможет - слишком криво реализовано измерение RSSI и в SDK и, скорее всего, на аппаратном уровне, да и такая задача не стояла у разработчиков чипа.
Кстати, даже у CISCO не все так радужно (иначе бы такие решения были реализованы в каждом торговом центре - для маркетинга в ритейле это очень востребовано), и цены у них на indoor локацию огого.
 

nikolz

Well-known member
Судя по Вашей статье и вопросу, Вы из разряда незнаек-самоделкиных,
как и большинство дающих Вам советы по данному вопросу.
-------------------------
Ответ на Ваш вопрос есть в учебниках по радионавигации и радиолокации.
-------------------------
Но, понимаю, Вам учиться лень, как и большинству а-ля-кулибинам.
-----------------
Поэтому поясню, почему использование сигнала Wifi для позиционирования - это через задницу.
--------------------
Измерение расстояния с помощью звуко или радио волн - это косвенный метод.
В этом случае мы используем некоторый параметр сигнала и функциональную зависимость этого параметра от расстояния.
Чтобы измерять было просто, стремятся создать сигнал, у которого нужный нам параметр зависит лишь от расстояния.
--------------------
У Wifi сигнала нет такого параметра.
Поэтому измерять с его помощью расстояние либо не точно (амплитудный метод),
либо требует сложного спец оборудования (фазовый, частотный и временной методы)
----------------------
Если Вам надо точно определить местоположение объекта в замкнутом пространстве, то надо использовать специально генерируемый гармонический сигнал.
-------------------
Наилучшим вариантом для комнаты будет фазовый метод.
------------------
Делается это так:
На объект помещается передатчик непрерывного гармонического сигнала.
Например, сигнал с частотой 10 МГц позволит определить расстояние до объекта в пределах 15 метров.
В углах комнаты, помещаем приемники.
Приемники можно группировать парами.
Один из приемников формирует опорный сигнал, второй измерительный.
В результате измеряем смещение объекта относительно приемников.
После этого решаем пространственную задачу определения местонахождения объекта.
Погрешность измерения зависит от стабильности излучаемой частоты,
т.е. генератор на объекте должен быть кварцевый.
----------------------
Не сложно обеспечить погрешность измерения фазы сигнала относительно опорного не более 0.1 гр,
что обеспечит погрешность измерения расстояния не более 10 миллиметров.
----------------------
 

nikolz

Well-known member
вот еще информация:
Навигация по Wi-Fi. Используется уже существующая инфраструктура сетей связи – точки беспроводных сетей Wi-Fi, и это наименее затратный вариант. Методика определение координат следующая– устройство пользователя сканирует доступные Wi-Fi-точки доступа, затем информацию о них отправляет на сервер, где эти данные по базе данных сопоставляются с координатами этих точек доступа, по которым и вычисляются координаты пользователя. К сожалению, координаты Wi-Fi точек точно не известны, плюс могут меняться (перенесли Wi-Fi точку в другое место или заменили её на другую – координаты уже оказываются неверными).
Точность при таком подходе оставляет желать лучшего (погрешность – до 25 метров! А при использовании специально созданной wi-fi инфраструктуры – точность 3-5 метров, но это уже требует ощутимых затрат на создание и обслуживание подобной системы), да и идентицифировать клиентов по Wi-Fi, привязывая их расположение к карте помещений, проблематично – начиная с iOS 8, mac-адреса Apple-устройств (iPhone, iPad) постоянно меняются, для предотвращения «рекламной» слежки.
 
Сверху Снизу