Робот художник. Как перевести растровую картинку в набор функций?
Решил построить самодельный робо-манипулятор, способный воспроизводить любой текст или изображение на бумаге максимально похожим на человека образом. Если с текстом все относительно понятно, с обработкой изображения возникает большой вопрос. Я представлял себе реализацию следующим образом: Изображение переводится в набор контуров по методу Собеля (1), получившееся черно-белое изображение анализируется, на выходе получаем набор функций, описывающий этот контур (2). После чего эти функции передаются в алгоритм обратной кинематики, который на их основе и выводит набор положений для руки (3). Может ли кто-нибудь подсказать мне, тупенькому. алгоритм построения функций на основе пикселей (пункт 2)?
Если я правильно понял твою задумку: цифровое изображение отправляем роботу и он рисует его на бумаге ручкой или карандашом. То читай ниже.
Про G-code слышал?
Алгоритм может быть такой:
- Берем любой рисунок на компьютере и переводим его в векторы (либо сразу рисуем векторный рисунок)
- С помощью специальной программы (коих масса в интернете) переводим рисунок в G-code
- Отправляем G-code на управляющую плату твоего робота. Всё.
Как всё это автоматизировать и связать уже думай сам. Но изобретать такой велосипед, который ты описал в вопросе не стоит, когда уже до тебя придумана не одна реализация.
в функции какого вида вы хотите преобразовать контур? С какой точностью/сглаживанием хотите перевести пиксели в кривую? Посмотрите ответы к этому вопросу.
1bd_1l_Bari: Но ведь G-code, как я понимаю - это просто система обозначений, парсить которую в робото-понятные команды (поворот каждого из 3х суставов) все равно вручную?
Labradorus: Да, это система обозначений и есть программы, которые считывают этот код (как правило к этим программам надо дополнительно покупать плату), отправляют команды на драйвера шаговых двигателей, которые в свою очередь вращают валы осей Х и У, тем самым рисуя то или иное изображение.
romapro: Да нет, небольшую DIY-поделку) Этакий личный летописец. Позже планирую связать его с социальными сетями, чтобы он мне все новые письма на бумаге отрисовывал.
берем картинку, распознаем контуры, забиваем в массив, масштабируем под размеры бумаги, рисуем по принципу: двигаемся вдоль линии Х, пусто - не рисуем, не пусто -ставим точку.... ооо спускаемся по линии Y на 1...... пиксел(ь)ей, делаем тоже самое по линии Х. Можно как матричный принтер чтобы головка занята была всегда, в какую сторону двигаемся туда и рисуем, перекладывая массив.
А массив не хотите хранить? Ну тогда аппроксимация, интерполяция, численные методы. Кажется это все так называется, но я могу ошибаться. Извините.
Все очень просто.
Для управления манипуляторами проще всего (и главное правильнее) использовать g-code
Почитайте про то, как управляются 3д принтеры и CNC станки.
А самое главное - для них есть полно готового железа, например самый бюджетный вариант GRBL
Дальше задача делится на 2
1) Перевести графику в g-coge. Для этого есть полно программ на подобии ArtCAM
2) Вывесли g-code для управления шаговыми двигателями манипулятора (GRBL)