Хочу поделиться своим опытом разработки программного обеспечения для робота-манипулятора, которого мы научили распознавать разные объекты на основе их CAD-моделей. В этой статье я подробно рассмотрю процесс создания такого ПО на примере недавнего проекта, связанного с производством мебели. С помощью внедрения технологии распознавания геометрии панелей ДСП мы обучили промышленного робота-манипулятора подавать панели требуемым торцом на станок для дальнейшей обработки. Это значительно повысило производительность линии и облегчило жизнь работникам производства.
В самом начале важно сказать, почему вообще появилась такая задача. На это есть три причины. Первая — цена, а именно цена ошибки, которую регулярно совершали работники производства, выбрав не ту деталь, не ту программу, не ту кромку и т. д. Вторая причина — расходы на зарплату и спецодежду работникам, которые работают в тяжелых, пыльных условиях и занимаются монотонным трудом. Ну и третья, самая очевидная — в отличие от человека, робот работает без перекуров и обедов, что позволяет делать всё быстрее.
Привер работы станка с ручной подачей:
Примечание: работников не сократили, а повысили через обучение. Теперь они операторы линии: следят удаленно за работой линии, запускают и обслуживают её в случае неполадок.
Дальше обо всём по порядку. Итак, на входе у нас была палета, размещенная на подъемном столе, с заготовками ДСП разных размеров и форм (в основном, прямоугольниками), сложенных практически случайным образом. Из данных — большая база чертежей будущих деталей в формате dxf, пополняемая по ходу создания новых моделей мебели. От нашего ПО требовалось распознать детали, определить их положение и передать роботу координаты оптимальной для захвата панели, а станку — тип заготовки. Исходя из полученных данных, робот-манипулятор присосками захватывал деталь и перемещал её в станок, а станок обрабатывал её в соответствии с программой (обклеивал торцы, сверлил отверстия в нужных местах и т. д.). Отдельная сложность заключалась в том, что было всего четыре присоски, и надо было передать координату захвата так, чтобы присоска не попала на отверстие, ламель и прочие особенности рельефа заготовки.
Проблемы, которые мы решали:
1. На вход в станок нужно было подавать детали в определенной последовательности.
Если в палете есть детали разной формы или размера (например, для изготовления кухни), то нужно подавать детали в требуемой последовательности, так как в конце станка стоит робот и складывает из них новую палету. Для решения этой задачи мы прибегли к созданию «задания», в котором оператор линии или старший смены подгружает нужные DXF (AutoCAD) чертежи в ПО с сервера производства и выстраивает нужную последовательность деталей. Благодаря заданию ПО:
-
знает какую деталь искать
-
определяет где у неё верх/низ, рабочие отверстия, ламели и пр.
-
выстраивает роботу последовательность команд для захвата и поворота детали
2. Все ДСП панели в палете имели одинаковый цвет и легкую запыленность.
Гамма цветов таких палет оказалась весьма обширной, от белого до глянцевого черного. Это внесло определенную лепту в используемое оборудования, ведь по условиям задачи нужно было распознать каждую деталь и замерить её, а потом, сравнив с чертежами, безошибочно определить её тип. До наклейки кромки на панели ДСП их края практически не различимы! Ну и бонусом — в цеху был мерцающий свет от люминесцентных ламп. Мы решили избежать данных проблем аппаратно — с помощью ИК диапазона.
В ИК диапазоне большинство деталей разных цветов имели схожую яркость на снимке, поэтому мы добавили динамическую подсветку по углам — так мы смогли увидеть даже самые незаметные грани на ДСП панелях.
Что использовалось для создания алгоритма распознавания ДСП-панелей
-
Аппаратное решение
- Камера. Задействовали монохромную 12МП камеру, её разрешения было достаточно для определения размеров с точностью 0,5 мм на палете 2,5х2 м.
- Подсветка. Чтобы никого не слепить, а также чтобы нивелировать цвет ДСП панелей, использовали 4-х точечную, управляемую ИК-подсветку. Она не видна глазу, зато камера её отлично видит. С ней даже черная ДСП панель благодаря ИК-диапазону хорошо различается в градациях серого.
- Пневмофорсунки для очистки от пыли (используются, если ПО не может распознать детали).
- Промышленный ПК с нужными интерфейсами и, естественно, шкаф (ну куда же без него 🙂) -
Программное решение
ПО для данной задачи я написал на базе библиотеки Halcon на Python с GUI PyQT под АльтЛинукс (реестровое импортозамещение, но таковы нынче правила игры и требования заказчиков). База данных для изделий размещена на сервере производства.Последовательность работы алгоритма распознавания
Для распознавания детали используется достаточно хитрый алгоритм, зато благодаря ему достигается весьма высокий процент схожести деталей с их DFX чертежом.
-
Калибровка камеры
Для точного замера геометрии детали необходимо было откалибровать камеру. Причем не только соотношение пиксель/мм, но и искажения объектива. В системе использовался широкоугольный, короткофокусный объектив, поэтому он вносил серьезные искажения в снимки с камеры. Для калибровки использовался классический метод обработки дисторсии со стороны ПО. Требуемые коэффициенты получили благодаря калибровочной паллете, размещаемой в нескольких точках кадра с различным углом наклона. -
Съемка 5 кадров с различными режимами подсветки
ИК подсветка рабочего поля представляла собой 4 прожектора, установленных в 4-х углах. Включением каждого прожектора управляло ПО, тем самым достигалась определенная хитрость в усилении видимости стыков ДСП листов за счёт микротеней, возникаемых на стыках заготовок. Камера снимала по одному кадру с каждым прожектором и один кадр со всеми включенными.
-
-
Обработка снимков, выделение границ детали
Полученные 5 снимков обрабатывались по известному методу HDR — из каждого снимка бралась контрастная информация и отбрасывалась неинформативная часть снимка. Полученный снимок обрабатывался алгоритмом коррекции дисторсии и отдавался далее для распознавание моделей. -
Распознавание и сопоставление с dxf
Сначала нам казалось это сложной задачей, но оказалось, что в используемой нами библиотеке она уже присутствует. Основные требования к DXF — отсутствие ГОСТовских рамок и размеров. Хотя над этим мы работаем и со временем научим систему избавляться от вторичной информации самостоятельно. Полученный контрастный и «выпрямленный» снимок обрабатывался алгоритмом read_object_model_3d_dxf для определения геометрических краев каждой детали, а также внутренних отверстий. Библиотека техзрения уже умела работать с dxf файлами, поэтому найти и сопоставить чертеж и границы детали проблемы не возникло. -
Передача координат и типа деталей
Распознанные алгоритмом детали сортировались по коэффициенту схожести. Если они проходили порог в 95%, то верхние координаты 2-3 деталей и их тип отравлялся далее по TCP на станок и манипулятор. После загрузки данных деталей процесс съемки повторялся. Однако, если коэффициенты схожести были менее заданного порога, использовался пневмо-очиститель, который сдувал и пыль и даже слегка раздвигал небольшие детали на палете. Благодаря пневмо-очистителю ПО самостоятельно, без участия оператора, могло повторить распознавание с другими физическими данными. Это позволило значительно снизить простой линии в ожидании помощи от оператораПо итогам разработки алгоритма получился вот такой результат поиска детали по конкретному чертежу (на фото выведена пригодная для захвата область детали):
Полученный алгоритм переписали на Python, добавили GUI для пользователя, тем самым родился прототип ПО, который мы тестировали в гараже, об этом расскажу далее.
Тестирование прототипа ПО
Естественно, любой стартап, начатый в гараже, уже имеет +10 к успеху, вот пример двух парней:Для отладки и тестирования мы так же использовали гараж, в котором размещен робот Kuka. В качестве подопытных образцов взяли ДСП различного размера с различным покрытием:
-
Белая матовая пленка
-
Коричневое ламинирование с явно выраженной текстурой дерева
-
Чёрные панели с глянцевой поверхностью под рояльный лак
Панели ДСП расположили на палете в хаотичном порядке примерно так же, как их сложили бы на производстве, а рядом разместили вторую палету, на которую надо было эти заготовки положить нужной стороной (это действие имитирует загрузку деталей роботом в станок). Камеру и свет подвесили над заготовками, используя портальную конструкцию из алюминиевого профиля. Пневмосистему на этапах тестирования решили не устанавливать, так как раскидывать пыль в гараже желающих не нашлось. Оставили её проверку до промышленного тестирования.
Робот с палетой различных заготовок с различным уровнем «сложности»: от прямоугольников стык в стык до черного глянцевого фасада с рояльным лаком.
Калибровку камеры делали с помощью изготовленной в типографии калибровочной палеты размером 500х500 мм
-
Самое первое тестирование дало нам понять, что постоянная подсветка не работает и требуется импульсная с применением алгоритма HDR. Потребовалось повторное тестирование с новой подсветкой. В результате мы довели ПО до рабочего релиза.
После гаража было тестирование и внедрение на производственной площадке мебельной фабрики, но, к большому сожалению, она не разрешила нам публиковать снимки и разглашать информацию о ней.
В заключение хотелось бы сказать, что это был мой первый опыт разработки, где техническое зрение было по-настоящему глазами робота. Данный проект принес много положительных эмоций, особенно на этапе внедрения. Видеть, как роботы выполняют тяжелый, монотонный труд — это, на мой взгляд, правильно и полезно. Желаю и вам получать драйв от своей работы!
Спасибо за прочтение, буду рад вашим комментариям и открыт к сотрудничеству.
Автор: avsolovyev