Найти тему

Gaka-Chu. Робот-художник. Часть 3: последовательность исполнения задач на манипуляторе

Оглавление

В предыдущих частях цикла статей о роботе-художнике Gaka-Chu мы рассмотрели общую концепцию проекта и этапы работы - переходите по ссылкам, чтобы ознакомиться, если еще этого не сделали. Сегодняшняя часть будет посвящена суровой технической стороне проекта - алгоритмам и математике. Для удобства восприятия информации мы поделили процесс рисования на несколько задач. Присаживайтесь поудобнее, начинаем.

Задача 1: формирование пути из изображения

Давайте представим, что у нас есть какая-то картинка в формате .jpeg, иначе говоря - растровое изображение, и мы хотим, чтобы робот-манипулятор ее изобразил на холсте. Вспоминаем, что нам уже известно из предыдущей статьи:

“...нужно было представить, что манипулятор - это примерно то же самое, что человек, лишенный всех чувств (зрение, осязание, слух, обоняние), кроме движения, и придумать, как такое существо обучить. И как раз в этом-то и заключалась одна из самых больших сложностей”.

Для нас в данной ситуации это означает, что робот картинку не увидит, сколько ему не показывай. Как объяснить манипулятору, что он должен нарисовать? Итак, нам нужна некая система, которая умеет просчитывать изменения цвета мазка во время движения кисти по холсту. Это необходимо для получения, например, градиентной заливки, что позволит роботу имитировать мазки художника. Система должна уметь не только просчитывать изменения цвета, но и формировать из изображения сложные пути, которые на следующих этапах преобразуются в траектории. На данном этапе координаты в пути задаются в пикселях (безразмерной величине).

Чем отличается путь от траектории?
В данном случае путь - это перемещение кисти, например, из точки А в точку Б по заданным координатам. Если добавить привязку ко времени, то получится траектория. Таким образом, траектория описывает движения, которые необходимо совершить манипулятору, чтобы кисть переместилась по холсту, создав тем самым отрезок АБ.

Выше описана общая задача, переходим к частному случаю Gaka-Chu. Задача немного упрощена, так как мы изображаем монохромные иероглифы без использования градиентов и теней. Это значит, что для нас главное - выполнение движений по заданным координатам, так как по осям X, Y, Z нет ограничений.

“Преобразование изображения в путь - очень общая задача. Мы сильно ограничили ее, выбрав монохромное изображение. Таким образом, нам нужно построить ту часть системы, которая сможет преобразовать текст”, - рассказывает Алексей Овчаров, ведущий инженер проекта.

В эту же задачу входит так называемая скелетонизация или “сжимание” изображения. Как пример возьмем растровое изображение текста. Для манипулятора нет такого понятия как текст, для него это некий набор пикселей с определенным сочетанием цветов в RGB базисе. Наша общая задача - получить из растрового изображения набор траекторий для отправки на контроллер манипулятора. Технология “сжимания” изображения представляет собой преобразование исходного (сложного для манипулятора) изображения в более простой с графической точки зрения объект с помощью использования некоторого алгоритма. Последовательности пикселей образуют множество тонких линий. Эти тонкие пиксельные линии, или пути, с математической точки зрения представляют собой массивы данных - точки, записанные по порядку, указывающие манипулятору от чего к чему двигаться.

Система координат изображения.
Система координат изображения.
-3
Результат работы скелетонизации.
Результат работы скелетонизации.

Задача 2: масштабирование и проекция изображения на рабочую поверхность

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

Но мы пока не можем передать изображение манипулятору, чтобы он начал рисовать. Почему? Дело в том, что наше пиксельное изображение существует как бы в отрыве от реального мира - оно абстрактно и не имеет конкретного масштаба (размерности). А нам нужно сделать привязку к реальности - привязать ко времени и спроецировать это изображение на какую-то конкретную поверхность (холст), которая вовсе не обязательно будет идеально ровной. Таким образом, нам нужно перенести сформированные пути в пикселях на определенный холст, масштабируя пропорционально размерам этого холста, то есть по сути перейти от пикселей к метрам. Затем необходимо определить параметры поверхности: ровная, выпуклая, вогнутая, кривая ит.д. - манипулятор может двигаться практически по любой поверхности, если правильно задать траектории движения, учитывая уравнение плоскости.

Система координат холста(canvas_link) относительно манипулятора (base link).
Система координат холста(canvas_link) относительно манипулятора (base link).
Проекция изображения на холст.
Проекция изображения на холст.
 Система координат x, y, z. Плоскость О. Система координат t,n,b. Кривая pi-pf (путь).
Система координат x, y, z. Плоскость О. Система координат t,n,b. Кривая pi-pf (путь).

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

z=Ax+By+C

Зная коэффициенты A, B, C и координаты пути на картинке ximg, yimg можем получить координату z относительно манипулятора. При этом важно описать координаты изображения в конкретных величинах, то есть в метрах. Для этого нам необходимо знать габариты холста, чтобы затем отобразить на него изображение пропорционально высоте и ширине.

Представим, что у нас изображение 1280x1024 пикселей, а размер холста 0.1х0.3 метра, тогда размер картинки в метрах, при условии что масштабирование происходит пропорционально холсту получится 0.1x0.08 метров, а коэффициент пропорциональности:

-8

В итоге в уравнение выше будут подставляться масштабированные коэффициенты kximg,kyimg.

-9

Задача 3: преобразование путей в траектории

Пути, заданные в первой задаче, преобразуются в углы манипулятора (обратная задача кинематики), затем к этим углам привязывается динамика, то есть время. Тут имеет значение, например, ускорение движения. Это и есть параметризация временем, которая зависит от динамических характеристик манипулятора.

Для параметризации временем принимается, что траектория угла задается уравнением:
где a0,a1,...,an- параметры траектории, зависящие от динамических параметров системы и начальных условий (например углов и скоростей в начальный и конечный момент времени ti,tf). Например, при заданных начальных углах q и угловых скоростях q, можно использовать следующую систему:

-10
-11

Подробней можно почитать тут (в разделе PATH PLANNING AND COLLISION AVOIDANCE).

Задача 4: исполнение траектории манипулятором

На данном этапе у нас есть изображение в понятном для манипулятора виде, оно масштабировано и привязано к параметрам поверхности, а также у нас есть траектории движений робота, чтобы он мог реализовать картинку на холсте. Почему робот еще не рисует? Правильно, потому что он еще не получил от нас траектории. Как передать роботу траектории? В предыдущей частях цикла статей о роботе-художнике я уже упоминала ROS industrial и их EKI интерфейс, с помощью которого можно передать манипулятору траектории движения и получить достаточно плавные линии на холсте. В данном случае в ROS реализован пакет, позволяющий исполнять траектории под названием MoveIt. Он содержит исполнителя, который следит за состоянием системы из топика /joint_states и окружающими объектами, позволяя избегать препятствий и сильного разгона системы. При этом исполнитель MoveIt отправляет траектории к пакету kuka_eki_hw_interface, который уже отправляет траектории на сам манипулятор и присылает его состояние в /joint_states.

Задача 5: корректировка движения по изображению

Завершающим штрихом должен стать контроль качества мазка. То есть нам нужен алгоритм, который будет корректировать процесс рисования, чтобы в итоге получилось изображение максимально похожее на оригинал. Есть одно “но” - данная задача пока не решается в нашем проекте, и вообще в мире еще не реализована достойным образом.

Подводя итоги

На данном видео можно проследить выполнение задач, описанных выше, по порядку. Совсем скоро Gaka-Chu запустит новый аукцион по продаже своих картин, и вы сможете стать владельцем одной из них. В следующей статье я анонсирую начало аукциона и расскажу, как можно в нем поучаствовать. Подписывайтесь на блог.

Задать вопрос.