Ультразвуковая локальная система позиционирования
- Войдите на сайт для отправки комментариев
Чт, 13/08/2015 - 20:09
Забабахал ультразвуковую локальную систему позиционирования для мобильных роботов.
Рабочая зона: 32 кв.м.
Точность: +-5 см.
Я допустил некоторые ошибки по незнанию и переделывать что-либо было поздно, но в статье постарался предостеречь читателей от их повторения.
Полную документацию под моим авторством можно прочитать на ВикиВерситете. Если что-то расписал недостаточно понятно - комментируйте, я дополню статью :)
Большое спасибо форумчанам jeka_tm, leshak, axill, Andrey_Y_Ostanovsky, step962, Garry, pmaster, Клапауций, com, vdk, MosGen, которые помогали советами на разных этапах создания проекта.
прикольно
но не совсем понял как работает. ты закрыл передатчики и только "слушаешь" приемниками. на фото у тебя 4 приемника и 1 передатчик на роботе. 2 приеника как оси x и y. третий почему то наверху, и один в 0 координат
ардуины между собой синхронизированы наверно по i2c. зачем то 2 шт max485. наверно чтобы не тянуть uart далеко, он этого не любит, а 485 легко
2 приемника сидят на spi, 1 на прерывании, хотя может случайно выбраны пины
прикольно
но не совсем понял как работает. ты закрыл передатчики и только "слушаешь" приемниками. на фото у тебя 4 приемника и 1 передатчик на роботе. 2 приеника как оси x и y. третий почему то наверху, и один в 0 координат
ардуины между собой синхронизированы наверно по i2c. зачем то 2 шт max485. наверно чтобы не тянуть uart далеко, он этого не любит, а 485 легко
2 приемника сидят на spi, 1 на прерывании, хотя может случайно выбраны пины
Как работает - довольно подробно расписано в статье: шлю синхросигнал и добиваюсь того, чтобы передатчик на роботе и 3 приемника (4-й это задел на будущее, а именно - для работы в трех плоскостях) на "табуретке" запустились одновременно.
Тот, что наверху, ныне используется для левых задач: от главной Дуни (которая в координате 0) брошен I2C на нее. А уже верхняя Дуня шлет координаты на ПК через USB (на главной Дуне то 0 и 1 разъем заняты под MAX485).
По синхронизацию по I2C - все верно :)
По RS-485 тоже верно - он как раз для передачи синхросигнала и данных на большие расстояния (робот то заметно дальше уезжает, чем расстояние между приемниками).
На SPI у меня висят только MAX485, а так - да, разъемы выбраны случайно (см. схему соединений в статье).
непонятно вот что. эти датчики имеют относительно узкую диаграмму направленности. как это компенсируется не понял. плюс передатчик получается шлет сразу во всех направлениях
Работа конечно интересная !
Но я тоже не понял как быть с диаграммой, вот кстати я делал небольшое исследование ДН такого датчика (для представления):
https://vk.com/myrobotics?w=wall-73778892_1
При такой конструкции нужна ДН 90 гр.
в вашем случае так:
Заштрихована область пересечения диаграмм т.е. рабочая область
вот это как раз и непонятно как в других областях работает
непонятно вот что. эти датчики имеют относительно узкую диаграмму направленности. как это компенсируется не понял. плюс передатчик получается шлет сразу во всех направлениях
Производители HC-SR04 в даташите пишут, что диаграмма направленности такова:
Т.е. охват 45+ градусов, но наибольшая эффективность в секторе 30 градусов.
За всё время испытаний проблем с диаграммой направленности не было ни разу. Исключение - мертвая зона в ближайших 0.5 м * 0.5 м, вызванная тем, что сигнал попадает не на 3, а на или 1 приёмника, т.е. вместо координат x;y мы получаем только x, либо только y, а порой и вовсе ничего не получаем.
Проблема решается элементарно - на робота ставить не один УЗ-передатчик, а 4 и более, размещая их квадратом. Учитывая то, что та часть системы, что размещена на роботе, ТОЛЬКО передает, то все 4 передатчика можно повесить на один раъем Дуни.
Работа конечно интересная !
Но я тоже не понял как быть с диаграммой, вот кстати я делал небольшое исследование ДН такого датчика (для представления):
https://vk.com/myrobotics?w=wall-73778892_1
При такой конструкции нужна ДН 90 гр.
в вашем случае так:
Заштрихована область пересечения диаграмм т.е. рабочая область
Справедливое замечание, но, как я говорил сообщением выше, у меня такой проблемы не было. Возможно, если бы у меня была не инвертированная система, а обычная - как в GPS (т.е. на роботе - приемник, на "табуретке" - передатчики), то она [проблема] вполне могла бы появиться.
Сейчас я работаю над улучшением системы (хочу добавить возможность работы в пространстве, а не только в плоскости, а также сделать ее беспроводной и добавить возможность получения координат по данным с 4-х ЛЮБЫХ приемников). Там передатчик на роботе будет представлять собой 5 штук HC-SR04: 4 смотрят в разные стороны Света, а пятая - наверх. Если столкнусь с описанной Вами проблемой, то и на приемниках придется что-то делать: увеличивать и там количество HC-SR04 на каждом модуле.
Привет!
Как продвигается Ваша разработка?
Интересно,получилось ли у вас объеденить группу датчиков HC-SR04 в одну групп к одной плате Arduino ?
Здравствуйте. Если вы разбираетесь в этой теме, то ответьте на вопрос, если не затруднит, почему автор не повесил все датчики HC-SR04 на одну Arduino?
Привет!
Собираю такую же систему позиционирования, но мне изначально нужно было для 3х мерного пространства.
Как я понял, при использовании только 3х фиксированных точек для 3х мерного пространства, мы получим 2 точки с различием по Z-оси. Т.е. Z будет или положительным или отрицательным(Ну или его вовсе не удастся рассчитать).
Что бы определить какой именно Z нужен, я рассчитал угол "Б - О - Oбъект" треугольника , по известным сторонам. Ну и соответственно в зависимости от того тупой угол или острый можно определить знак Z координаты объекта.
Из википедии:
Следствия из теоремы косинусов
Я довольно редко сталкиваюсь с подобными расчетами в жизни.
Вернен ли мой способ установки знака z-координаты объекта?