Ультразвуковая локальная система позиционирования

Daemon2017
Offline
Зарегистрирован: 08.10.2013

Забабахал ультразвуковую локальную систему позиционирования для мобильных роботов. 

Рабочая зона: 32 кв.м.
Точность: +-5 см.

Я допустил некоторые ошибки по незнанию и переделывать что-либо было поздно, но в статье постарался предостеречь читателей от их повторения.

Полную документацию под моим авторством можно прочитать на ВикиВерситете. Если что-то расписал недостаточно понятно - комментируйте, я дополню статью :)

Большое спасибо форумчанам jeka_tm, leshak, axill, Andrey_Y_Ostanovsky, step962, Garry, pmaster, Клапауций, com, vdk, MosGen, которые помогали советами на разных этапах создания проекта.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

прикольно

но не совсем понял как работает. ты закрыл передатчики и только "слушаешь" приемниками. на фото у тебя 4 приемника и 1 передатчик на роботе. 2 приеника как оси x и y. третий почему то наверху, и один в 0 координат

ардуины между собой синхронизированы наверно по i2c. зачем то 2 шт max485. наверно чтобы не тянуть uart далеко, он этого не любит, а 485 легко

2 приемника сидят на spi, 1 на прерывании, хотя может случайно выбраны пины

Daemon2017
Offline
Зарегистрирован: 08.10.2013

jeka_tm пишет:

прикольно

но не совсем понял как работает. ты закрыл передатчики и только "слушаешь" приемниками. на фото у тебя 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, а так - да, разъемы выбраны случайно (см. схему соединений в статье). 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

непонятно вот что. эти датчики имеют относительно узкую диаграмму направленности. как это компенсируется не понял. плюс передатчик получается шлет сразу во всех направлениях

zhenious
Offline
Зарегистрирован: 03.07.2014

Работа конечно интересная !

Но я тоже не понял как быть с диаграммой, вот кстати я делал небольшое исследование ДН такого датчика (для представления):

https://vk.com/myrobotics?w=wall-73778892_1

При такой конструкции нужна ДН 90 гр.

в вашем случае так:

Заштрихована область пересечения диаграмм т.е. рабочая область

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

вот это как раз и непонятно как в других областях работает

Daemon2017
Offline
Зарегистрирован: 08.10.2013

jeka_tm пишет:

непонятно вот что. эти датчики имеют относительно узкую диаграмму направленности. как это компенсируется не понял. плюс передатчик получается шлет сразу во всех направлениях

Производители HC-SR04 в даташите пишут, что диаграмма направленности такова:

Т.е. охват 45+ градусов, но наибольшая эффективность в секторе 30 градусов.

За всё время испытаний проблем с диаграммой направленности не было ни разу. Исключение - мертвая зона в ближайших 0.5 м * 0.5 м, вызванная тем, что сигнал попадает не на 3, а на или 1 приёмника, т.е. вместо координат x;y мы получаем только x, либо только y, а порой и вовсе ничего не получаем.

Проблема решается элементарно - на робота ставить не один УЗ-передатчик, а 4 и более, размещая их квадратом. Учитывая то, что та часть системы, что размещена на роботе, ТОЛЬКО передает, то все 4 передатчика можно повесить на один раъем Дуни.

Daemon2017
Offline
Зарегистрирован: 08.10.2013

zhenious пишет:

Работа конечно интересная !

Но я тоже не понял как быть с диаграммой, вот кстати я делал небольшое исследование ДН такого датчика (для представления):

https://vk.com/myrobotics?w=wall-73778892_1

При такой конструкции нужна ДН 90 гр.

в вашем случае так:

Заштрихована область пересечения диаграмм т.е. рабочая область

Справедливое замечание, но, как я говорил сообщением выше, у меня такой проблемы не было. Возможно, если бы у меня была не инвертированная система, а обычная - как в GPS (т.е. на роботе - приемник, на "табуретке" - передатчики), то она [проблема] вполне могла бы появиться.

Сейчас я работаю над улучшением системы (хочу добавить возможность работы в пространстве, а не только в плоскости, а также сделать ее беспроводной и добавить возможность получения координат по данным с 4-х ЛЮБЫХ приемников). Там передатчик на роботе будет представлять собой 5 штук HC-SR04: 4 смотрят в разные стороны Света, а пятая - наверх. Если столкнусь с описанной Вами проблемой, то и на приемниках придется что-то делать: увеличивать и там количество HC-SR04 на каждом модуле.

Vladimirf
Offline
Зарегистрирован: 18.12.2015

Привет!
Как продвигается Ваша разработка?

Alex_11
Offline
Зарегистрирован: 02.05.2017

Интересно,получилось ли у вас объеденить группу датчиков HC-SR04  в одну групп к одной плате Arduino ? 

Alex_11
Offline
Зарегистрирован: 02.05.2017

Здравствуйте. Если вы разбираетесь в этой теме, то ответьте на вопрос, если не затруднит, почему автор не повесил все датчики HC-SR04  на одну Arduino? 

DezmontDeXa
Offline
Зарегистрирован: 09.02.2016

Привет!

Собираю такую же систему позиционирования, но мне изначально нужно было для 3х мерного пространства.
Как я понял, при использовании только 3х фиксированных точек для 3х мерного пространства, мы получим 2 точки с различием по Z-оси. Т.е. Z будет или положительным или отрицательным(Ну или его вовсе не удастся рассчитать).
Что бы определить какой именно Z нужен, я рассчитал угол "Б - О - Oбъект" треугольника , по известным сторонам. Ну и соответственно в зависимости от того тупой угол или острый можно определить знак Z координаты объекта.
 

Из википедии:
 

Следствия из теоремы косинусов

  • Теорема косинусов может быть использована для нахождения косинуса угла треугольника
    cos⁡α=b2+c2−a22bc{\displaystyle \cos {\alpha }={\frac {b^{2}+c^{2}-a^{2}}{2bc}}}\cos {\alpha }={\frac {b^{2}+c^{2}-a^{2}}{2bc}}
В частности,
  • Если b2+c2−a2>0{\displaystyle b^{2}+c^{2}-a^{2}>0}b^{2}+c^{2}-a^{2}>0, угол α — острый
  • Если b2+c2−a2=0{\displaystyle b^{2}+c^{2}-a^{2}=0}b^{2}+c^{2}-a^{2}=0, угол α — прямой (если угол α прямой, то теорема косинусов становится теоремой Пифагора)
  • Если b2+c2−a2<0{\displaystyle b^{2}+c^{2}-a^{2}<0}b^{2}+c^{2}-a^{2}<0, угол α — тупой
     

 

Я довольно редко сталкиваюсь с подобными расчетами в жизни.
Вернен ли мой способ установки знака z-координаты объекта?