Творческие люди такие творческие, что могут рисовать чем угодно на чём угодно. Например, нитками по гвоздям. Этот вид искусства называется стринг-арт (побудем капитаном очевидность и скажем, что нет, стринги тут ни при чём). На самом деле, итоговый результат выглядит красиво и необычно. Правда, работа очень тонкая и кропотливая, не все с ней справятся. А что, если попробовать автоматизировать это искусство? Оказалось, что задача хоть и сложная, но реальная.
Прежде чем создавать машину для стринг‑арта, я решил начать с программного обеспечения, которое могло бы превращать исходное изображение в версию из верёвки и гвоздей. Нужно было убедиться, что у меня действительно получится его написать.
Первая итерация программы работала на упрощённом алгоритме:
Создать фиксированную сетку гвоздей.
Начать с гвоздя 0 (в верхнем левом углу).
Для каждого гвоздя в сетке вычислить общую разницу исходного изображения с целевым изображением, если этот гвоздь был соединён верёвкой с текущим гвоздём.
Из всех гвоздей выбрать в качестве следующего тот, который имеет наименьшее отличие от целевого изображения.
Алгоритм сработал неплохо. Правда, изначально производительность была ужасной, но заставить программу работать на всех доступных ядрах было очень легко. Я преобразовал изображения в черно-белые и обработал данные как байтовые массивы, что позволило более эффективно вычислить различия изображений.
После того, как концепция для программы оказалась рабочей, я перешёл к следующей непонятной задаче: как физически выровнять и распределить гвозди.
Прежде чем тратить деньги на создание машины, я хотел иметь надёжный механизм, позволяющий брать неотсортированную кучу незакреплённых гвоздей и размещать их вертикально, шляпками вверх (сами понимаете, забивать гвозди шляпками вниз не всегда удобно).
Самая очевидная идея, которая пришла в голову: использовать одинаковые, как на подбор, гвозди, которые сразу готовы для вставки в инструмент. Однако после долгих поисков у меня не вышло найти достаточно маленькие гвозди, которые бы не испортили «разрешение» окончательного стринг-арт рисунка.
Brad Nails (гвозди для пневмостеплера) были достаточно тонкими, но ломались, словно спички, что делало их непригодными для моих задач. Кроме того, на месте слома оставался неприятный клейкий слой.
Гвозди, которые я решил использовать, представляли собой штифты для панелей с винтовым креплением М1.6х40мм. Они были достаточно длинными, чтобы наматывать на них нитки, но при этом достаточно тонкими, чтобы оставаться незаметными на конечном изображении.
Я пытался придумать, как машина могла бы отсеивать гвозди, и оказалось, что это на самом деле довольно сложно. Гвозди будут вести себя по‑разному: когда их мало, их перемещение будет напоминать жидкость, а когда много, они сплетаются, образуя комок, который не расцепляется.
Я также подумывал об использовании электромагнита для захвата гвоздей в пазы, но гвоздям почему‑то не хотелось лезть в пазы, и они расползались, куда вздумается.
После мозгового штурма и создания прототипа я получил работающую конструкцию механизма сортировки гвоздей, которая включала в себя прорезь и соленоид с магнитами. Вот как я с научной точки зрения моделирую своё представление о работе машины:
Прежде чем я пришёл к этой конструкции, было несколько модификаций — в некоторых использовался электромагнит вместо постоянных магнитов, сила пружин и др.
В видео выше я использовал изогнутую прорезь для подачи гвоздей. Моя теория заключалась в том, что у меня может быть бесконечно высокая очередь гвоздей, ведущая к «воротам». Однако это не сработало, поскольку гвозди застревали из‑за дополнительного веса гвоздей в очереди. Поэтому я выпрямил их, но оставил небольшой наклон.
Вместо того, чтобы пытаться сортировать неограниченное количество гвоздей, я обнаружил, что, если поддерживать небольшой поток гвоздей, можно просеивать их прямо в устье гвоздевых ворот. Это создаёт новую проблему: как подавать небольшие связки гвоздей в секцию с ситом. На видео я делаю это вручную, но позже с этим всё равно придётся разобраться.
После того, как я убедился, что мои идеи работают, можно было раскошеливаться на саму машину. Технически я разобрался не со всеми проблемами, но покупать вещи гораздо веселее, чем ковыряться с теорией.
Я не хотел ограничиваться реальными размерами станка, поэтому купил четыре направляющих длиной 1 метр и диаметром 16 мм с подшипниками в качестве основы портального станка с ЧПУ. Эти 4 направляющие также были самой дорогой частью машины, их стоимость составляла около 120 фунтов стерлингов (около 14 316 рублей).
После того, как направляющие и подшипники прибыли, я смог легко придумать несколько конструкций для их соединения.
Вам понадобится всего 3 детали, чтобы собрать функциональную ось, а плоская верхушка подшипников ещё больше упрощает задачу. Я спроектировал несколько креплений для двигателей и зубчатого ремня. На каретку оси Y я поместил плоскую пластину с несколькими крепёжными отверстиями, так как ещё не придумал, как будет крепиться с ней ось Z. Это означает, что я могу постоянно вносить изменения в конструкцию узла с гвоздями без необходимости менять каретку Y.
После сборки оси Y я задумался о том, как машина будет вставлять гвозди в материал. То, как будет спроектирована ось Z, зависело от материала и метода вставки гвоздей. Если использовать дерево, нужен какой-нибудь молоток, чтобы их вбить. Мне это показалось слишком экстремальным и недостаточно точным, поэтому я остановился на оси с шаговым приводом, которая могла бы вставлять/вдавливать гвозди в мягкий материал.
Я разработал базовую ось с ещё одной общей точкой крепления, что дало возможность создавать прототипы различных инструментов для гвоздей. Я начал с фиксированной прорези для гвоздя, которая магнитом удерживала гвоздь на месте до того, как он будет вставлен в материал. В материале, в свою очередь, трение удерживает гвоздь на месте, преодолевая притяжение магнита. В моем первоначальном тесте это сработало.
К этому моменту ось Y начала выглядеть нормально, и мне не терпелось включить двигатели для тестирования. Я собрал машину на двух кусках МДФ размером 1200 на 600 мм и толщиной 18 мм, поддерживаемых несколькими запасными деревянными досками, которые у меня валялись.
На thingiverse я нашел модель кабельной цепи, которую можно было легко модифицировать, чтобы она соответствовала кабелям, необходимым для этой машины. Это вышло экономичнее, чем в случае с покупкой на eBay. Я также напечатал несколько креплений для двигателей и ременных шкивов.
После завершения основной сборки я приступил к подключению электроники. Для этого нужно было убрать мою конструкцию с пола. Только после того, как я всё собрал, я понял, сколько места он на самом деле занимает.
Для электроники я использовал плату RAMPS 1.4, а для программного обеспечения и прошивки — модифицированную версию Repetier. Единственные необходимые модификации — поддержка дополнительных датчиков, которые мне могли понадобиться. Мне также пришлось добавить код защиты соленоида после того, как один из моих соленоидов, оставленных включённым, расплавился после сбоя программного обеспечения управления.
После первоначальной настройки машина заработала!
Я временно приклеил свой прототип устройства сортировки гвоздей к деревянному основанию и запрограммировал программное обеспечение так, чтобы оно выполняло очень простую последовательность действий: поднимать гвоздь и помещать его в полистирол с интервалом в 1 см.
Как вы можете видеть в конце видео, кажется, что гвозди расположены пугающе неточно.
Видеть это было очень неприятно, и я не мог понять, что, черт возьми, происходит, пока не увидел, как он тщательно забивает гвозди. Оказалось, что дело в структуре полистирола: он состоит из небольших шариков, и гвоздь, пытаясь их обогнуть, отклоняется от прямого направления. Разница в плотности там, где шарики соприкасались, отклоняла гвозди, когда их толкали вниз.
Посмотрите на эту, с позволения сказать, схему:
Таким образом, я понял, что не буду использовать полистирол в качестве основы для крепления гвоздей. Я пошел в Wickes и купил доску из Celotex толщиной 16 мм, с которой не возникло такой проблемы, поскольку это гораздо более тонкий пенопласт.
Меня также беспокоило время, которое потребуется машине, чтобы вернуться назад и забрать следующий гвоздь, и сколько времени потребуется на изготовление каждого отдельного стринг-арт рисунка, если работа пойдёт в том же темпе.
Я подумал, что идеальным местом для хранения гвоздей будет сама каретка Y. На платформе было достаточно места, а поручни были сделаны из стали толщиной 16 мм, поэтому они легко выдерживали вес гвоздей.
Единственная проблема с перемещением погрузчика заключалась в том, что он должен был находиться за головкой захвата гвоздей. Это означало, что нужно каким-то образом сделать головку подвижной, чтобы она могла вставать в обе позиции. Поэтому я установил самопальный сервопривод.
К сожалению, это значительно уменьшило силу, с которой я мог вбить гвоздь, потому что фактический вал сервопривода очень мал в диаметре (около 5 мм) и из-за гибкости ABS. Это означало, что мне нужно было снять серебряную фольгу с Celotex перед тем, как забивать гвозди, поскольку это оказывало слишком большое сопротивление.
С этой новой конфигурацией я смог провести несколько расширенных испытаний на и обнаружил, что мои ворота для гвоздей очень не надёжные. Примерно в 20% случаев они пропускали несколько гвоздей, которые затем врезались в материал под произвольными углами.
Я потратил много времени на подборку ворот и захвата гвоздей, прежде чем получил надежную конструкцию. Осталась только одна проблема, которую я обнаружил: гвоздь с большей шляпкой, чем обычно, иногда застревал в месте соприкосновения пластика с кнопкой проверки присутствия гвоздя. Чтобы исправить это, я заменил кнопку линейным датчиком Холла, который измеряет изменение магнитного поля между моментами присутствия гвоздя и его отсутствием.
Теперь не осталось острых краёв, за которые гвозди могли бы зацепиться, а значит, машине не нужно пытаться вставить гвоздь, чтобы определить, есть он у ворот или нет. Это также означало, что можно легко обнаружить, если гвоздь вставлен неправильно.
Я сделал вторые соленоидные ворота, которые работали как шлюз, причем зазор между двумя воротами был настроен так, чтобы в него можно было вставлять только один гвоздь за раз.
Этот вариант получился более удачным, чем предыдущий, но всё равно примерно в 1% случаев он давал сбой. Вроде бы мелочь, но это означало, что в стринг-арт картине из 1000 гвоздей вы получите 10 неуместных. Но такого результата уже было достаточно, чтобы попытаться создать достаточно большую сетку из гвоздей для тестирования намотки.
Проблема с тестированием намотки заключается в том, что, как только я запущу машину, она использует множество гвоздей, из-за чего доска из Celotex может прийти в негодность. Поэтому я купил гипс, который буду использовать для закрепления гвоздей после их первоначальной установки. Я предположил, что пары миллиметров гипса для моих испытаний будет достаточно. Поэтому я приготовил быстрый образец для теста.
Гипс лёг не идеально. Гвозди от него ржавели, а ещё его легко было пролить на шляпки гвоздей, но зато он удерживал их на месте. Я начал размещать сетку 30 на 30 на куске Celotex размером 50 на 50 см.
После заливки гипса у меня получилась фиксированная сетка для теста, которую я мог использовать при разработке и тестировании алгоритмов намотки.
Теперь у меня было все необходимое для создания стринг-арта, кроме программного обеспечения. Поэтому я начал над этим работать.
Первым шагом в программе был выбор порядка размещения нитей, в соответствии с которым гвозди будут максимально напоминать изображение и при этом не будут пересекаться с другими гвоздями.
Затем программе нужно понять, как проложить веревку, избегая других гвоздей. Для этого я смоделировал безопасный радиус вокруг гвоздей, и любое пересечение этого радиуса заставит двигаться по безопасному радиусу до тех пор, пока они не перестанут пересекаться. В случае нескольких пересечений этот процесс будет повторяться до тех пор, пока не будет достигнут целевой гвоздь.
В видео вы можете увидеть, как на первом этапе визуализируются потенциальные гвозди-кандидаты для каждого решения, и для каждого из них полученное изображение оценивается на предмет сходства с целевой фотографией. Выбирается лучший вариант. Смоделированный результат отображается слева.
По сути, это тот же алгоритм, что и в оригинальной программе проверки концепции, но вместо симуляции точки за точкой он точно отображает способ, которым веревка обвивается вокруг гвоздя.
Второй этап — создать безопасный путь для перемещения головки машины. Выходные данные имеют цветовую маркировку:
Зеленый цвет — путь первоначального наматывания веревки на начальный гвоздь или завершения наматывания на конечный гвоздь сегмента.
Красным обозначены участки, где путь между двумя гвоздями пересекает безопасный радиус другого гвоздя, и головке инструмента приходится перемещаться в обход.
Синий — это место, где программа решила, что ей придется сделать полный оборот на 360 градусов, потому что угол, под которым веревка обхватывает гвоздь, таков, что ей не зацепиться за гвоздь, если она просто войдет в его безопасный радиус.
В последние несколько секунд видео вы можете увидеть результирующий путь, по которому пойдет головка инструмента, он отображается серым цветом.
В этом видео не показано вычисление смещения веревки по Z, которое выполняется путём обнаружения столкновений между ранее уложенными нитями и текущим сегментом траектории инструмента. Для этого необходимо использовать как моделирование положений покоя нитей, так и координат предстоящей траектории инструмента. Программное обеспечение использует дерево квадратов для расчета пересечений и делает припуск 0,025 мм на каждую ранее размещённую нить. Это можно увидеть на одном из более поздних рисунков.
Я установил на машину конус с тефлоновой трубкой, прикрепил иглу и настроил её для заправки нити. Нить прошла через трубку и вытянулась через иглу. В этой конструкции игла была съемной, что позволяло легко переключать машину из режима забивания гвоздей в режим намотки.
Первые попытки не увенчались успехом. Оказалось, что в реальности расположение гвоздей не настолько точное, как настройки иглы. К счастью, гвозди были закреплены достаточно надёжно, чтобы мне не пришлось проходить трудоемкий процесс восстановления сетки каждый раз, когда игла застревала в уже намотанных нитях.
Я понял, что, как бы круто это ни выглядело, идея с иглой не сработает. Мне нужна была более толстая, округлая и более щадящая головка, которая бы мягко проходила поверх уже намотанных нитей.
Поэтому я взял кусок гладкого стального стержня диаметром 8 мм и просверлил в нем вертикальное отверстие диаметром 3 мм. Затем я вставил то же самое сверло в патрон и начал подпиливать и шлифовать конец, придавая кончику красивую закругленную форму. Я распечатал новое крепление для этой насадки и установил его в машинку. Теперь всё заработало более плавно, а значит, я мог увеличить скорость движения XY.
Наконец мне удалось получить единую полную нить без огромного количества проблем. Ниже представлен первый законченный результат в области стринг-арта.
Как вы можете видеть на правом глазу, было несколько пропущенных петель, но для первой попытки получилось неплохо. Пропущенные петли были вызваны ошибкой в программном обеспечении, из-за которой при определенных обстоятельствах машина могла протащить гвоздь прямо через гвоздь. Так происходило редко, поэтому причину установить было сложно.
Когда я создал первый стринг-арт, мне пришлось сделать это снова, просто чтобы убедиться, что это не случайность. Поэтому я срезал всю нить с многоразовой тестовой сетки и вставил в программу фотографию племянницы.
Опять же, получилось довольно хорошо, и на этот раз никаких хитрых пропущенных петель не было.
Теперь, когда у меня было работающее программное обеспечение, мне нужно было оптимизировать машину, чтобы сделать её работу более стабильной.
Я начал с повторения процесса забивания гвоздей. Увеличил скорость захвата и размещения, что привело к проблемам, которые необходимо было решить. Проблема заключалась в том, что всё происходило настолько быстро, что я не мог заметить, что происходит. Именно здесь высокоскоростная камера моего телефона оказалась невероятно полезной.
В этом видео вы можете увидеть лишь одну из проблем, которые мне пришлось решить — вторые штифты ворот не были втянуты достаточно далеко, из-за чего гвоздь застревал при вытягивании его из отверстия. У меня также были похожие проблемы между первыми и вторыми воротами, из-за которых гвоздь цеплялся за нижний внутренний штифт ворот, заставляя его тянуться и вставать перпендикулярно потоку гвоздей.
Я решил, что мне придётся отказаться от использования штифтов для ворот. Причина, по которой я изначально их использовал, заключалась в том, что допуски были настолько малы, что я не мог напечатать достаточно маленькие ворота на 3D-принтере. «Воздушный шлюз» должен был иметь толщину ровно 1,6 мм, чтобы за раз можно было забить только один гвоздь. В дополнение к этому он также должен был иметь возможность отделять ряд гвоздей, и острые кончики здесь идеально подходили.
В новом шлюзе использовались алюминиевые ворота толщиной 1 мм с заострёнными краями и двумя соленоидами на одной стороне. Это полностью устранило проблемы с частичным зацеплением гвоздей за штифты ворот, но появились другие сложности. Если бы гвоздь лежал по диагонали над входом в ворота, его бы зацепили и прижали к бокам. Единственное средство, которое я мог придумать, — это продолжать попытки закрыть ворота и проверять, удалось это или нет. Для этого нужно установить еще один датчик Холла.
Эта конструкция стала работать ещё лучше (процент отказов всего около 0,3%). На видео ниже вы можете видеть 2 гвоздя, которые помещены в держатель, но в целом скорость и уровень ошибок оказались довольно хорошими.
В этом видео я забиваю гвозди в неправильном положении, что представляет собой новую задачу в проверке правильности установки всех гвоздей. Учитывая, что процент неудач составляет около 0,3%, необходим был еще один шаг, который позволил бы мне вручную исправить любые гвозди, вставленные неправильно. С обычной сеткой такой проблемы не было, так как сразу было видно, где гвоздь запутался.
Инструмент проверки представляет собой простой зонд с магнитом внутри и линейным датчиком Холла для определения расстояния.
На этом этапе я также отказался от гипса и оставил оригинальную серебряную фольгу на Celotex, только покрыл ее белым липким винилом. Вот процесс проверки гвоздей на свободно размещенной сетке.
В последнюю очередь я добавил некоторые инструменты для автоматической загрузки гвоздей в гвоздезабивной узел из ковша большей вместимости, вмещающего около 700 гвоздей. При этом в маленькое сито для гвоздей можно будет загрузить только около 10–15 гвоздей за раз. Я также прикрепил небольшую вращающуюся пружину, которая помогает направлять гвозди через сито, что снижает вероятность застревания.
Вот ещё несколько готовых рисунков, которые я сделал перед тем, как убрать машину в шкаф.
Спасибо за внимание!
Что ещё интересного есть в блоге Cloud4Y
→ Симпсоны-ТВ: руководство по сборке
→ Взлом Hyundai Tucson, часть 1, часть 2
Комментарии (10)
AlexSpirit
03.10.2023 08:56+2Чёрт, а я то надеялся, что стринги в статье будут какраз "причём".
bios737
03.10.2023 08:56Ну с фото справились, можно и стринги сплести. Хотя что там плести, три ниточки и готово. Вопрос куда гвозди совать?
sav13
03.10.2023 08:56Только элемент искусства напрочь убивается автоматизацией.
Это как рисунок кисточкой заменить печатью на струйном принтере
bios737
03.10.2023 08:56Предположу, что задумка, здесь далека от искуства. Автоматизация, по созданию картины из фото, комерческий продукт (не даром ведь все ккртины, это фото).
Refridgerator
03.10.2023 08:56+3Всё норм. Все эти вещи придуманы для того, чтобы убивать время — сидишь себе, мотаешь нитки, думаешь о возвышенном. А здесь автор убил время опосредованно, заодно получив опыт и наработки.
Это как рисунок кисточкой заменить изобретением фотоаппарата и принтера, так будет точнее.
kalapanga
Мне не нравится сетка из гвоздей. Вон у ребят из RingString гвозди только по кругу изображения, а картинки (судя по фото) лучше чем здесь на сетке.
tmg
вот человек тоже делится видосом - как RingString робота разрабатывает
https://www.youtube.com/watch?v=M1gXuKFspgY