Ультразвуковая система определения координат 2.0
О чем эта статья: Эта статья описывает принципы работы моей системы определения координат, и мой опыт её изготовления. Данная статья не является инструкцией по изготовлению навигационной системы, ибо это не так просто, чтобы описать в одной статье.
Данная статья является развитием идей моей предыдущей статьи:
habr.com/ru/post/451408
Структура системы
Система определения координат имеет вот такую структурную схему:
Рис. 1 — Принципиальная схема УЗ системы определения координат.
Рассмотрим каждый элемент повнимательнее.
УЗ приемник
Рис. 2 — Развитие УЗ приемника (сверху вниз).
Изначально приемники состояли из одного модуля и имели очень маленькую зону охвата помещения, в те времена я не оцифровывал сигнал, а просто получал с датчика длину, которую выдавал штатный контроллер.
Затем для увеличения охвата я решил сделать модуль из трех датчиков, данные с которых параллельно оцифровывались и передавались на ПК, где рассчитывалось расстояние и координаты. После испытания трехкомпонентного приемника я увидел, что достаточно и одного приемника, если ты сам обрабатываешь сигнал.
В результате приемник стал опять однокомпонентным, но из-за того что я сейчас сам обрабатываю сигнал, область покрытия стала достаточно большой. Сигнал сейчас обрабатывается в STM32 после оцифровки, на выход он выдает только расстояние.
Состав:
- STM32 — используется для оцифровки УЗ сигнала и расчета расстояния до излучателя;
- HC-SR04 — я его немного модифицировал и теперь могу с его входа получать сигнал, представленный на рисунке 3;
- RS485 — для передачи расстояния до излучателя на ПК.
Рис. 3 — Оцифрованный УЗ сигнал.
Рис. 4 — УЗ сигнал на участке 4700 — 5200 рисунка выше.
УЗ излучатель
Рис. 5 — Развитие излучателя (сверху вниз).
Как вы поняли из рисунка 5, вначале я просто дергал лапкой Trig на датчике HC-SR04, это была не самая лучшая система, хотя бы потому, что я не мог сам определять сколько УЗ волн создать, не мог изменять их мощность, и этот излучатель был достаточно громоздким.
Тогда я создал вторую версию, которая была намного более громоздкой, но я мог уже регулировать все при помощи STM32 и L293D, которые напрямую подключались к УЗ динамику. Теперь вместо штатных 5 вольт я подавал 17, и это сильно увеличило рабочую зону. Также я добавил радиомодуль и интерфейс RS485, что сделало этот модуль автономным.
После ряда испытаний я решил уменьшить излучатель до приличных размеров и скомпоновал все поплотней, в результате получилось то, что вы видите на последней картинке.
Состав:
- STM32 — получает команду Trig (начать измерение расстояний) по радиоканалу и излучает УЗ сигнал, также передает команды, полученные из радиомодуля в RS485 (использую для дистанционного управления мобильной платформой);
- RS485 — информационный интерфейс устройства для пользователя;
- DC-DC повышающий — преобразует питающее 5В в 17В для излучателя;
- L293D — использую для генерации сильного УЗ сигнала с напряжением 17В;
- nRF24 — радиоканал;
- Излучатели — 6 излучателей, которые выпаял из модуля HC-SR04.
Базовый модуль
Рис. 6 — Базовый модуль.
Состав:
- STM32 — посылает излучателю и приемникам Trig, получает команды по USB от ПК для передачи через радиоканал излучателю (он же мобильный модуль);
- nRF24 — передача Trig излучателю и передача команд излучателю.
ПК модуль
ПК через RS485 переходник подключен ко всем УЗ приемникам, по данному интерфейсу получает от них все длины и высчитывает координаты мобильного модуля. Через USB подключен к базовому модулю и через него передает управляющие команды на мобильный модуль.
Расположение модулей в рабочей зоне
Карта комнаты с размещенными по углам УЗ приемниками выглядит вот так:
Рис. 7 — Общая идея расположения датчиков.
Рис. 8 — Вид сверху в масштабе (кружками, с цифрами внутри, обозначены датчики).
Алгоритм работы УЗ системы определения координат
- Базовый модуль посылает команду Trig излучателю (по радиоканалу) и приемникам (по проводу).
- Излучатель начинает излучать, а приемники начинают слушать эфир.
- Каждый приемник, услышав УЗ сигнал, записывает время между командой Trig и временем получения этого сигнала и переводит это в расстояние.
- Приемники по RS485 отправляют расстояния от излучателя до себя на ПК.
- ПК рассчитывает координаты излучателя.
Работа системы
Запустив это все, мы получаем координаты объекта, точность зависит от места в комнате. В лучших местах погрешность не превышает пары сантиметров, а в худших… ну вы сами все можете увидеть на рисунке 9.
Рис. 9 — Перемещение излучателя по комнате.
На данном рисунке четыре набора координат, так как мы имеем четыре приемника, а для определения координат в трехмерном пространстве нам необходимо только три, то количество комбинаций приемников у нас четыре.
Как видно из рисунка, в общем система определяет координаты верно, но в разных местах погрешность разная. Я перемещал излучатель параллельно осей Х и У, где-то с интервалом между линиями в метр, где-то в полметра, это видно на рисунке. Самая лучшая точность в центре, а по краям все плохо, ибо оттуда УЗ сигнал падает на приемник под большим углом, и это создает искажения в оцифрованном сигнале.
После фильтрации и усреднения четырех пар координат мы получаем следующую картину:
Рис. 10 — Усредненная траектория.
Не айс, но уж что есть.
Для интереса покажу, как это все выглядит в 3D, ведь третья координата у нас тоже есть, хотя она в моем проекте и не нужна, ведь мобильный робот перемещается только в плоскости.
Рис. 11 — 3D траектория.
Как мы видим, все точки лежат примерно в одной плоскости, и это корректно, ведь излучатель я возил по полу не отрывая.
А вот пример неудачной проезда мобильной платформы с излучателем, траектория ее движения видна прекрасно. По замыслу платформа должна была вернуться в исходную точку, проехав по прямоугольной траектории, но не сложилось, в следующих статьях я расскажу почему.
Рис. 12 — Траектория перемещения мобильной платформы.
Актуальные проблемы
У меня на данный момент есть целый ряд актуальных проблем, и если кто-то может что-то подсказать, прошу написать это в комментариях или в VK:
vk.com/b__s__v
1. Чем лучше принимать УЗ сигнал? Датчики HC-SR04, которые я сейчас использую для приема и усиления УЗ сигнала, не лучший вариант. Во-первых, потому что они всегда принимают сигнал только с одной частотой и по ним нельзя сделать частотное разделение источников сигнала (а мне это интересно попробовать), к тому же они слишком громоздкие, и я сильно от них зависим.
2. Как убрать искажения координат в разных углах комнаты? На той сетке, которую я нарисовал на полу, видно что порой прямые начинают отклоняться, хотя я мобильный модуль всегда перемещал ровно, и от этого надо как-то избавляться.
3. У nRF24 пропадает сигнал. Когда модули находятся близко, то проблем нет, но стоит их разнести на несколько метров и самому встать между ними, как сообщения доходят через одно. У меня там нет повторной отправки сообщений, так как я по этому каналу передаю синхросигналы, и они должны всегда приходить в ту же секунду. У меня модули с внешней антенной, и тот, что на базовом модуле лучше работает без антенны, чем с ней. Ничего не понимаю, мощность на максимуме.
4. Места продвижения проекта. Если кто-то знает международные площадки типа Хабра на английском языке, скиньте ссылки, пожалуйста, а то я так ничего приличного и не нашел, а stackoverflow, это просто вопросы и ответы, не совсем то, чтобы выкладывать подобные статьи.
5. Замечания и предложения. Если кто-то хочет высказаться, то буду рад и критике, и предложениям.
Это далеко не финал моего проекта, хотя время и подходит к концу, но если будет интерес, то напишу статью о том, как на основе этой системы ездит мобильный робот по заданным координатам у меня в комнате.