“Black Widow” – 08. Камера
На работе и по хозяйству дома, все еще царит полный швах и поэтому я все никак не сподоблюсь совершить последний рывок по проекту с проигрывателем. То одно, то другое, то третье… Поэтому, вот, кое-что из уже давно готового на тему принтера.
Камера для 3D-принтера, вещь хоть и не обязательная, но чертовски полезная. Робот, бывает, печатает что-нибудь большое по нескольку дней и торчать возле него, понятное дело, нет, ни смысла. ни возможности. Но контролировать его время от времени нужно. Мало ли он чего себе там…
Камера позволяет не только вести наблюдение за происходящим на “горячем” столе отовсюду, где у вас есть интернет, но и, временами, вмешиваться в процесс.
Хотя, ничего фундаментального вы сделать все равно не сможете, если что пошло совсем не так. Но мелкий тюнинг (скорость печати, подача филамента и т.п.) – это завсегда. В крайнем случае, вы всегда имеете возможность остановить робота, если увидите, что деталь разрушилась, оторвалась от стола и т.п. Чтобы, не получить вот такое:
Где бы вы ни находились (в пределах доступа к интернету), даже, если ничего уже нельзя исправить, то, по крайней мере, есть возможность все это безобразие немедленно прекратить, чтобы не тратить пластик и не повредить детали принтера.
Дистанционно управлять принтером можно через приложение в мобильном телефоне, через любой компьютер или планшет – лишь бы в нем был броузер (чаще всего).
Понятно, что ключевым моментом во всем этом является визуализация процесса. Конечно, и без камеры вам доступна такая информация, как температурные графики, показатели скорости печати/подачи филамента, различные статистические данные, графическое представление текущего пути для текущего слоя и т.п.
На основе этих данных и графиков, опытный пользователь и без визуального контакта может понять, что происходит… Например, вон, вся современная астрономия так живет и не жужжит. Целые планетные системы умудряются находить, не выходя из Excel…
Но, согласитесь, глаза есть глаза. И, в общем случае, нам, обезьянам, они поставляют информацию намного быстрее и понятнее, чем умственная экстраполяция статистических и оперативных данных.
Поэтому – камера.
Камеру я к принтеру прикрутил практически сразу. Еще, даже, до того, как осьминога (приложение OctoPrint) на малине (Raspberry Pi) поднял. Камера тогда была просто подключена к стоящему рядом ноутбуку и гнала в эфир картинку в реальном времени через не помню уже какой онлайновый сервис…
Управлять ничем было нельзя, но можно было хотя бы пассивно наблюдать. Механизмами дистанционного управления, в том случае, были жена, дочь, друг, сосед – кто угодно, кто был достаточно близко от принтера, кому можно было просто позвонить и попросить нажать кнопку. К сожалению, это все были очень ненадежные устройства, с большой задержкой времени реакции, генерирующие тонну ненужных системных сообщений, задающие лишние вопросы, пытающиеся зачем-то думать, вместо того, чтобы просто нажимать на кнопки, а, частенько, и просто тупо не откликающиеся на запросы.
С добавлением OctoPrint-а, дело наладилось. Появились возможности более продвинутого и оперативного дистанционного управления без всяких ехидных замечаний со стороны механизмов управления. А с появлением единого целостного кузова у принтера, появилась возможность интегрировать в него камеру на постоянной основе, как неотъемлемую часть инфраструктуры.
Для этого пришлось решить ряд вопросов…
Так, например: место расположения камеры. Казалось бы – прилепи ее в кузове куда попало и нет проблем. Но на самом деле – проблемы есть. Зафиксированная в кузове камера дает фиксированный ракурс обзора. Если деталь достаточно габаритная, то по мере своего “роста” на столе она уйдет из поля зрения. Мало пользы часами наблюдать, вот это, елозящее на столе перед глазами:
… и не имея ни малейшего понятия, что там происходит наверху, где на текущий момент времени печать и происходит. Соответственно, камера должна уметь менять свое положение, чтобы показывать саму область печати, либо должна быть установлена в таком месте, чтобы показывать сразу весь объем доступный принтеру для печати.
Качество картинки так же имеет значение. Например, такая противная вещь, как under extrusion (недостаточная подача пластика, может быть вызванная миллионом причин: от настроек печати, до соринки в канале сопла), если она не носит явный катастрофический характер, может быть замечена только при достаточно детальном близком рассмотрении:
Ибо на общем панорамном ракурсе оно может смотреться вполне себе нормально, а выяснится все только уже потом, когда деталь развалится у вас в руках. Соответственно, чем детальнее и качественнее изображение выдает камера, тем оперативнее могут быть ваши действия по устранению проблемы (иногда бывает достаточно просто увеличить подачу пластика на 2-5%).
Важно, чтобы камера умела показывать изображение дальше, чем роутер вашей локальной домашней сетки. Если вы находитесь в ее пределах, то, обычно, можете и просто лично подойти к принтеру и посмотреть. Соответственно, без доступа во внешние сети, камера почти бессмысленна.
К счастью, этот момент за пару минут легко решается путем настроек роутера и программного обеспечения принтера, но помнить про это нужно. Чтобы не оказаться в ситуации, когда вы находитесь за дюжину миль от дома, хотите посмотреть, как там робот трудится на ваше благо, а телефон вам говорит, “хрен его знает, что это такое ваш http://192.168.0.37:8080…“
Ну и много еще других мелочей, в общем случае очевидных (свет, скорость передачи данных, безопасность, “дрожащие руки”, “деталь уперлась в объектив и все снесла нахрен” и т.п.)
Для своего конкретного решения с камерой я взял за основу старенькую Logitech HD Webcam C270:
В свое время эти камеры вполне заслуженно обрели широкую популярность в массах. Честно говоря, мне они и сегодня попадаются на каждом шагу. Так, что, хоть это и динозавр вебкамерного мира, но вполне себе еще живучий.
В ряду ее положительных качеств – достаточное для моих целей разрешение (1280 x 720), качественные внутренние фильтры изображения (подстройка под освещение, фокусировка, цвет), минимум ненужных наворотов, типа датчиков слежения, механизмов поворота и т.п. (впрочем, для моих целей и встроенный микрофон – уже лишний наворот), малый вес и полная совместимость с малиной + осьминогом (не все камеры хотят работать на малине, кстати).
В ряду отрицательных качеств… Монтировка. В оригинале, камера должна сидеть на кромке монитора или стоять на столе. На мониторе она еще нормально висит, но на столе всегда падала, насколько я помню. И уж тем более, не может быть надежно закреплена, в том виде, в котором она есть, в принтере – я проверял… Ну, только, если гвоздями к стенке прибить…
Другой минус – большое фокусное расстояние. Не… Ну, как для вебкамеры – у нее вполне адекватное фокусное расстояние. Как вебкамера, висящая на мониторе на расстоянии двух-трех футов от вас любимого – она ОК. Но не для моих конкретных задач по принтеру.
При достаточно близком расположении к печатаемой области, камера уже не могла сфокусироваться и я все видел примерно вот так:
Не то, чтобы совсем все размыто, но достаточно, чтобы вызывать некое внутренне раздражение в бессмысленных попытках заставить глаза видеть несуществующее четкое изображение на экране.
При удалении же камеры на расстояние достаточное для хорошей фокусировки: во-первых, она начинала выходить за пределы кузова принтера, во-вторых начинала показывать очень уж широкоформатный панорамный вид, бесполезный для детального рассмотрения области печати.
Если последнее пытаться побороть путем “выкусывания” нужной области из поля зрения камеры, то столкнетесь с существенным понижением качества картинки (матрица то всего 1280 x 720) и существенно возросшей нагрузкой на процессор Raspberry (ей то приходится не только одну картинку обрезать, а делать это для каждого кадра в видеопотоке).
Но я не просто так выбрал именно эту модель камеры из своих обширных загашников! Ибо было точно известно, что проблема с фокусом на близком расстоянии для C270 решается очень просто (как и для многих других – но не всех! – камер такого рода). А монтировку в любом случае пришлось бы переделывать.
Вечер проведенный за экспериментами на реальных кошечках и моделированием в виртуальном мире, на выходе дал вот такое решение всех проблем:
Кронштейн хитровыдолбанной формы предназначен для размещения на “иксовой” штанге принтера, которая поднимается и опускается во время печати вместе с кареткой печатающеего узла:
Т.о., область печати всегда будет в поле зрения камеры т.к. она будет подниматься вместе со штангой по мере “роста” печатаемой детали, какой бы крупной та ни была. А угловая конфигурация штанги уносит камеру за пределы области хода каретки, исключая любую возможность столкновения ею с камерой во время печати.
До кучи, поскольку камера теперь всегда гарантированно выше печатаемой поверхности, проблема того, что растущая в разные стороны деталь может влепиться в объектив, автоматически решается сама собой.
Разумеется, камеру придется избавить от ее родного корпуса, дав ей на замену новый:
Во-первых, в родном корпусе встроен металлический утяжелитель, который не дает камере кувыркаться с монитора или по столу. Он и так то справлялся с этой задачей не очень хорошо, так, в моем случае, этот лишний вес и вовсе нахрен не нужен на конце длинного рычага крепления камеры к штанге принтера.
Во-вторых, это теперь мой корпус, индивидуально заточенный под конкретную задачу. Как хочу, так и затачиваю. Например, снабжаю шаровой опорой, которая позволит ориентировать и надежно фиксировать камеру под любым устраивающим мой светлый взор углом, без всяких перекошенных горизонтов и странных ракурсов.
В теории и на уровне моделирования – как на экране компьютера, так и на соплях и палках к самому принтеру в реальности – все было замечательно. Оставалось только воплотить все в жизнь, попутно решив проблему фокусировки.
Хотя, чего я рассказываю то… Вот, камера, на тот момент с уже допиленным фокусом и установленная на палке скотчем к штанге принтера в приблизительно нужном положении, показывает, как печатается крепление к ней же самой:
В таком виде, конечно, она еще смотрит куда-то вбок, но на тот момент я был ограничен возможностями деревянной палки, которая имитировала крепление. В любом случае, эксперимент показал правильность пути развития темы.
Решение проблемы фокуса… Разумеется, камеру надо сперва избавить от родного корпуса. К сожалению, его недостаточно просто раскрутить и выбросить. От кабеля USB в камеру идут четыре провода. Три из них – питание и данные плюс-минус – эти соеденины с платой камеры на разъеме. А, вот, земля впаяна наглухо:
Не отпаяв предварительно землю – корпус не удалить. Так и будет болтаться на проводе. Потом, ясен пень, надо припаять его на место, как было.
Потом надо очень нежно открутить объектив с корпуса матрицы. Ничего страшного, никаких специнструментов не нужно. Он просто тупо выкручивается пальцами. Резьба очень мелкая – крутить придется долго. Это нормально.
Далее, на пластиковом корпусе матрицы нужно совсем чуточку срезать скальпелем верхнюю кромку:
Изначально там на ней были зубчики (как на сторожевой башне зАмка), не дающие объективу вкрутиться глубже необходимого. Если завертеть его совсем до упора, то есть риск поколоть матрицу. Но нам надо совсем чуть-чуть! Там есть еще запас хода на три-четыре витка резьбы. Если срезать стопорные зубчики – этого хватит. Мы получим возможность приблизить линзу объектива к матрице чуточку больше, что в масштабах данной конструкции позволит уменьшить эффективное расстояние фокуса вдвое! Это даже больше, чем, в моем случае, например, было нужно. Сколько именно было нужно я на тот момент не знал, поэтому сделал для объектива кольцо, в которое тот вкладывается:
Т.о., когда все уже было смонтировано на месте, я просто вручную покрутил объектив, пока не получил на экране компьютера четкое изображение.
Собственно, и все. Проблема с фокусом решена.
Кстати, таким макаром можно допиливать много какие модели камер, а не только С270. И, к сожалению, почти никогда это не получается делать с дешевыми китайским нонэймом по пять баксов. Там производитель не заморачивается резьбами и линза часто тупо приклеена к матрице горячими соплями. Правда и качество картинки у такого рода нонэйма соответствующее, поэтому и возиться с ними не стоит в принципе. Более-менее брендовые камеры или китайские же, но нормальные китайские – эти все устроены по описанному выше принципу и их легко допилить, как вам надо.
Вот все составляющие органа зрения принтера:
В свой новый корпус камера просто вкладывается и закручивается. Ничего достойного описания в этой процедуре нет:
Единственное, нужно было не забыть напялить стопорное кольцо на шаровую опору ДО того, как вклеивать ее ножку в корпус камеры:
Крепление с камерой готово:
На штангу принтера оно крепится посредством т.н. t-nuts, которые для этой цели буквально и предназначены – вкладываются в алюминиевый профиль штанги и затягиваются:
Кстати, на фото выше, показана первая версия крепления:
К сожалению, сразу после установки стало понятно, что оно слишком тонкое и передает все вибрации станка в камеру из-за чего изображение дрожит и бесит. Пришлось сделать вторую версию этого крепления, более массивную и толстую. Именно оно представлено выше на рендерах и печать именно его продемонстрирована на видео. Теперь все ОК:
Активная область печати достаточно подробная и всегда перед глазами:
Не уверен, что есть смысл выкладывать модель крепления в общий доступ. Все же оно слишком специфично и слишком заточено под данное конкретное решение в данной конкретной модификации принтера для работы с данной конкретной моделью камеры Маловероятно, что у кого-то еще будут выполняться все эти же условия, а в общем универсальном случае оно не будет эффективным. Но, если кому надо – напишите в почту или оставьте комментарий, я дам модель, никаких проблем.
Судя по датам в фотографиях, все это было сделано в сентябре прошлого года. Т.е. работает уже без малого пять месяцев. И меня все до сих пор полностью устраивает. Следовательно, эту часть проекта можно считать успешно завершенной.
Кстати, картинка с камеры выводится не только “наружу”, но и на экран с интерфейсом к самому принтеру:
Казалось бы – зачем? А дело в том, что в интерфейс принтера оно попадает “снаружи” – из внешнего интернета этого вашего. А не с localhost самой малины управляющей принтером. Т.е., я знаю, что если вижу изображение на экране принтера, то могу видеть его и откуда угодно. Своего рода, дополнительный, очень простой и визуально понятный способ контроля устройства.
И, да, это интерфейс моего принтера:
В основном, не столько управление (с ним отлично справляется его собственная плата с ее собственным экраном и кнопками), сколько мониторинг. Подключение и доступность сети, статус внутренних ресурсов малины, статус внешних сервисов, мониторинг ресурсов осьминога, управляющего принтером, камера и… мнэ… радио… да… У меня принтер умеет играть интернет-радио, пока печатает! И мигать проблесковым маячком – это особенно важно и нужно:
Да, это уже за пределами Добра и Зла. Нет, меня все вполне устраивает. Голоса в голове согласны.
Про все это все еще нигде не рассказывалось. Может быть, когда-нибудь… В двух словах, если… Это не шкура к осьминогу, не готовое решение – это с нуля мною написанный интерфейс, работающий на ngix+php+css+json. В сущности, там запускается хромиум в режиме киоска, ну и все дальше, думаю, очевидно. Если не очевидно… Увы, ждите, когда я сподоблюсь обо всем этом подробно написать…
Дожил… Завалы фотографий к разным проектам лежат еще аж с прошлого лета… Помните садового колесного робота? Дык, я еще про первую его версию не закончил. Там одного видео со стрельбища, где он уворачивается от пуль еще на неделю монтажа… А дома у друга уже бегает его вторая, полностью переработанная, куда более шустрая и намного более злобная версия… Думаю, к момента, как я доберусь в блоге до этой темы, будет уже и третья версия, которую мы таки научим отстреливаться в ответ…
Ну и дальше, понятно, пару абзацев традиционного нытья про нехватку времени…