Робот с ультразвуковыми датчиками: рисуем карту помещения.

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

Здравствуйте жители форума.

Есть у меня вот такая штука, ползает по дому - обходит препятствия. "Видит" ультразвуковыми датчиками (на фото их нет стоят справа , возле моторов, фотки с датчиками нету).

Хочу чтобы эта штуковина ползая по дому нарисовала карту помещения и сохранила её на карту памяти. Пускай не за один день. Пускай придется еще одну или даже две ардуины прицепить.

Подскажите, как реализовать? Может кто-то видел готовые проекты, может посоветуете что почитать.

Спасибо.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Кое-какие соображения изложены здесь: http://arduino.ru/forum/proekty/robot-kartograf

Но проект не завершен, т.к. оказалось, что разрабатываемая программа перестала помещаться в программную память Uno, а Mega не помещается на имеющейся тележке. Да и задачи появились более (для меня) интересные.

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

Andriano, спасибо ознакомился. Наиболее интересная мне часть - десятая, пустая :)

Сам пока думаю про битмап. Робот попадая в новое помещение будет получать пустую битовую карту с возможностью её масштабирования. Робот не знает большое это помещение или маленькое, не знает его планировку, по этому получает небольшой кусок с ячейками, условно 10 на 10 см и начинает его объезжать. Т.к. робот собран на шаговых моторах, контролировать его перемещение не составит труда. Находясь на обследованной клетке робот сможет увидеть свободна ли следующая клетка, если да - она остается белой, если нет - закрашивается черным. И так до тех пор пока все клетки не будут обследованны. Если изначально выделенного участка не хватит, карта будет добавляться в любую сторону, а по завершению работы будет выдаваться рисунок в формате BMP.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

КонстантинБ пишет:

 по завершению работы будет выдаваться рисунок в формате BMP.

Интересно, скока будет весить рисунок, в формате bmp...

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

ну не обязательно ВМР, в любом формате можно его выводить. Да и сам рисунок не обязательно ардуина будет рисовать, может смартфон/планшет к роботу прикрутим, может по радиоканалу будет скидывать данные на ноут, а тот рисовать карту. В этом варианте проблем с весом файлов не будет. Идея на стадии обсуждения, я собственно для этого тему и начал, чтобы какие-то моменты, нюансы прояснить. Сам новичек в этом, пока :)

Клапауций 089
Клапауций 089 аватар
Offline
Зарегистрирован: 14.01.2018

DetSimen пишет:

Интересно, скока будет весить рисунок, в формате bmp...

если карту рисовать на полу помещения, то - нисколько.
достаточно будет потом сфоткать результат с потолка. О_О
ТС, приматывай к телеге чорный фломастер синей изолентой.
да... не благодари - у меня ещё целый мешок бесплатных индей.
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Битмап, мне кажется, неподъемно по памяти. Сам я ориентировался на построение ограничивающего полигона.

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

Клапауций 089 пишет:

ТС, приматывай к телеге чорный фломастер синей изолентой.

да... не благодари - у меня ещё целый мешок бесплатных индей.

Не не, фломастер  и изолента - пройденный этап.

Не люблю повторяться :)

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

andriano пишет:

Битмап, мне кажется, неподъемно по памяти. Сам я ориентировался на построение ограничивающего полигона.

Даже черно-белый не подъемно?

Ушел читать про полигоны.

Logik
Offline
Зарегистрирован: 05.08.2014

Подемный - неподемный... А посчитать? При 10х10см квадратный метр- 100бит. Для комнаты в 20 квадратов 250 байт. Более чем достаточо. Но я бы всетаки про векторный формат думал.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Logik пишет:

Подемный - неподемный... А посчитать? При 10х10см квадратный метр- 100бит. Для комнаты в 20 квадратов 250 байт. Более чем достаточо.

Ой-ли?

20 метров - это примерно 5х4. Диагональ около 7 метров. В каком углу комнаты роботу предстоит начинать свою работу, он не знает. Следовательно, радиус поля построения должен быть не менее 7 м. Считая квадрат 14х14 получаем 200 кв.м. - 20000 ячеек - 2.5 кбайт. 

Это при условии, что точность 10 см вполне устраивает, и обследовать предстоит только одну комнату не более 20 кв.м - не квартиру целиком, не коридор, не зал в общественном месте и т.п.

 

PS. Считать тоже нужно уметь.

Logik
Offline
Зарегистрирован: 05.08.2014

Не мозгами рептилии такое проектировать. Для 20квадратов зарезервировать памяти на 200?! 8)  Не писали бы - умней выглядели бы. Так распоряжатся ресурсами - бюджет страны распиливать только.

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

ПС. Умные люди при решении задачи продумывают подходы, облегчающие решение, экономящие память и пр. ресурсы, а не наоборот - выдумуют фигню в память не влазящую. Например приблизительно определяют направление стен комнаты и сканируют паралельно им, чтоб не по диагонали карта строилась и машина попусту не ездила. А описать окружность вокруг прямоугольника и квадрат вокруг окружности  с полезным использованием только 10% площади карты - просто дурка какаято. Понятно что ресурсы не безграничны и картографировать весь город ардуиной не выйдет. Никак. Но для реальной площади комнаты вполне годно. Если конечно грамотно считать, проектироват и код писать. А иначе конечно ни в мегу, ни в уну не влезет.

Logik
Offline
Зарегистрирован: 05.08.2014

Скажите, КонстантинБ, а как реализован в Вашем роботе контроль углов поворота? Просто без этого врядли чтото выйдет (погрешности в углах поворота легко совершаются и быстро накапливаются, а перемещение не совсем туда даже в 2-3 градусов на перемещениях в метры уже в соседную клетку приведет и карта разрушится). И из Вашего описания непонятно как дела с этой проблемой.

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

Logik пишет:

Скажите, КонстантинБ, а как реализован в Вашем роботе контроль углов поворота?

На данном этапе никак. Но привод на шаговых моторах, т.е. есть возможность считать шаги - пройденное растояние. 

И я уже близок к установке еще пары ультрасоников, с двумя проблематично в дырку между коробками попасть. Телега психует, не хочет туда ехать :)