Как загрузить карту помещения в контроллер Arduino

Тема в разделе "Arduino & Shields", создана пользователем Den1975, 21 мар 2014.

  1. atompost

    atompost Гик

    ИМХО, могу предложить вариант с магнитными метками и датчиком Холла, как вариант, дешево и сердито :)
     
  2. NR55RU

    NR55RU Гик

    Ну как я и написал сие была лишь мысль :)
    Кстати а ситуация не поменяется если пинг между телегой и активированным маячком будет проходить цикл ну например 1000 пингов туда сюда, таким образом метр превратится минимум в 2 км, соответственно замерять время цикла обмена.
     
  3. geher

    geher Гуру

    Подозреваю, что ардуины для обсчета радиопинга на столь коротких дистанциях с нужной точностью просто не хватит. А серия пингов будет только накапливать погрешности работы (хотя бы за счет того, что измерения будут происходить с частотой не большей, чем у МК). Нужен специализированный приемник и наземная инфраструктура по типу GPS (т.е. передатчики, излучающие сигнал о своем положении и текущем времени).
     
    Последнее редактирование: 23 мар 2014
    Samedy091020 нравится это.
  4. TheMarshall

    TheMarshall Нуб

    Для определения положения робота достаточно разместить видеокамеру на потолке или в углу комнаты. Это позволит как, визуально следить за роботом, так и определять его месторасположение. И уже после определения координат робота корректировать его маршрут.

    Желательно, что бы робот имел свою базу куда он вернется для подзарядки.

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

    Alexey0027 Нуб

    Полностью согласен, оперировать будет весьма сложно, в помещении эхолокатор и ик датчик это единственное что можно применить. Есть конечно сканеры на лазерах , видел такую игрушку и на них делают электрокары для беспилотного перевоза по цеху коробок. Но стоит такой прибор даже не 100 тыр. Для большинства задач можно эхолокацией обойтись, вон мыши летучие , в слепую на каких скоростях маневрируют )
     
  6. Megakoteyka

    Megakoteyka Оракул Модератор

    Как вариант, инерциальная система с опорными точками в виде магнитов в полу.
     
  7. acos

    acos Официальный гик Администратор

    А ситуация не поменяется, если вместо радио использовать звук? Нпример, робот делает "ПИП" на 40 кГц, а ему отвечают из одного угла по радио.. Делает "ПИП" на 50 кГц - отвечают из другого угла. Или не радио а по ИК на 38 кГц посылку шлют
     
  8. NioFBI

    NioFBI Нуб

    "ПИП" - это в случае прямой видимости. За плинтусом или за ножкой табуретки "ПИП" будет слышен отраженный от стены, а это совсем уже другое расстояние получиться.
    УЗ Дальномер - Не всегда хорош. Важны: Угол отражающей поверхности и Материал.
    ИК Дальномер - большая погрешность. Тоже многое зависит от поверхности, погоды и т.д..
    Камера под потолком - хорошая идея. Но если мы говорим о одной комнате. А в идеале нужна система без доп оборудования и пред-подготовки, в связи с этим отпадает свой (локальный) GPS и магнитики\маркеры на полу.
    Лазерный дальномер - это уже круче и серьезнее. В идеале им можно и комнату в 3D отрисовать и точность на высоте. Но подобные наработки довольно трудоемки, а готовые решения дорогие.

    При достаточном уровне знаний, я бы сделал так: На тележке поставил бы две камеры на удалении друг от друга по горизонтали и слал бы изображения на компьютер. У последнего - достаточно мозгов, что бы обработать изображение сделанное с разных ракурсов и превратить в 3D модель увиденного. Качество модели будет не ах, но и мы не по одному кадру ставить маршрут будем. Пока тележка движется вперед, она параллельно отправляет снимки на комп, который анализирует снимки, и делает нашу 3D модель более высокополигонной, и корректирует маршрут в режиме реального времени. Благодаря современным достижениям техники, в роли компьютера можно использовать мобильный телефон (смартфон), у некоторых моделей достаточно вычислительной мощности, дабы полностью заменить ПК, а в связи с габаритами смартфона, его мозги вполне уместятся на тележке.
     
  9. Wenclav

    Wenclav Нерд

    Есть вариант: с тележки отправлять пинг на радиомодули, которые расположены в разных концах помещения и объединены на ПК. Зная точное расположение модулей, вычисляем положение тележки и отправляем ей ее координаты на территории.
     
  10. funyfizik

    funyfizik Нерд

    Помещение одно и тоже? Другие объекты в помещении меняют свои позиции? Или все статично?
     
  11. Wenclav

    Wenclav Нерд

    В принципе не важно. Ультразвуковые, ИК или лазерный дальномер в плюс к системе координации позволит тележке двигаться согласно алгоритму из точки А в точку Б. Главное, задать параметры (размер помещения, расстояния между радиомодулями в систему координации. А тележка, зная свои координаты и "видя" препятствия, создаст свою карту помещения, где она находится.
     
  12. funyfizik

    funyfizik Нерд

    Можно и без датчиков устроить все, необходимо только знать физические параметры окружения, площадь помещения, размер колес, расстановку предметов в комнате и использовать сервоприводы постоянного вращения - этого достаточно
     
  13. Wenclav

    Wenclav Нерд

    Не факт. Пробуксовка колес, ошибки энкодера, и т.д. Робот очень быстро потеряется. Нужно не только абсолютные значения перемещений, но и относительные. Тогда систему можно будет встраивать не только в игрушки, но и в более серьёзные проекты.
     
    Samedy091020 и funyfizik нравится это.
  14. funyfizik

    funyfizik Нерд

    Тогда давайте вместе представим самый простой и оптимальный способ для реализации этого проекта?

    Пока я работал только с моторами и т д. До радиосигналов дело не дошло так как не пришло еще на почту LOL
     
  15. Wenclav

    Wenclav Нерд

    Разработать ТЗ? Ок.
    1. Габариты помещения?
    2. Точность позиционирования?
    3. Габариты тележки?
    4. Головное устройство?
    5. Количество тележек?
    Остальное нужное, но пока не придуманное...
     
  16. EvgenJekson

    EvgenJekson Нерд

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

    А если по существу, то вот мои теоретические мысли на текущий момент: на базе raspberry использую MySQL для хранения отсканированной квартиры. Тут выше озвучивали вариант типа:
    1111111111111
    1000011000001
    1000011000001
    1000000000001
    1000000000001
    1000000000001
    1111100111111
    Вот это должно подойти. Дело только в детализации (разрешении).

    Таким образом задача разбивается на 2:
    1 - сделать сканирование квартиры и создание карты;
    2 - гонять по квартире по карте.

    Для сканирования:
    помещаем тележку в цент комнаты. сверху я на серву прилеплю 2 дальнометра, смотрящие друг относительно друга на 180 градусов. Серва по типу локатора будет непрерывно крутиться туда-сюда в диапазоне 180 градусов. Таким образом мы охватываем все 360 градусов в округе. Для определения севера на тележку ставим компас. Тележка перед сканированием устанавливается ровно на север.

    В MySQL (база данных такая кто не в курсе), создаем таблицу с полями:
    x, y, wall_level
    x и y - это координаты относительно стартовой точки сканирования
    wall_level - сколько раз (сколько итераций) подтвердили нахождение в этой координаты препятствия.

    Включаем телегу на x=0 y=0. Серва начинает вращать дальномеры, которые начинают возвращать расстояния. Пускай север - это 0 градусов. таким образом допустим первая итерация: на 0 градусов 1.5 метра, на 180 градусов 2.4 метра

    Допустим у нас разрешающая способность матрицы будет 1 сантимер. Таким образом мы в цикле пробегаемся по всем координатам, через которые прошел луч 1 (на 0 градусов) и луч 2 (на 180 градусов). Для каждой координаты ищем их записи в MySQL. Если пока еще нет (а их не будет в первый раз) - значит добавляем: 150 координат для первого дальномера и 240 координат для второго дальномера. Если уже есть - где была пустота - туда ноль, координата с препятствием (померенная дальность) - увеличиваем на единицу кол-во раз, когда эта координата была отмечена как стена (wall_level++). Таким образом x=0 а y=0...148 wall_level = 0, а для x=0,y=149,wall_level=1 а для x=0 а y=0...-238 wall_level = 0, а для x=0,y=-239,wall_level=1

    wall_level думаю будет необходим для дальнейшего определения временных препятствий (кошак, стул, человек) для многократно сканированной комнаты где wall_level > 100 если wall_level = 1, 2 - значит или только что появилось или временная преграда.

    Записали первую итерацию. Сдвинули серву на сколько то там градусов. Сколько там у них разрешение? 1 градус? Опять опрос дальномеров. Первый будет уже смотреть на 1 градус, второй на 181 градус. Вот тут интересное еще предстоит решение: надо определить находясь в точке 0,0 и зная угол и длину луча какие именно сантиметровые квадратики с координатами можно указать как пустые, а для какого квадратика указать стенку. Но я думаю математическое решение еще поищу и найду, ведь это фактически задача: как нарисовать на экране с таким то разрешением прямую линию (и на сколько она будет прямой при детальном рассмотрении, какие именно светодиоды должны зажечься).

    Ну так вот, второй раз опросили дальномеры, записали или обновили координаты в базе данных, следующий 1 градус сдвиг. и так все 180 градусов. Дальше сдвигаем машинку на какое то кол-во клеток (виртуальных сантиметровых) вперед, повторяем процедуру. уже, допустим находясь в координатах x=0 y=10 мы делаем все тоже самое, как и для x=0 y=0, только теперь когда пишем данные в MySQL учитываем смещение по y. И так далее.

    В теории наверное можно wall_level делать не =0, а wall_level--, но тут надо подумать/потестить. на вскидку не понятно как лучше...

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

    Плюс есть идея использовать дальномер, смотрящий перпендикулярно вверх. Может не всем подойдет, но у меня высота потолков в комнатах разная: где то навесной потолок, где то декоративные большие вставки, где то дверные проемы. В общем эта информация может как то рядом ляжет (h) с координатами x и y.

    Ну а дальнейшее определение своего положения после того, как карта помещения составлена: если мы знаем где север, крутанули на месте серву в дальномерами, и на основании карты пытаемся определить в какой точке мы находимся используя чистую геометрию с небольшими допусками на погрешность. Если решений не одно (например, в комнате не только стены, а всяхая хрень валяется, которая или сейчас есть, или в карту попала), то проезжаем еще немного, и из выбранного ранее кол-ва возможных вариантов оставляем только те, для которых наши текущие показания приемлемы и так далее. пока не останется однозначное положение машинки по x и y

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

    P.S.
    пока перечитывал свою писанину появилась новая клевая идея: после того, как мы составили карту комнаты/квартиры, у нас появилась здоровенная база данных, у которой есть x, y, и понимание стена тут по этой координате или ехать можно. Это конечно клево, но определить себя только по результатам показаний дальномеров - это жесть.
    А вот если мы возьмем, и "перелопатим" эту таблицу в другую:
    формируем таблицу с полями: x,y,d0,d90,d180,d270
    где d0...280 - расстояние до стенки из точки x,y относительно севера.

    таким образом у нас получится офигенно здоровенная таблица, по которой мы можем свериться когда в неизвестном для тележке месте ее включим, и все, что у нее будет - это знание где север, и какое расстояние до стенок на 0, 90, 180 и 270 градусов. прямая выборка из этой оптимизированной второй таблицы сразу нам даст возможные варианты ответов. чутка сдвинулись - пробили расстояния на 0, 90, 180 и 270 и оставили те варианты, которые были в первой итерации. опять чутка сдвинули и просканировались - определили 3-ий набор координат из выборки по второй итерации, и так пока не определим однозначно.
    вот!

    P.P.S.
    Для фиксации какие координаты попались при прохождении луча дальномера: можно использовать так называемый Алгоритм Брезенхэма. он его еще аж в 68 году придумал. И с тех пор его активно применяют для рисования линий на всяких телеках и прочем.
    https://ru.wikipedia.org/wiki/Алгоритм_Брезенхэма

    На PHP делается достаточно легко. Там на вход функции поступают координаты начала и координаты окончания. А функция может выдать в каких координатах будет луч. таким образом для всех полученных координат кроме последнего мы ставим что там пусто. а на последней координате ставим единицу - стена.

    Ну еще осталось только по координатам тележrи и углу и дальности вектора найти координаты окончания вектора - и дело с наполнением матрицы комнаты почти в шляпе ))
     
    Последнее редактирование: 23 дек 2015
    Gennadius и AbaddoN__S нравится это.
  17. Unixon

    Unixon Оракул Модератор

    Вполне рабочий вариант даже для не сильно мощного МК. Базовая 2D карта помещения может храниться в виде полигона с довольно небольшим количеством точек. Моментальную 2D карту могут строить УЗ и ИК дальномеры на подвижных монтировках, а фиксированные датчики в сочетании с инерциальной системой позволят составить пространственно-временную карту. Определение местоположения сводится к задаче оптимизации, минимизирующей норму разности между базовой и моментальной картой в пространстве положения-ориентации. Норма также должна включать в себя некоторую величину, отвечающую за достоверность результата, типа "вероятность телепортации в текущее положение из прошлого", получаемую от инерциальной системы, чтобы не заблудиться на карте из нескольких одинаковых помещений или частей карты одинаковых в пределах видимости датчиков.
     
  18. DrProg

    DrProg Вечный нерд

    Был тут развернутый пост про GPS внутри квартиры на основе УЗ, если не ошибаюсь. Очень сложная но не очень точная система.

    Еще теоретически рассматривали вариант определения перемещения робота по типу шариковой мыши, но это только для очень ровных и чистых полов. По принципу оптической мыши - тоже для ровных, но менее грязных полов. Причем оба "мышиных" варианта должны работать минимум на двух датчиках, чтобы отследить не только линейное перемещение, но и повороты робота. В голове робота должна содержаться не только карта помещения (с какой градацией? см? мм?), но и координаты устройства по X, Y и углу. Имея эти данные МК вычисляет куда ему ехать. Опять же какова цель езды? Добраться из точки А в точку Б? Пропылесосить пол? Найти самое яркое место в комнате? Бесцельно кататься распугивая котов и веселя публику?

    Дорогущие промышленные автоматические тележки развозящие по цехам разные грузы и те ориентируются по меткам на полу. Потому что так дешевле и надежнее.
     
    ИгорьК нравится это.
  19. Tomasina

    Tomasina Сушитель лампочек Модератор

    На крупнейшем в мире автоматизированном складе Amazon просто на полу сетка из штрих-кодов - аппарат всегда знает каком квадрате находится и в каком направлении ориентирован), плюс дальномеры для контроля препятствий. Просто и надёжно.


     
    Последнее редактирование: 24 дек 2015
    EvgenJekson, Unixon и DrProg нравится это.
  20. Unixon

    Unixon Оракул Модератор

    Цель для системы навигации - всегда из точки А в точку Б. Вопрос "зачем" не относится к ее задачам.

    Но вот что делать, когда по условиям задачи меток нет и быть не может?