ГлавнаяПроекты на ESP32Система позиционирования внутри помещений на основе UWB-технологии, ESP32 и Qorvo DWM3000

Система позиционирования внутри помещений на основе UWB-технологии, ESP32 и Qorvo DWM3000


Для создания системы позиционирования внутри помещений с использованием ESP32 требуются технологии, выходящие за рамки GPS. В то время как GPS-трекеры отлично подходят для использования на открытом воздухе,  система позиционирования внутри помещений требует технологии сверхширокополосной связи (UWB) для достижения точности на уровне сантиметров внутри зданий. В этом руководстве показано, как создать полноценную систему позиционирования внутри помещений на основе UWB-модуля Qorvo DWM3000 с ESP32, способную отслеживать устройства с точностью до 10 см для отслеживания активов по технологии UWB и приложений определения местоположения в реальном времени.

Система позиционирования внутри помещений на основе UWB-технологии, ESP32 и Qorvo DWM3000

Если вы когда-либо пытались отслеживать устройство в помещении с помощью GPS, вы знаете его ограничения. Спутники GPS, находящиеся на расстоянии 20 000 км, не могут эффективно проникать сквозь бетон, сталь и стекло. Даже в полузакрытых помещениях, таких как склады или стадионы, точность GPS снижается до нескольких метров. Этого достаточно для идентификации зданий, но недостаточно для точной навигации внутри помещений или отслеживания активов. Если вам не требуется точное отслеживание внутри помещений и вы хотите использовать GPS, тогда вам можно ознакомиться с платформой отслеживания GPS GeoLinker — бесплатным инструментом с открытым исходным кодом от сервиса CircuitDigest, который позволяет вам беспрепятственно создавать, тестировать и развертывать проекты GPS.

Более современные приложения, такие как складская робототехника, робототехника на заводах, системы определения местоположения в реальном времени на основе UWB , навигация/отслеживание в аэропортах и ​​дополненная/виртуальная реальность, требуют быстрых и точных систем позиционирования внутри помещений. Традиционные технологии, такие как Bluetooth и Wi-Fi, не могут обеспечить точность до долей метра с постоянной стабильностью; именно поэтому данный  проект по созданию системы позиционирования UWB на базе ESP32 сосредоточен на модуле позиционирования DWM3000 UWB и проверенной методологии. В этом проекте по созданию системы UWB своими руками мы покажем вам, как настроить систему позиционирования внутри помещений на базе ESP32 с использованием модуля DWM3000 и визуализации в реальном времени.

Пример работы системы позиционирования на основе технологии UWB

Вот тут-то и пригодится сверхширокополосная связь (UWB). В отличие от GPS, UWB не зависит от спутников. Вместо этого она измеряет время, необходимое радиоимпульсам для распространения между устройствами, обеспечивая точность позиционирования внутри помещений до 10 см , что позволяет точно знать, на каком стуле вы сидите, а не просто в какой комнате.

Сравнение: UWB против традиционных технологий позиционирования внутри помещений

Данное сравнение вы можете посмотреть в следующей таблице.

Сравнение: UWB против традиционных технологий позиционирования внутри помещений

Также основные принципы рассматриваемого проекта вы можете посмотреть в следующем видео.

Qorvo DWM3000: ядро ​​вашей системы позиционирования внутри помещений на базе UWB с использованием ESP32

Qorvo DWM3000 — это компактный, полностью интегрированный сверхширокополосный (UWB) приемопередающий модуль, предназначенный для высокоточных задач определения местоположения и расстояния в системах позиционирования UWB. Созданный на основе микросхемы Qorvo DW3110, он соответствует стандарту IEEE 802.15.4z и полностью совместим со спецификациями FiRa Consortium PHY/MAC, что означает возможность его работы с другими UWB-устройствами в экосистеме.

Вешний вид модуля Qorvo DWM3000

В отличие от микросхем без корпуса, DWM3000 поставляется в виде готового к использованию радиочастотного модуля, а это значит, что вам не нужно быть радиочастотным инженером, чтобы подключить его к вашей системе позиционирования UWB. Он уже включает в себя высокопроизводительную керамическую UWB-антенну с всенаправленными характеристиками. На борту имеются все пассивные радиочастотные компоненты, кварцевый генератор на 38,4 МГц и полная система управления питанием.

Распиновка модуля Qorvo DWM3000

Такая конструкция, работающая по принципу «подключи и работай», особенно привлекательна для разработчиков, которым нужны передовые технологии определения местоположения без необходимости тратить месяцы на проектирование радиочастотных систем.

Как работает система позиционирования внутри помещений на базе UWB с использованием ESP32

Создание системы позиционирования внутри помещений с использованием технологии UWB включает в себя следующие ключевые этапы:

1. Размещение якорей: Разместите 3 или более UWB-якорей в известных местах (координатах) в вашей среде для наилучшего покрытия в системе определения местоположения в реальном времени (RTLS) на основе UWB. Размещение якорей, прошивка метки и логика трилатерации направлены на обеспечение надежного позиционирования ESP32 внутри помещений с точностью до сантиметра в сложных внутренних пространствах.
2. Инициализация метки: Мобильное устройство позиционирования UWB (метка) инициирует перемещение якорей.
3. Двустороннее определение расстояния: Метки и якоря используют метод измерения времени пролета с точностью до одной наносекунды, отправляя и принимая точные UWB-импульсы.
4. Расчет расстояний: Использование двустороннего TWR на метках позволяет рассчитать расстояние между меткой и опорными точками для отслеживания местоположения по UWB.
5. Трилатерация: Скрипт на Python собирает данные о расстояниях от 3 или более опорных точек и вычисляет точные координаты (x,y).
6. Визуализация в реальном времени: Данные о местоположении с метки передаются по Wi-Fi для отображения отслеживания в режиме реального времени на плане помещения для отслеживания активов по UWB.

Возможности DWM3000 для систем позиционирования внутри помещений

Представлены в следующей таблице.

Возможности DWM3000 для систем позиционирования внутри помещений

Почему технология UWB превосходно подходит для систем позиционирования внутри помещений

Ключевое преимущество UWB заключается в его способности измерять время распространения сигнала с исключительной точностью. Поскольку DWM3000 разработан для стандарта 802.15.4z, он передает очень короткие импульсы (порядка наносекунд) в широком диапазоне частот. Это делает систему позиционирования UWB устойчивой к многолучевым помехам, распространенной проблеме в помещениях, где стены, потолки и металлические поверхности вызывают отражения.

При позиционировании внутри помещений многолучевое распространение сигнала может значительно снизить точность Wi-Fi или Bluetooth, но технология UWB, особенно DWM3000, способна отфильтровывать эти отражения и фокусироваться на прямом сигнале, обеспечивая точность до сантиметра даже в загроможденных помещениях.

Таким образом, система позиционирования UWB устойчива к многолучевым помехам, которые часто возникают в помещениях из-за отражения от стен, потолков и металлических поверхностей. 

В системах локализации UWB внутри помещений сигнал, распространяющийся по более длинному пути в результате многолучевого распространения, может привести к крайне неточным результатам Wi-Fi или Bluetooth, в то время как UWB позволяет отбрасывать нежелательные отражения и фокусироваться исключительно на прямом сигнале, особенно это касается модуля позиционирования DWM3000 UWB. Системы отслеживания местоположения UWB отлично подходят для закрытых помещений, где часто встречаются отражения от металлических полок, а отслеживание объектов имеет важное значение в промышленных условиях. Поскольку традиционные системы Bluetooth или Wi-Fi испытывают трудности с отражениями и многолучевым распространением внутри помещений, данный подход использует UWB для обеспечения точности, что позволяет создать полноценное решение для позиционирования внутри помещений на базе ESP32, а не просто осуществлять грубое зональное отслеживание.

Другие модули Qorvo UWB для систем позиционирования внутри помещений

Компания Qorvo предлагает несколько UWB-модулей со схожими форм-факторами, но разными чипсетами, частотными характеристиками и соответствием стандартам, подходящих для различных реализаций UWB-систем позиционирования. Их краткое сравнение представлено в следующей таблице.

Сравнение модулей Qorvo UWB для систем позиционирования внутри помещений

Принципы работы нашей системы позиционирования внутри помещений на базе UWB

В своей системе отслеживания местоположения внутри помещений с использованием UWB-технологии я не использовал все функции DWM3000; я сосредоточился на возможностях, необходимых для системы отслеживания местоположения в реальном времени в 2D-пространстве внутри помещений, чтобы создать систему позиционирования внутри помещений с использованием UWB-технологии на базе ESP32:

  • Режим двустороннего измерения расстояния (DS-TWR) позволяет точно измерять расстояния между меткой и якорем.
  • Работа на канале 5 (6,5 ГГц), обеспечивающая стабильную работу моей системы позиционирования UWB внутри помещений с использованием ESP32. Поддерживает каналы UWB 5 (6,5 ГГц) и 9 (8 ГГц), оба подходят для глобального использования в приложениях UWB RTLS.
  • SPI-связь с хост-микроконтроллером ESP32.
  • Стандартная калибровка задержки антенны для дальнейшей оптимизации точности определения местоположения внутри помещений с использованием сверхширокополосной связи (UWB).
  • Высокая скорость передачи данных (6,8 Мбит/с) позволяет проводить измерения и ускорять циклы измерений для отслеживания местоположения в режиме реального времени с помощью UWB-технологии.

Кроме отслеживания активов по протоколу UWB, DWM3000 также поддерживает такие опции, как TDoA, режимы работы с низким энергопотреблением меток и многоканальную работу, если в дальнейшем потребуется масштабировать систему для отслеживания нескольких меток или использовать ее в больших открытых пространствах в качестве комплексной системы UWB RTLS.

Двусторонняя двухсторонняя система измерения расстояния (DS-TWR) режим для измерения расстояний от метки до якоря.
5 канал работа на частоте 6,5 ГГц для стабильной работы.
SPI связь с главным микроконтроллером ESP32.
Стандартная калибровка задержки антенны для повышения точности.
Высокая скорость передачи данных (6,8 Мбит/с) для обеспечения более быстрых циклов измерений.

Помимо отслеживания активов по протоколу UWB, доступны такие функции, как TDoA, режимы работы с низким энергопотреблением меток и многоканальная работа, если в дальнейшем потребуется масштабировать систему для отслеживания нескольких меток или для больших помещений.

Компоненты, необходимые для создания системы позиционирования 

Для создания этой системы позиционирования внутри помещений по протоколу UWB с использованием ESP32 вам потребуется следующее оборудование:

Компонент Количество Примечания
Модуль Qorvo DWM3000 UWB (купить на AliExpress, есть значительно более дешевые аналоги этого модуля, но их нужно будет немного адаптировать к данному проекту) 4 Один в качестве метки, три в качестве якоря
Плата разработки ESP32-WROOM (купить на AliExpress) 4 Каждый DWM3000 оснащен собственным модулем ESP32-WROOM для связи и обработки данных по протоколу SPI
Кабель Micro USB 4 Для программирования и питания каждого ESP32-WROOM
Макетная плата / Изготовление креплений для печатных плат на заказ 4 Для установки и подключения DWM3000 к ESP32
Источник питания 5 В USB / Power Bank 4 Для питания каждого модуля ESP32

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Настройка оборудования и подключение контактов

Для того чтобы модули DWM3000 работали в качестве меток и якорей в этом проекте внутренней системы позиционирования UWB, мы подключаем их к платам ESP32 через интерфейс SPI. Каждая пара ESP32-DWM3000 будет иметь одинаковую схему подключения, но каждому якорю будет присвоен уникальный ANCHOR_ID в коде. ESP32 метки программируется прошивкой метки, а якоря — прошивкой якоря .

Используемые в нашем проекте контакты модуля DWM3000

Схема подключения модуля DWM3000 к плате ESP32 для создания нашей системы позиционирования представлена на следующем рисунке.

Схема подключения модуля DWM3000 к плате ESP32

Контакт DWM3000 Контакт ESP32 Функция
VCC 3.3V Источник питания
GND GND Земля
SCK GPIO18 Тактовый сигнал SPI
MOSI GPIO23 Данные SPI (ESP32 → DWM3000)
MISO GPIO19 Данные SPI (DWM3000 → ESP32)
CS (Chip Select) GPIO4 Выбор микросхемы SPI
RST (Reset) GPIO27 Аппаратный сброс
IRQ GPIO34 Прерывание от DWM3000 (опционально для обработки событий)

Внимание! Модуль DWM3000 работает только при напряжении 3,3 В. Подача более высокого напряжения может повредить его. Убедитесь, что источник питания чистый и имеет минимальный уровень помех для стабильной работы.

Схема соединений нашего проекта на макетной плате

Размещение модуля DWM3000 и платы ESP32 на макетной плате

Расположение крепежных элементов в помещении для установки UWB RTLS

Для трилатерализации в вашей системе отслеживания местоположения на основе сверхширокополосной связи мы рекомендуем разместить три опорных точки в фиксированных, известных положениях.

Принцип размещения опорных точек в нашей системе отслеживания местоположения на основе сверхширокополосной связи

Якорь 1 Нижний левый угол комнаты (например, координаты (15, 5) см)
Якорь 2 Нижний правый угол комнаты (290, 5) см
Якорь 3 Верхняя центральная часть (165, 625) см

Примечание!: Эти координаты должны совпадать с массивом ANCHOR_POSITIONS в вашем скрипте просмотра экрана на Python.

Как метка взаимодействует с якорными точками в системе позиционирования UWB внутри помещений

В нашей системе определения местоположения внутри помещений с использованием UWB-технологии метка выступает в роли инициатора, а опорные точки — в роли ответчиков. Положение каждой опорной точки фиксировано и известно заранее. Задача метки — измерить расстояние до каждой опорной точки, используя для этого точный обмен UWB-сообщениями. Этот процесс называется двусторонним определением расстояния (Two-Way Ranging, TWR), и для достижения максимальной точности в нашей системе позиционирования UWB мы используем версию, называемую двусторонним определением расстояния (Double-Sided TWR, DS-TWR) .

Фиксация точных моментов времени для отслеживания местоположения с помощью UWB-технологии

Каждый раз, когда DWM3000 передает или принимает UWB-кадр, он записывает аппаратную метку времени — сверхточное значение счетчика, получаемое непосредственно от внутренних часов радиомодуля. Эти метки времени имеют точность до долей наносекунды и являются секретом сантиметровой точности отслеживания объектов в UWB-среде. ESP32 никогда не использует для этого собственные часы процессора; он просто считывает метки времени радиомодуля, используя функции API, такие как readtxtimestamp() и readrxtimestamp().

Трехпоточный обмен сообщениями в системе позиционирования внутри помещений на базе UWB с использованием ESP32

Вот что происходит во время сеанса измерения расстояния с использованием одного якорного датчика в нашей системе UWB RTLS:

  • Опрос: Метка отправляет сообщение «Опрос» в момент времени T1 и записывает метку времени передачи.
  • Ответ: Якорь получает запрос на этапе T2, ожидает известную задержку ответа, затем передает «Ответ» на этапе T3. Якорь записывает данные как на этапе T2, так и на этапе T3.
  • Финал: Метка получает ответ на этапе T4, а затем отправляет сообщение «Финал», которое включает в себя собственные записанные метки времени, чтобы якорный узел мог рассчитать время полета (Time of Flight, ToF).

Этот трехэтапный обмен позволяет обеим сторонам обмениваться информацией о времени и устраняет необходимость в синхронизированных часах в процессе определения местоположения внутри помещений с использованием технологии UWB.

Асимметричный двусторонний алгоритм определения расстояния (двустороннее измерение расстояния)

В асимметричном двустороннем измерении расстояния время ожидания отсутствует. Когда якорь получает сообщение, он отвечает немедленно. Поскольку скорость обработки кода варьируется, время ответа метки (Treply1) не будет совпадать со временем ответа якоря (Treply2). Система использует измерение дрейфа тактовой частоты для математической коррекции ошибок, вызванных этим неравным временем ответа. Для расчета используются четыре временных интервала, измеренных в аппаратных единицах такта DWM3000:

  • Tround1 = T 4 - T 1 (количество циклов обмена метками при первом обмене)
  • Treply1  = T 3 - T 2  (задержка ответа якоря после получения опроса)
  • Tround2 = T 6 - T 3 ( время кругового пути якоря для второго обмена)
  • Treply2 = T 5 - T 4 (задержка ответа тега после получения ответа)

Эти четыре измеренных числа являются входными данными для алгебры TWR, используемой в системе позиционирования UWB.

Принцип определения расстояния в нашей системе позиционирования

Затем время прохождения сигнала (ToF) вычисляется следующим образом:

Формула для расчета времени прохождения сигнала (ToF)

Получив значение ToF в тиках, мы преобразуем его в секунды, используя период тика DWM3000, а затем в расстояние, используя скорость света для точной локализации внутри помещений с помощью UWB-технологии:

Формула для расчета расстояния на основе времени прохождения сигнала (ToF)

Что мы использовали в нашем проекте

В нашей реализации кода мы добавили дополнительную передачу пакетов от якоря к метке после окончательной передачи, чтобы отправить Treply1 и Tround2 на сторону метки, поскольку в нашем проекте мы используем метку для вычисления расстояния между каждым якорем, для чего нам нужны эти временные интервалы от точки якоря.

Принцип определения расстояния в нашей системе позиционирования

Задержка и калибровка антенны для системы позиционирования внутри помещений на базе UWB

Внутренний сигнальный тракт и антенна DWM3000 вносят небольшую фиксированную задержку как при передаче, так и при приеме. Если мы не компенсируем её, погрешность в определении расстояния в системе UWB RTLS всегда будет составлять несколько сантиметров. Модуль позиционирования UWB позволяет устанавливать задержки антенн TX и RX в тактах устройства после калибровки. Это делается один раз для каждого модуля, а затем сохраняется в микропрограмме.

Обеспечение надежности измерений

Технология UWB обладает высокой устойчивостью к многолучевому распространению, однако плохая геометрия или препятствия все еще могут вызывать ошибки. Для смягчения этой проблемы в нашем проекте системы позиционирования UWB внутри помещений микропрограмма применяет простое усреднение для фильтрации шумовых измерений, а значения RSSI отслеживаются для обнаружения потенциальных условий отсутствия прямой видимости (NLOS), которые могут повлиять на точность отслеживания местоположения с помощью UWB.

От данных в формате JSON к определению местоположения в реальном времени в системах отслеживания активов UWB

После того, как метка рассчитает расстояние до всех трех опорных точек, следующим шагом будет отправка этой информации на ПК, чтобы он мог определить координаты метки и отобразить их в реальном времени. Для этого мы используем JSON — легковесный текстовый формат, который легко обрабатывается как ESP32, так и Python. 

Формат JSON для данных UWB RTLS

Вот пример того, что отправляет метка после каждого цикла измерения в системе отслеживания местоположения UWB:

Каждый якорь имеет метку (A1, A2, A3), и внутри каждой записи мы храним:

  • tag_id: Числовой идентификатор тега, полезный, если вы отслеживаете несколько тегов одновременно в вашей системе UWB RTLS.
    Внутри каждой якорной записи (A1, A2, A3):
  • Расстояние: Окончательное, откалиброванное расстояние в сантиметрах после применения компенсации задержки антенны и любой фильтрации для определения местоположения внутри помещений с использованием сверхширокополосной связи . Это значение используется для трилатерации.
  • raw: Исходное некалиброванное расстояние в сантиметрах, полученное непосредственно из расчетов DS-TWR до применения поправок.
  • rssi: Расчетная мощность сигнала принятого пакета в дБм.
  • fp_rssi: Уровень сигнала, измеренный на первом пути, который помогает определить, слабее ли прямой путь, чем отражения (полезно для обнаружения отсутствия прямой видимости, отслеживания объектов UWB).
  • round_time: Общее время обмена сообщениями в обоих направлениях, выраженное в тактах часов устройства.
  • reply_time: Время, затраченное отвечающим (якорным) устройством на ответ, в тактах устройства.
  • clock_offset: Доля дрейфа тактовой частоты между меткой и якорным датчиком, полезная для диагностики и повышения точности измерения расстояния.

ESP32 отправляет эту JSON-строку по Wi-Fi на ПК, где наш скрипт на Python готов обработать ее для визуализации отслеживания местоположения в реальном времени с помощью UWB-технологии.

Приём и анализ данных в Python для системы позиционирования внутри помещений UWB с использованием ESP32

На компьютере скрипт на Python:

  1. Обрабатывает входящие TCP-данные от метки в системе позиционирования UWB.
  2. Функция считывает строку JSON и преобразует её в словарь Python с помощью метода json.loads().
  3. Извлекает расстояния и значения RSSI для каждой опорной точки для обработки данных по локализации внутри помещений с использованием UWB-технологии.

Для настройки UWB RTLS скрипт уже знает фиксированные координаты каждого якорного узла в помещении, например:

Скрипт уже знает фиксированные координаты каждого якоря в комнате, например:

Математика трилатерации в системе позиционирования внутри помещений на базе UWB

Если нанести точки привязки на график и обвести каждую из них кругом радиусом, равным измеренному расстоянию, то метка должна находиться в точке пересечения кругов. Это основной принцип определения местоположения внутри помещений с помощью UWB.

Математически каждая точка привязки дает одно уравнение в системе позиционирования UWB:

Система уравнений в системе позиционирования UWB

Где (x1 ,y1 )(x2 ,y2 )(x3, y3 ) — опорные точки, а d1, d2, d3 — измеренные расстояния от JSON-пакета в нашей системе отслеживания местоположения UWB.

Принцип трилатерации в нашей системе позиционирования UWB

Обработка шумов и погрешностей измерений в UWB RTLS

На практике шум и небольшие погрешности измерения расстояния означают, что вероятность пересечения окружностей в одной точке в реальной системе позиционирования внутри помещений с использованием UWB крайне мала. Именно поэтому скрипт использует оптимизацию методом наименьших квадратов для точного отслеживания объектов с помощью UWB.

В библиотеке SciPy есть функция least_squares(), которая автоматически выполняет оптимизацию для определения наиболее подходящего положения для локализации UWB внутри помещений.

В действительности, из-за шума и небольших погрешностей измерения расстояния эти окружности редко пересекаются ровно в одной точке. Именно поэтому в скрипте используется оптимизация методом наименьших квадратов:

Принцип оптимизации с помощью метода наименьших квадратов

Это делается с помощью функции least_squares() из библиотеки SciPy, которая автоматически выполняет оптимизацию.

Построение графиков в реальном времени для отслеживания местоположения с помощью UWB-технологии

После нахождения оптимального положения (x,y) выполняется следующий скрипт:

  • Отмечает опорные точки как фиксированные.
  • Отображает текущее местоположение метки в виде движущейся точки.
  • Над каждым якорным устройством отображается значение RSSI для мониторинга уровня сигнала в реальном времени в системе UWB RTLS.

График непрерывно обновляется по мере поступления новых JSON-пакетов, обеспечивая плавное отображение перемещения метки в реальном времени для эффективного отслеживания активов с помощью UWB-технологии.

Построение графиков в реальном времени для отслеживания местоположения с помощью UWB-технологии

Настройка прошивки метки ESP32 для системы позиционирования внутри помещений

Задайте базовый идентификационный номер привязки, что позволит легко добавлять новые привязки в дальнейшем без необходимости переделывать весь код для развертывания UWB RTLS.

В прошивку входят основные библиотеки: SPI.h для высокоскоростной связи с модулем позиционирования DWM3000 UWB и WiFi.h/WiFiClient.h для подключения к сети. Здесь жестко закодированы SSID, пароль и данные сервера, чтобы ESP32 мог немедленно подключиться к вашей локальной сети и установить TCP-соединение с ПК, на котором запущен скрипт визуализации UWB для определения местоположения внутри помещений на языке Python.

Инициализация системы и настройка UWB-тегов

Контакты управления SPI определены для системы позиционирования UWB внутри помещений с использованием ESP32. RST_PIN позволяет ESP32 перезагружать DWM3000, а CHIP_SELECT_PIN управляет тем, какое устройство SPI активно. Блок конфигурации якорей задает общее количество якорей, присваивает уникальный идентификатор тега и устанавливает базовый идентификационный номер якоря, что упрощает добавление дополнительных якорей в дальнейшем без переделки всего кода для вашей системы UWB RTLS.

Параметры определения расстояния управляют количеством сохраняемых для фильтрации выборок расстояний (FILTER_SIZE) и тем, какие значения расстояния считаются допустимыми (MIN_DISTANCE и MAX_DISTANCE). Эти проверки предотвращают попадание недопустимых значений в расчет положения.

Этот большой блок определений напрямую соответствует регистрам конфигурации DWM3000, константам и значениям настройки. Он включает номера каналов UWB, длину преамбулы, размеры PAC, скорость передачи данных, режимы PHR (Power Headroom Report), адреса регистров и константы компенсации смещения тактовой частоты для различных каналов. Параметр ANTENNA_DELAY точно настраивает время прохождения сигнала через радиочастотный вход, повышая точность измерения расстояния до сантиметрового уровня.

Массив config[] объединяет наиболее важные начальные настройки радиосвязи в одном месте. В этом проекте используется канал 5, преамбула из 128 символов с кодом 9, длина PAC 8, максимальная скорость передачи данных 6,8 Мбит/с и стандартный режим PHR. Эти настройки обеспечивают баланс между производительностью и надежностью для определения расстояния внутри помещений.

Структура AnchorData содержит всю необходимую информацию для каждого якорного датчика: измерения времени из обмена данными DS-TWR, исходные и отфильтрованные расстояния, скользящую историю для медианной фильтрации и показатели качества сигнала (RSSI первого пути). Это позволяет упорядочить все данные для каждого якорного датчика и обеспечить к ним легкий доступ во время измерения расстояния и построения JSON-файлов.

Наконец, набор вспомогательных функций управляет якорями в памяти. Функция initializeAnchors() присваивает идентификаторы, функции getCurrentAnchor() и getCurrentAnchorId() обеспечивают быстрый доступ к активному якорю, функция switchToNextAnchor() последовательно переключает якоря, а функция allAnchorsHaveValidData() подтверждает, что каждый якорь имеет допустимые показания, прежде чем пытаться вычислить его положение.

Класс для работы с DWM3000

В этом разделе описывается класс DWM3000Class, пользовательская оболочка драйвера, которая обрабатывает всю прямую связь с трансивером DWM3000 UWB. Она абстрагирует сложные операции с регистрами, управление синхронизацией и этапы протокола определения расстояния, предоставляя чистый, многократно используемый API для остальной части прошивки.

Класс разделен на функциональные группы:

  • Методы настройки микросхемы отвечают за выбор интерфейса SPI, инициализацию и конфигурацию GPIO.
  • Методы двустороннего определения расстояния реализуют протокол DS-TWR, от отправки и приема кадров до вычисления конечного расстояния.
  • Настройки радио и протокола позволяют быстро переключать канал, преамбулу, скорость передачи данных и адресацию.
  • Функции «Состояние и аналитика» считывают уровень сигнала, временные метки и смещение тактовой частоты, что крайне важно как для точности измерения расстояния, так и для отладки.
  • Методы взаимодействия с оборудованием выполняют сбросы, управление светодиодами и планирование отложенной передачи.
  • Подпрограммы низкоуровневого доступа считывают и записывают данные непосредственно в регистры DWM3000, что позволяет при необходимости выполнять расширенную настройку параметров.

Благодаря тому, что все эти функции выделены в отдельный класс, остальная часть прошивки метки может выполнять сложные операции измерения расстояния и диагностики по протоколу UWB всего несколькими высокоуровневыми вызовами, сохраняя основной код чистым и читаемым, при этом обеспечивая полный контроль над оборудованием.

Wi-Fi-связь и обработка данных в формате JSON

Этот раздел прошивки отвечает за все сетевые подключения и форматирование данных. Метка сначала подключается к Wi-Fi с помощью функции connectToWiFi() и поддерживает соединение. В каждом цикле измерения sendDataOverWiFi() формирует структурированную полезную нагрузку JSON, содержащую отфильтрованное расстояние каждого якорного датчика, исходное измерение, RSSI, RSSI первого пути, значения синхронизации и смещение тактовой частоты, а затем отправляет ее по TCP на хост-скрипт Python. Для обеспечения стабильности функции isValidDistance() и calculateMedian() фильтруют зашумленные показания перед передачей. Функция updateFilteredDistance() поддерживает скользящую историю измерений каждого якорного датчика, а функции printDebugInfo() и printAllDistances() обеспечивают быстрый мониторинг на устройстве для устранения неполадок. Вместе эти функции образуют мост между низкоуровневыми измерениями UWB и построением графика положения в реальном времени на вашем компьютере.

Инициализация системы и настройка UWB-тегов

Функция setup() запускается один раз при старте системы и подготавливает всю систему позиционирования UWB внутри помещений с использованием ESP32. Сначала она открывает последовательное соединение для отладки и инициализирует список опорных точек с уникальными идентификаторами. Затем она подключает ESP32 к сети Wi-Fi, чтобы потоковая передача данных была готова с самого начала для отслеживания местоположения по протоколу UWB. После этого трансивер DWM3000 UWB включается, выполняется аппаратный сброс и проверяется корректность связи по SPI. Прошивка гарантирует, что микросхема находится в режиме ожидания (IDLE) перед применением программного сброса и продолжением инициализации. Настраиваются выводы GPIO, устанавливается задержка антенны для точной синхронизации, и присваивается уникальный идентификатор метки. Наконец, DWM3000 переводится в режим передачи, и его регистры состояния системы очищаются, оставляя метку готовой к началу цикла измерения расстояния.

Основной контур измерения расстояния для отслеживания местоположения по технологии UWB

Функция loop() управляет процессом двустороннего измерения расстояния (DS-TWR) с использованием системы позиционирования UWB внутри помещений на базе ESP32 для каждого якорного датчика по очереди. Она работает как небольшой конечный автомат (curr_stage), который пошагово проходит через обмен данными о расстоянии для обеспечения точной локализации UWB внутри помещений. Этап 0 отправляет первый кадр текущему якорному датчику и записывает метку времени передачи. Этап 1 ожидает корректного ответа, проверяя наличие ошибочных кадров или неожиданных событий. Этап 2 отправляет второй кадр и регистрирует данные о времени (t_roundA и t_replyA). Этап 3 ожидает окончательного ответа от якорного датчика, считывая смещение его тактовой частоты для компенсации дрейфа. Этап 4 обрабатывает все измерения времени с помощью функции ds_processRTInfo(), преобразует результат в сантиметры, сохраняет метрики уровня сигнала и обновляет расстояние, отфильтрованное медианой. Если все якорные датчики имеют корректные расстояния, метка отправляет полное обновление JSON на хост через Wi-Fi. Затем цикл переключается на следующий якорный датчик и повторяется. Этот непрерывный цикл постоянно обновляет данные о расстоянии на хосте для позиционирования в реальном времени. Цикл непрерывно проходит через все точки привязки в вашей системе UWB RTLS, поддерживая измерения расстояния в реальном времени для точного отслеживания объектов UWB и расчета их местоположения.

Разбор процесса настройки прошивки якоря (Anchor)

На стороне якоря микропрограмма начинает с настройки аппаратного интерфейса для DWM3000, включая контакты SPI (RST_PIN, CHIP_SELECT_PIN) и уникальный ANCHOR_ID, который отличает каждый якорь в сети. Она также определяет параметры синхронизации, такие как RESPONSE_TIMEOUT_MS, определяющие время ожидания якорем передачи метки, и константы для максимального количества повторных попыток.

Остальные параметры определяют настройки параметров связи UWB: длины преамбулы, каналов, размеров PAC-пакетов, скорости передачи данных и различных адресов/масок регистров, используемых внутри микросхемы DWM3000. Эти константы гарантируют, что якорный датчик настроен на те же параметры радиочастоты и протокола, что и метка, обеспечивая точное двустороннее измерение расстояния (DS-TWR). Параметр ANTENNA_DELAY калибруется для компенсации аппаратной задержки распространения сигнала, а константа SPEED_OF_LIGHT в сантиметрах в пикосекунду используется в дальнейшем при расчете расстояния.

Загружая все эти параметры в начало файла, код якоря может оставаться чистым и полагаться на эти предопределенные константы в процессе определения расстояния и получения ответа, гарантируя, что каждый якорь работает идентично, за исключением своего уникального идентификатора.

DWM3000Class — основной интерфейс управления UWB

Этот класс является основой как прошивки метки, так и прошивки якорного устройства. Он служит уровнем аппаратной абстракции (HAL) для модуля Qorvo DWM3000, что означает, что все низкоуровневые команды SPI, запись в регистры и конфигурация радиомодуля заключены в легко вызываемые функции.

С помощью DWM3000Class прошивка может:

  • Инициализация UWB-радио (begin(), init(), configureAsTX() )
  • Запустите двустороннюю двухстороннюю проверку дальности (DS-TWR) с помощью таких функций, как ds_sendFrame() и ds_processRTInfo().
  • Настройте параметры радиочастотного сигнала, такие как канал, длина преамбулы, размер PAC-пакета и скорость передачи данных, в соответствии с требованиями системы.
  • Получите данные измерений, такие как RSSI, мощность первого пути, смещения тактовой частоты и точные метки времени передачи/приема.
  • Выполнение преобразований из внутренних единиц времени (пикосекунд) в реальные расстояния в сантиметрах (convertToCM()).
  • Управление состояниями микросхемы, включая сброс, управление GPIO и очистку состояния системы.

Благодаря изоляции всей логики на уровне микросхемы, основной цикл приложения остается чистым и сосредоточенным на процедуре определения расстояния, в то время как класс обрабатывает всю связь с оборудованием DWM3000. Такая модульность позволяет легко адаптировать прошивку для новых вариантов использования или будущих модулей UWB с минимальными изменениями.

Настройка якоря — инициализация DWM3000 для определения расстояния

Эта функция настройки включает питание якоря, проверяет его SPI-соединение с DWM3000 и гарантирует, что модуль находится в стабильном состоянии ожидания (IDLE) перед продолжением. После программного сброса и настройки GPIO она:

  • Выполняет калибровку задержки антенны (setTXAntennaDelay()), что крайне важно для точных измерений времени пролета.
  • Присваивает уникальный идентификатор якорной точки, чтобы метки могли определить, относительно какой якорной точки они отслеживают.
  • Настраивает радиостанцию ​​в качестве передатчика для выполнения ею функции двустороннего измерения расстояния.
  • Переключается в режим приема (standardRX()), чтобы ожидать запросов на определение расстояния от метки.

К концу функции setup() якорь полностью готов к участию в цикле определения расстояния, прослушивает входящие UWB-пакеты и готов отвечать данными о времени.

Цикл якоря — ответ на запросы определения расстояния до метки

В этом цикле якорный модуль непрерывно отслеживает входящие UWB-пакеты от метки. На этапе 0 он прослушивает первый пакет определения расстояния, проверяет, адресован ли он ему, и переходит к этапу 1.

  • На первом этапе якорь отправляет свой первый ответ обратно на метку и записывает точные метки времени передачи (tx) и приема (rx) для расчета времени ответа t_replyB.
  • На втором этапе якорь ожидает второй пакет данных о расстоянии от метки. После его получения он переходит к третьему этапу.
  • На третьем этапе вычисляется время кругового пути t_roundB для сигнала метки, и это значение, вместе с t_replyB, отправляется обратно метке в «информационном кадре», чтобы метка могла вычислить окончательное расстояние.
    Для обеспечения надежности цикла измерения расстояния предусмотрены тайм-ауты, повторные попытки и обработка ошибок; процесс перезапускается, если ожидаемые пакеты не поступают или обнаруживаются ошибки.

Визуализация отслеживания объектов в помещении в реальном времени с помощью Python

Этот скрипт на Python предоставляет слой визуализации для вашей системы позиционирования UWB внутри помещений с использованием ESP32, принимая данные в формате JSON по протоколу TCP и отображая положение метки в реальном времени на плане помещения с помощью библиотеки matplotlib.

Начнем с импорта модулей Python для работы с сетью, многопоточностью, построением графиков и численными вычислениями. В разделе конфигурации задаются IP-адрес ПК, TCP-порт, координаты привязки, размеры помещения и изображение плана этажа. Эти параметры должны соответствовать настройкам Wi-Fi-клиента ESP32 и вашей физической конфигурации помещения. Скрипт Python предоставляет слой визуализации для вашей системы позиционирования UWB внутри помещений с использованием ESP32, принимая данные JSON по TCP и отображая положение меток в реальном времени на плане этажа с помощью matplotlib.

Функция трилатерации для определения местоположения внутри помещений с использованием UWB-технологии

Функция trilateration() вычисляет положение метки, используя расстояния от трех известных опорных точек в системе позиционирования UWB. Она использует метод наименьших квадратов для минимизации разницы между измеренными расстояниями и расстояниями, вычисленными на основе предполагаемого положения (x, y), для точного отслеживания местоположения в системе UWB.

Сервер Wi-Fi TCP

Функция wifi_server() прослушивает входящие TCP-соединения от метки ESP32. Когда данные поступают, они буферизуются, разбиваются на строки, анализируются как JSON и сохраняются в общих переменных для использования функцией построения графиков. Для каждой опорной точки извлекаются расстояния и значения RSSI.

Инициализация графика

Здесь Matplotlib настраивает область построения графика, загружает изображение плана помещения и помечает опорные точки цветными треугольниками. Над каждой опорной точкой также отображается текстовая метка для отображения значений RSSI в реальном времени.

Обновление анимации в реальном времени

Функция update() запускается каждые 100 мс, получая последние данные и обновляя график. Она обновляет метки RSSI, вычисляет положение метки с помощью трилатерации и отображает как текущее положение, так и траекторию движения.

Основной цикл

В заключение, скрипт запускает TCP-сервер в фоновом потоке, настраивает цикл анимации Matplotlib и отображает представление отслеживания в реальном времени.

Тестирование работы проекта: проверка точности UWB

Для демонстрации три якоря размещены в фиксированных, известных координатах в комнате, соответствующих положениям, заданным в скрипте Python для системы позиционирования внутри помещений UWB с использованием ESP32:

Якорь 1 Нижний левый угол (15 см, 5 см)
Якорь 2 Нижний правый угол (290 см, 5 см)
Якорь 3 Верхняя центральная часть (165 см, 625 см)

Метка перемещается по пространству, непрерывно выполняя двустороннее измерение расстояния (DS-TWR) с каждым якорным узлом. ESP32, установленный на метке, собирает данные о расстояниях от всех трех якорных узлов и передает их по Wi-Fi на ПК, на котором запущен инструмент визуализации пола на Python для отслеживания местоположения в реальном времени с помощью UWB-технологии.

Графический интерфейс пользователя на Python отображает план помещения в качестве фона и накладывает на него положение метки в реальном времени, представленное красной точкой. По мере перемещения метки ее траектория визуализируется синей линией, а показания RSSI в реальном времени от каждой опорной точки непрерывно обновляются и отображаются рядом в этой демонстрации UWB RTLS.

Эта конфигурация позволяет визуально проверять точность системы позиционирования UWB и контролировать уровень сигнала для эффективного отслеживания объектов с помощью UWB и определения местоположения внутри помещений с помощью UWB.

Тестирование работы проекта

Построение графиков в реальном времени для отслеживания местоположения с помощью UWB-технологии

Расширение возможностей системы позиционирования внутри помещений: будущие обновления

В будущем эту систему позиционирования внутри помещений на базе UWB с использованием ESP32 можно будет расширить за счет ряда усовершенствований:

  • Четвертый якорь: введение четвертого якоря для повышения избыточности и стабильности при многолучевых отражениях, что улучшает надежность позиционирования внутри помещений с использованием UWB-технологии на базе ESP32.
  • Внедрение метода учета разницы во времени прибытия: добавление метода учета разницы во времени прибытия (TDoA) может позволить одновременно отслеживать несколько меток без необходимости планирования временных интервалов, что значительно повысит эффективность отслеживания активов с использованием технологии UWB.
  • Веб-панель управления: возможность улучшить вашу систему заключается в использовании веб-панели управления вместо стандартного представления Python для удаленного мониторинга вашей системы UWB RTLS.
  • 3D-позиционирование: внедрение 3D-позиционирования путем добавления опорных точек на разной высоте потенциально откроет для вашего приложения новые возможности отслеживания местоположения с помощью UWB-технологии.
  • Снижение проблем, связанных с отсутствием прямой видимости: добавление данных RSSI в сеть приводит к улучшению производительности при использовании UWB-измерений для определения местоположения, что может помочь уменьшить проблемы, связанные с отсутствием прямой видимости, при более надежном позиционировании с помощью UWB.
  • В рамках проекта было проведено углубленное исследование методов измерения расстояния в сверхширокополосном диапазоне (UWB) и отслеживания объектов внутри помещений в режиме реального времени.
  • Использование плат ESP32-WROOM и модулей Qorvo DWM3000, а также нескольких сотен строк кода на Arduino и Python позволило создать функциональную систему позиционирования, способную точно визуализировать движение.
  • Несмотря на такие сложности, как калибровка задержки антенны и отражения сигнала, результаты многообещающие.
  • Сочетание сверхширокополосной точности и возможности подключения по Wi-Fi открывает захватывающие возможности для навигации роботов, отслеживания грузов на складах и определения местоположения внутри помещений в виртуальной и дополненной реальности.
  • Разработчикам рекомендуется делиться вопросами, предложениями и опытом в рамках сообщества для совместного улучшения системы.
  • В рамках проекта успешно продемонстрирована полноценная система позиционирования внутри помещений в режиме реального времени с использованием модулей Qorvo DWM3000 UWB в паре с платами ESP32 для автономной работы.
  • Благодаря двустороннему измерению расстояния между меткой и тремя опорными точками, а также передаче данных по Wi-Fi и трилатерации на основе Python, система может точно определять и визуализировать положение метки на плане помещения.
  • В этом проекте демонстрируется, как сверхширокополосная система в сочетании с интегрированным оборудованием, программным обеспечением и средствами визуализации позволяет создать масштабируемое решение для определения местоположения внутри помещений, подходящее для различных реальных задач.

Репозиторий GitHub с кодом и схемой проекта

Схема и код подключения внутреннего RTLS-трекера ESP32 DWM3000 UWB

Часто задаваемые вопросы о системах позиционирования UWB внутри помещений

⇥ Каков радиус действия модуля позиционирования DWM3000 UWB?
Модуль позиционирования Qorvo DWM3000 UWB обеспечивает хорошую дальность действия до 200 метров на открытом воздухе. В системах позиционирования внутри помещений, где есть стены и препятствия, полезная дальность действия обычно составляет 50-100 метров с точностью до 10 см. Дальность действия зависит от препятствий, помех и ориентации антенны в вашем решении для определения местоположения внутри помещений с использованием UWB.

⇥ Чем отличается от GPS-отслеживания отслеживание объектов с помощью UWB-технологии?
UWB-отслеживание объектов работает внутри помещений, где GPS не работает, с точностью до 10 см, в то время как точность GPS на открытом воздухе составляет приблизительно 5-10 м. GPS использует спутники, в то время как локальные точки привязки и двусторонняя связь измеряют расстояния для систем позиционирования UWB внутри помещений. Отслеживание местоположения с помощью UWB необходимо предприятиям на складах, в больницах и на производственных предприятиях, где требуется точное отслеживание внутри помещений.

⇥ Безопасна ли технология позиционирования UWB?
Да, более новые модули позиционирования UWB, такие как DWM3000, поддерживают безопасность IEEE 802.15.4z с использованием зашифрованных последовательностей временных меток (STS) для защиты от подделки и повторных атак. Технология UWB RTLS имеет все шансы стать безопасной и востребованной в приложениях отслеживания активов с использованием UWB, где целостность и безопасность данных о местоположении являются первостепенными требованиями.

⇥ Возможно ли сосуществование нескольких меток в системе позиционирования UWB внутри помещений?
Да, UWB-локализация внутри помещений может поддерживать несколько меток, используя методы временного разделения или TDoA (разница времени прихода сигнала). Хотя в этом проекте показано отслеживание местоположения с помощью одной метки UWB, архитектура DWM3000 может быть расширена до десятков меток в сети UWB RTLS при правильной настройке прошивки для предотвращения столкновений и планирования в вашей системе позиционирования UWB.

⇥ Каковы основные области применения отслеживания местоположения по технологии UWB?
Отслеживание местоположения по технологии UWB превосходно подходит для автоматизации складов (навигация автоматизированных транспортных средств, отслеживание запасов), здравоохранения (отслеживание активов с помощью UWB, мониторинг пациентов), производства (местоположение инструментов, зоны безопасности), розничной торговли (аналитика клиентов) и спорта (отслеживание игроков). Любой сценарий использования, требующий точной системы позиционирования внутри помещений, улучшается благодаря технологии позиционирования внутри помещений UWB и инфраструктуре UWB RTLS.

⇥ Как откалибровать систему позиционирования UWB внутри помещений для достижения максимальной точности?
Откалибруйте систему позиционирования UWB, используя:

1) Определить точные координаты опорных точек, 
2) Настроить параметры задержки антенны (обычно 16350 для модуля позиционирования DWM3000 UWB), 
3) Провести тестовые измерения в известных точках, 
4) Скорректировать систематические ошибки и 
5) Применить медианную фильтрацию для исключения выбросов.

 Правильная калибровка повышает точность определения местоположения внутри помещений с помощью UWB-технологии с 30 см до 10 см, обеспечивая точное отслеживание местоположения.

(Проголосуй первым!)
Загрузка...
104 просмотров

Комментарии

Система позиционирования внутри помещений на основе UWB-технологии, ESP32 и Qorvo DWM3000 — 4 комментария

    • Да, мне тоже так показалось. Но при этом сравнительно непростой. Надеюсь, вам удастся его повторить

    • За что спасибо? Это корявый перевод. Переводивший или совсем не читал, что переводчик выдал или совершенно не соображает по теме. Пользы больше было бы от ссылки на оригинал.

      • Ну переведите сами лучше если можете, опубликуйте в сети для всеобщего доступа

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *


Рейтинг@Mail.ru