
Когда говорят про варианты программирования роботов, многие сразу думают о сложных алгоритмах ИИ или языках вроде Python. Но на деле, особенно в промышленности, всё часто упирается в куда более приземлённые вещи — в интеграцию. Как заставить манипулятор не просто красиво двигаться по траектории, а правильно взять балку, учесть её прогиб и завинтить соединение, которое потом ещё и оцинкуют? Вот где начинается реальная работа, и абстрактные варианты отсекаются практикой.
Возьмём, к примеру, наш опыт в ООО Хэнань Юнгуан Электротехнические Технологии. Компания занимается полным циклом: от производства металлоконструкций и горячего цинкования до создания софта и интеллектуальных роботов для монтажа. И здесь программирование — это не изолированный этап. Нельзя написать код для робота-монтажника, не понимая, как поведёт себя оцинкованное соединение под нагрузкой или какие допуски заложены в конструкцию. Программист здесь должен мыслить категориями всего цеха, а не только контроллера.
Одна из первых ошибок, с которой мы столкнулись — попытка взять готовое решение для программирования роботов с открытым кодом и адаптировать его под монтаж крупных конструкций. Казалось бы, логично: есть библиотеки для планирования траекторий. Но они не учитывали ключевой фактор — постоянные микросдвиги конструкции во время сборки из-за веса. Робот, запрограммированный на идеальную геометрию, вёл себя неадекватно, упирался или пропускал отверстия. Пришлось отойти от чистого алгоритмического подхода и внедрить систему обратной связи через датчики силы и зрения, что, по сути, создало новый вариант программирования — гибридный, где код постоянно корректируется физическим миром.
Этот опыт показал, что выбор варианта программирования часто диктуется не мощностью языка, а тем, насколько глубоко он может быть связан с другими системами предприятия. Наш специализированный программный комплекс управления, который мы разрабатываем, по сути, является такой надстройкой — он агрегирует данные из CAD-систем (геометрия), из базы данных по материалам (свойства после цинкования) и в реальном времени корректирует программу робота. Это не программирование в классическом смысле, а скорее создание цифрового двойника процесса.
Многие производители предлагают удобные среды офлайн-программирования. Сидишь за компьютером, моделируешь работу, получаешь красивую анимацию — и переносишь код на реального робота. В теории. На практике, особенно при монтаже нестандартных конструкций, этот метод часто даёт сбой. Виртуальная среда не знает, что пол в цехе имеет уклон в 2 градуса, или что клещи захвата износились и теперь смещают деталь на пару миллиметров.
Поэтому мы выработали свой подход. Да, мы используем симуляцию, но лишь как первый, черновой этап. Основная же настройка и, по сути, финальное программирование роботов происходит непосредственно на площадке, методом итераций. Оператор (а по сути, инженер-наладчик) через панель учит робота ключевым точкам, поправляет траектории, вносит поправки на деформацию. Эти правки затем не теряются, а формализуются и загружаются обратно в нашу систему, обогащая её базу знаний для будущих проектов. Это медленнее, чем чистая симуляция, но зато надёжно.
На сайте hnyongguang.ru мы пишем про разработку ПО для управления и интеллектуальных роботов. Интеллектуальность здесь как раз и заключается в этой способности накапливать опыт с объектов и адаптировать стандартные программы. Например, алгоритм закручивания болтов для обычной фермы и для конструкции, которая потом пойдёт на антикоррозийную обработку и горячее цинкование, будет разным. Во втором случае нужно строже контролировать момент затяжки, чтобы не повредить защитное покрытие, которое будет нанесено позже. Эти нюансы прописываются в программе как отдельные сценарии.
В академической среде идут споры, что лучше для программирования роботов: ROS, специальные проприетарные языки производителей (вроде KRL для KUKA) или универсальные C++/Python. Наш практический вывод — всё зависит от уровня абстракции, на котором ты работаешь. Для высокоуровневого управления, интеграции систем машинного зрения и принятия решений мы активно используем Python и его библиотеки. Это гибко и быстро для прототипирования.
Но когда речь заходит о непосредственном управлении приводами, обеспечении безопасности и работе в жёстком реальном времени, тут без специализированных сред и языков, заточенных под конкретные контроллеры, не обойтись. Прямо на конвейере сборки крепёжных элементов у нас стоят роботы, чьи программы написаны на 'родных' языках. Попытка полностью заменить их на ROS-ноду обернулась потерей в скорости и надёжности. В итоге пришли к компромиссу: высокоуровневая логика на Python, которая через API отдаёт команды низкоуровневому софту контроллера. Это и есть тот самый гибридный вариант программирования, который оказался жизнеспособным.
Кстати, о болтах. Наше подразделение по выпуску болтовых крепёжных элементов — не просто смежное производство. Это полигон для тестирования программ роботов-сборщиков. Мы можем опробовать новые алгоритмы захвата и затяжки на тысячах типовых соединений, собрать статистику, доработать код, и только потом переносить его на роботов для монтажа крупных конструкций. Такой итеративный цикл между производством компонентов и их конечным применением — огромное преимущество.
Хочется рассказать и об ошибках, без них картина неполная. Был у нас проект по автоматизации монтажа решётчатых настилов. Робот с камерой должен был распознавать положение балок и укладывать на них настил. Использовали готовую нейросеть для детекции объектов. Всё отлично работало на тестовых видео. На реальном объекте — полный провал. Оказалось, что блики от оцинкованной поверхности, переменное освещение от сварочных аппаратов и обычная пыль сводили точность распознавания к нулю.
Пришлось отступить. Отказались от чисто визуального позиционирования и внедрили комбинацию: грубое позиционирование по меткам (простым QR-кодам, нанесённым на балки), а затем точная подстройка по тактильным датчикам (робот 'нащупывал' край балки). Нейросеть осталась, но её роль свелась к классификации типа соединения, а не к точному определению координат. Этот случай — классический пример того, как самый продвинутый вариант программирования (нейросети) может проиграть более простому, но робастному гибридному подходу в суровых заводских условиях.
Именно после таких случаев в наших специализированных программных комплексах появляются новые модули, например, для компенсации оптических помех или фильтрации данных от датчиков в запылённой среде. Это не то, что пишут в учебниках, это знание, купленное временем простоя и переделками.
Куда движемся? Мне видится, что будущее за дальнейшим сращиванием программирования роботов с технологическим процессом на уровне данных. Уже сейчас мы экспериментируем с подходом, когда программа для робота-монтажника генерируется почти автоматически на основе цифрового двойника всей конструкции, созданного в нашем ПО.
Инженер-технолог в интерфейсе указывает последовательность сборки, типы соединений (например, выделяет болтовое соединение, которое после монтажа должно быть отправлено на горячее цинкование). Система, зная модели наших роботов и их возможности, сама предлагает варианты программирования траекторий, выбор инструмента и даже прогнозирует время операции. Роль программиста смещается от написания кода строку за строкой к конфигурированию и верификации таких автоматически сгенерированных сценариев.
Это особенно актуально для компании с таким широким профилем, как наша. Когда одно предприятие объединяет и металлообработку, и цинкование, и разработку софта, и создание роботов, возникает уникальная возможность создать замкнутый цифровой контур. Данные о геометрии от конструкторов, о свойствах материала после антикоррозийной обработки, о параметрах крепежа — всё это становится входными данными для системы, которая 'программирует' робота под конкретную задачу. В итоге, варианты программирования роботов перестают быть вопросом выбора языка, а становятся вопросом глубины интеграции данных предприятия в систему управления автоматизацией. И вот над этой интеграцией мы и работаем, часто методом проб, ошибок и постоянных доработок на реальных объектах.