Проект представляет собой дальномерную систему на основе широкополосных модулей DW1000. Система реализована на базе алгоритма DS-TWR (Double-sided Two-Way Ranging). В системе расстояние рассчитывается между модулем A (TAG-модуль) и модулем B (ANCHOR-модуль). TAG модуль выполняет поллинг ANCHOR модулей и инициирует TWR алгоритм с каждым найденным ANCHOR-модулем в зоне действия.
- NodeMCU-BU01 UWB
- Модуль питания 18650
- USB-UART конвертер
- uVision v5.38
- STM Flash Loader Demo
- PuTTY CR/LF
- Установите MDK-ARM Professional (Lite версия не сможет собрать проект).
- Установите uVision v5.38.
- Склонируйте этот репозиторий на свой компьютер.
- Откройте проект в uVision.
- Выберите требуемый Target сборки (TAG или ANCHOR) и нажмите кнопку Build (F7).
- Собранная прошивка появится в директории Build ( и dwm1000-tag.hex).
- dwm1000-tag.hex - для Target TAG
- dwm1000-anchor.hex - для Target ANCHOR
Если нет возможности собрать проект вручную - актуальные прошивки можно найти в последнем релизе в репозитории. Для загрузки прошивки выполните следующие шаги (для Windows):
- Подключите BIT0 на плате модуля к питанию (пример).
- Подключите USB-UART конвертер к пинам UART0 на плате модуля (схема).
- Подключите USB-UART конвертер к USB порту на ПК.
- Запустите STM Flash Loader Demo и выберите нужный COM порт в настройках UART (номер нужного порта можно узнать в диспетчере устройств Windows), остальные настройки менять не нужно (пример настроек).
- Нажмите на кнопку Next. Если появляется ошибка Cannot open the com port - скорее всего указан не верный COM порт, также можно попробовать перезапустить модуль нажатием на кнопку Reset.
- На следующей вкладке (Target is readable) нажмите Next.
- Убедитесь, что устройство (Target) выбрано верно и нажмите Next.
- Выберите нужный файл с прошивкой, выберите вариант Erase necessary pages (рекомендуется также включить верификацию Verify after download) пример.
- Нажмите Next и дождитесь окончания процесса загрузки прошивки. Далее можно нажать Close. При возникновении ошибок, например, при верификации, повторите процесс прошивки, начиная с пункта 4.
После прошивки модуля необходимо произвести настройку - указать идентификатор модуля. Каждый модуль должен иметь свой уникальный идентификатор (целое число от 0 до 65535), чтобы он мог обозначить себя в системе коммуникации. На текущей версии системы TAG-модуль должен иметь идентификатор 0, ANCHOR-модули - идентификаторы от 1 до 10 включительно (остальные идентификаторы на данный момент не используются).
Настроить модуль можно, используя USB-UART конвертер и любой удобный клиент для работы через последовательный порт с поддержкой CR/LF окончания строки (например, PuTTY, при этом в настройках Terminal/Keyboard для The Enter key должно быть выбрано CR LF).
Подключитесь через клиент последовательного порта к COM порту, соединённому с платой модуля через USB-UART конвертер и введите команду device_id set 0 (для TAG-модуля) или device_id set <id> (для ANCHOR-модуля, без кавычек, id = [1; 10]). В ответ должно появиться сообщение Device ID is set to '<id>' (пример). Перезапустите модуль используя команду reset или кнопку Reset на плате.
После правильной установки ID модули готовы к работе.
Для удобства размещения модулей в пространстве был разработан специальный корпус, совместимый с платами UWB модулей и модулями питания (Модуль питания 18650). Корпус можно найти в данном репозитории в виде STL-файлов и распечатать самостоятельно на 3D-принтере.
Предусмотрено 2 варианта размещения модулей:
- на горизонтальной плоскости;
- на вертикальных стойках.
Модели для сборки основного корпуса:
- bottomCase.STL - нижняя крышка корпуса;
- topCase.STL - тело корпуса.
Модели для сборки крепления для вертикальной стойки корпуса:
- postBindBottom.STL - нижняя часть крепления (крепится к стойке);
- postBindTop.STL - верхняя часть крепления (крепится к основному корпусу).
TAG-модули могут быть подключены к другим устройствам (например, Raspberry) в качестве периферии, эти устройства могут получать данные о расстояниях до ANCHOR-модулей. Данные публикуются TAG-модулем с использованием протокола ROSSERIAL в топик 'dwm1000/beacon_data' (тип сообщения BeaconDataArray). Данные могут быть получены через интерфейс UART2 путём подключения к соответствующим пинам на плате (Baudrate = 57600).
Таким образом, дальномерная система может быть встроена в более широкие системы, например, системы позиционирования.
Пакет ROS с реализацией алгоритма позиционирования на основе трилатерации с использованием данной системы: https://github.com/NikitaS2001/dwm1000_pose.
Проект создан в рамках конкурса проектов CopterHack-2023, команда C305.