Как передать роботу движения полировщика и почему одной траектории недостаточно

Инженеры НИИ «Крокодил», небольшой команды внутри завода штампов и пресс-форм «Иж-РЭСТ», связали настольный хаптик 3D Systems Touch с промышленным манипулятором SIASUN. Так они проверяют идею автоматизации полировки — специалист показывает нужное движение, а робот выполняет повторяющиеся проходы. О том, как устроен прототип, почему ему понадобились мертвая зона и «сцепление» и что еще предстоит проверить на металле, рассказывает Иван Шамшурин, руководитель НИИ «Крокодил».

Инженеры НИИ «Крокодил», небольшой команды внутри завода штампов и пресс-форм «Иж-РЭСТ», связали настольный хаптик 3D Systems Touch с промышленным…

Что в полировке можно поручить роботу

Полировка металлической детали со стороны выглядит как последовательность одинаковых движений. Специалист проводит инструментом по поверхности, возвращается и повторяет проход. Кажется, именно такую работу и стоит автоматизировать. Однако повторяющееся движение не означает простую операцию — нужно выдерживать скорость и прижим, учитывать особенности детали. 

Инструмент постоянно вибрирует, нагрузка передается на руки и суставы. Работать приходится часами, а требования к качеству не снижаются по мере усталости.
Наша команда пришла на завод из ИТ. Мы искали способ объединить опыт специалистов из цеха с возможностями программного управления. В полировке увидели конкретную задачу — сохранить за человеком выбор правильного движения, а повторяющуюся физическую работу передать манипулятору.

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

Для управления мы выбрали хаптик, настольное устройство со стилусом, положение которого можно считывать в трехмерном пространстве. Человек перемещает стилус, программа преобразует координаты, а промышленный робот следует заданному движению.
Готового решения для нашей конфигурации не было, поэтому сначала требовалось проверить, получится ли вообще объединить устройства в работающую систему.

Где проверяли идею

Во время одной из поездок в Казань мы познакомились со специалистами Центра развития промышленной робототехники Университета Иннополис. Они уже занимались близкими задачами и разрабатывали собственную CAM-систему для роботизированной обработки.

Мы предложили проверить сценарий, в котором полировщик управляет манипулятором через хаптик, а система сохраняет движение для последующего повторения. Университет предоставил оборудование и помог разобраться с архитектурой платформы. Наша команда взяла на себя программную интеграцию.

На экспериментальном стенде объединили промышленный робот SIASUN SR25A-20/1.80, контроллер RH06A и хаптик 3D Systems Touch. Для взаимодействия с контроллером использовали SIASUN RobotSDK.

Основную часть программного моста мы написали на C++, дополнительно подготовили Python-обертку. Первую версию, с которой уже можно было передавать и повторять движения, собрали примерно за месяц.

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

Что находится между хаптиком и роботом

Система состоит из четырех звеньев: 3D Systems Touch → компьютер с программным мостом → контроллер RH06A → робот SIASUN SR25A.
Система состоит из четырех звеньев: 3D Systems Touch → компьютер с программным мостом → контроллер RH06A → робот SIASUN SR25A.

Хаптик подключается к компьютеру по USB. Через OpenHaptics мы получаем положение стилуса и состояние кнопок. Данные обрабатывает консольная программа touch_to_siasun_min.exe. Она пересчитывает координаты Touch в координаты робота и формирует команды движения. Затем через API SIASUN RobotSDK передает их контроллеру RH06A по UDP.

В конфигурации нашего стенда для связи используется интерфейс LAN2 контроллера, адрес 192.168.3.150 и порт 9999. Это параметры конкретного подключения, а не универсальная настройка для любого робота SIASUN.

Дальше RH06A управляет сервоприводами манипулятора. Программный мост не заменяет контроллер и не командует каждым приводом непосредственно. Его задача состоит в подготовке команд, которые промышленная система управления сможет исполнить.

При этом нам не нужно воспроизводить действия оператора в графическом интерфейсе штатного пульта. Программа обращается к API RobotSDK напрямую.

От одного перемещения к потоку команд

Базовую последовательность удобно показать на одном движении. Программа инициализирует RobotSDK, устанавливает связь с контроллером и считывает текущую позу рабочего инструмента, то есть его положение и ориентацию.

Затем увеличивает компонент pz на 20 миллиметров и передает новую целевую позу в Movl_P2P_RPY, команду линейного движения. В материалах проекта это показано следующим упрощенным примером: С++.

#include <RobotSDK.h>

int main() {
    RobotInit();

    // Открываем UDP-сессию с контроллером RH06A
    int id = ConnectUDP("192.168.3.150", 9999);
    if (id <= 0) return 1;

    // Читаем текущую позицию и ориентацию инструмента
    RPY pose{};
    float exAxis[6] = {};
    ReadPOSE_RPY(&pose, exAxis, id);

    // Сдвигаем целевую точку на 20 мм вверх
    pose.pz += 20.0f;

    // Отправляем команду линейного движения
    MovL_P2P_RPY(
        &pose,
        exAxis,
        /*tool*/ 0,
        /*speed mm/s*/ 80.0f,
        id
    );

    Disconnect(id);
    RobotRelease();
    return 0;
}

Листинг иллюстрирует последовательность обращений к SDK, а не полную программу для запуска оборудования. В частности, здесь не показаны проверки результатов чтения позы и отправки команды, а также явное ожидание завершения движения.

В основном мосте вместо одного изменения pz обрабатывается непрерывная последовательность положений стилуса. Человек двигает рукой, программа получает новые координаты и строит из них поток команд.

Именно здесь заканчивается простота примера. Одну следующую точку можно задать явно. В непрерывном режиме нужно еще определить, какие движения передавать, в каком масштабе и с какой скоростью.

Почему координаты нельзя просто скопировать

Рабочая область Touch измеряется сантиметрами. Радиус досягаемости выбранного SIASUN составляет около 1,8 метра. У устройств различаются начала координат, направления осей и масштабы перемещений. По этой причине числовое значение, полученное от хаптика, само по себе еще не является подходящей целью для манипулятора.

Нам потребовалось определить, какая точка Touch соответствует текущему положению робота, сопоставить направления осей и подобрать масштаб. Отдельно нужно было решить, что делать у границ рабочей области, какие смещения считать дрожанием руки и с какой скоростью разрешать движение.

При этом контроллер возвращает мосту данные о состоянии манипулятора. Мы получаем декартову позу инструмента: px, py, pz задают положение в миллиметрах, а rx, ry, rz описывают ориентацию в градусах.

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

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

Что видно в консоли

Графического интерфейса у прототипа пока нет. За работой системы мы наблюдаем через консольный журнал. Например, одна из записей выглядит так:

[STREAM] #4301 (372.252, -323.739, 7.235)
d=1.83225 mm speed=200 rc=0 OnPath=1

Здесь отображаются целевая точка, величина шага, заданная скорость и результат обращения к SDK. Важная деталь: rc=0 означает, что вызов RobotSDK прошел без ошибки. Это не равнозначно завершенному перемещению. Флаг OnPath=1 отдельно сообщает, что робот находится на траектории.

Для разработки такое разделение принципиально. Успешно отправленная команда, текущее состояние манипулятора и результат обработки детали представляют собой разные уровни проверки. По одной записи об отсутствии ошибки нельзя сделать вывод, что вся операция выполнена правильно.

В журнале также видна работа механизмов, которые отделяют полезное движение оператора от перемещений, не нужных роботу.

Зачем понадобились мертвая зона и «сцепление»

Даже когда человек старается держать стилус неподвижно, его координаты немного меняются. Если каждое микросмещение превращать в команду, в очереди появляется множество почти одинаковых точек. На форму траектории они практически не влияют, но увеличивают задержку.

Поэтому мы добавили мертвую зону. Пока перемещение остается меньше заданного порога, новая команда контроллеру не отправляется. В журнале это отмечается строкой:

[QUEUE] skip (stream): within deadzone

Но не все движения, которые следует игнорировать, возникают непроизвольно. Иногда оператору нужно намеренно переставить стилус, не перемещая манипулятор.

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

Для этого мы реализовали переякорение, или условное «сцепление». Его включение отображается так:

[CLUTCH] ON @re-anchor

Оператор активирует режим, возвращает стилус в удобное положение и продолжает управление из новой исходной точки. Робот это возвратное движение не повторяет. Принцип похож на перестановку компьютерной мыши, когда на столе заканчивается место. Пользователь поднимает ее, переносит и продолжает движение курсора. Здесь нужно также отделить перемещение для удобства человека от перемещения, которое должно выполнить промышленное оборудование.

Почему робот продолжает двигаться после остановки руки

Когда SIASUN начал следовать за Touch, появилась еще одна проблема. Человек мог задавать новые точки быстрее, чем манипулятор успевал их проходить.

Легкий стилус можно быстро переместить на несколько сантиметров. Роботу для соответствующего движения необходимо согласованно повернуть несколько осей и физически переместить манипулятор. Если поступление команд опережает их исполнение, точки накапливаются в очереди.

Например: оператор уже остановил руку, а робот продолжает двигаться. Он исполняет команды, которые получил несколькими секундами ранее. Чем активнее человек перемещает хаптик, тем заметнее может становиться отставание.

Мертвая зона сокращает поток микросмещений, но полностью проблему не устраняет. Просто отбрасывать все больше точек тоже нельзя. Вместе с лишними командами можно потерять существенные детали маршрута.

При недостаточной фильтрации растет задержка. При чрезмерной траектория становится грубой и рваной. Поэтому нужно одновременно сохранять форму движения человека, учитывать реальную скорость манипулятора и ограничивать накопление команд.
К этому добавляются требования к резким перемещениям и границам рабочей области. Недостаточно сократить очередь любой ценой. Последовательность, которую получает робот, должна оставаться пригодной для исполнения.

Почему повторение траектории еще не означает полировку

Пока робот в основном повторяет движения в пространстве. Это позволяет проверять работу программного моста, но не качество обработки.

Инструмент может точно пройти по заданному маршруту и плохо отполировать поверхность. Достаточно неправильно его выставить, выбрать неподходящую скорость или не выдержать нужный прижим. Точное исполнение команды не делает саму команду технологически правильной.

Для манипулятора изготавливается новый полировочный инструмент. После его установки мы планируем перейти к испытаниям на реальных деталях.

Сначала потребуется проверить контакт с поверхностью: как инструмент касается металла и какое усилие возникает в разных точках. Затем оценить влияние скорости, повторяемость проходов и поведение системы при отклонениях геометрии детали. Отдельный вопрос состоит в том, как меняется качество после нескольких повторений.

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

Поэтому сейчас мы говорим о MVP управления. Хаптик передает движение, программа преобразует координаты, контроллер принимает команды, а манипулятор повторяет траекторию. Результат полноценной автоматической полировки еще предстоит получить и оценить.

Что получилось и что предстоит доказать

Мы собрали работающий прототип: человек задает движение через хаптик, а промышленный манипулятор повторяет траекторию. При этом основная сложность оказалась не в подключении оборудования, а в согласовании движения робота с действиями оператора.

Простой передачи координат для этого недостаточно. Микросмещения руки пришлось отсеивать, чтобы они не создавали лишних команд. Для возвращения стилуса в удобное положение понадобилось переякорение, при котором робот не повторяет обратное движение. Отдельной задачей остается работа с очередью: манипулятор не должен бесконечно отставать от человека, но сокращать количество точек нужно так, чтобы не потерять форму траектории.

Читайте также: 

Что будем искать? Например,ChatGPT

Мы в социальных сетях