8 ноября мы провели финал МТС True Tech Champ 2024. Лучшие команды с отборочного этапа программировали робомышей на скоростное прохождение лабиринта, а опытные спикеры рассказали про перспективные технологии.

Артем Якимчук, Research Engineer и аспирант Сколковского Института Науки и Технологий, рассказал, как симуляция ускоряет разработку роботов, повышает точность алгоритмов и сокращает расходы. Специально для аудитории Хабра мы расшифровали этот доклад:

Скрытый текст

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


Привет, Хабр! Меня зовут Артем Якимчук, и я работаю с газотермическим напылением — процессом, который напоминает покраску, только в качестве распыляемого материала используются частицы металлов и керамики с высокой скоростью и температурой. Данный процесс применяется, когда нужно сформировать функциональное покрытие на деталях. Покрытия бывают антифрикционными, антизадирными, термобарьерными и так далее. Напыление выполняется промышленными роботами. Процедура дорогостоящая и требует подготовки, в том числе и моделирования разных отдельных этапов.

Ожидание и суровая реальность

Приведем такую схему работы. У нас есть агент — например, робомышь. Она совершает некое действие A. Причем не в вакууме, а в среде (environment), у которой меняется состояние (state). В зависимости от выполненных действий (action), у нас есть вознаграждение (reward). Обычно мы представляем себе идеальный марковский процесс: сенсоры не имеют погрешности, а вокруг отличная погода, никаких дождей, снега и тому подобных неприятностей.

Каждый компонент процесса — действие робота, вознаграждение, состояние окружающей среды — это отдельное направление для изучения. Реальность не сводится к идеальным марковским процессам. Состояния системы и окружающей среды описываются комплексными и неоднозначными моделями: может пойти дождь или снег, измениться освещение. Сами сенсоры далеки от идеала. Из партии в 100 штук каждый будет иметь особенности и требовать постоянной калибровки. Данные мы получим многомерные: датчик дает не 0 или 1, а картинку, допустим, размером 256 на 256, и каждый пиксель у нас еще кодируется RGB. Эти данные необходимо обрабатывать, причем в режиме реального времени.

Ожидание: реальность == MDP

● марковский процесс принятия решений

● идеальные сенсоры

● идеальные условия

 

Реальность: реальность != MDP

● S — состояние системы

● состояние окружающей среды, комплексное и неоднозначное

● сенсоры не идеальны

данные от сенсоров многомерные

 

Разберем другой пункт — награду (reward), отмеченную символом R на схеме. Ее расчет — нетривиальная задача. Как описать функцию для уборки комнаты или приготовления ужина? Как измерить текущее значение награды?

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

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

У манипулятора вроде используемого при газотермическом напылении есть шесть движков в шести сочленениях. Этого достаточно для позиционирования в пространстве, перемещения в 3 осях (X, Y и Z) и вращения вокруг каждой из этих осей.

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

Роботы от Boston Dynamics: тут можно посмотреть, сколько разных действий выполняет гуманоидный робот, просто чтобы двигаться

Сложности симуляции

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

  • Стоимость роботов. Инвесторы не особенно любят вкладываться в роботехнические стартапы из-за высокой цены ошибки. Робота можно сломать, испортить оснастку, привод, датчики, разбить камеры и так далее.

  • Риски внештатных ситуаций. Во время исполнения любой программы робот может повести себя непредсказуемо из-за бага в программе, накопления ошибок и так далее. Это опасно для людей, которые находятся рядом.

  • Обработка огромного массива данных. Например, для беспилотников это информация с сонаров, лидаров и камер. Все это нужно обрабатывать и принимать решения в режиме реального времени.

Помогут ли нам симуляторы? С одной стороны, у них есть огромные преимущества:

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

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

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

  • Безопасность. Человеку в симуляции ничего не грозит.

Но есть и недостатки:

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

Накопление ошибок (compounding error).

Задачи Sim2Real

Подход Sim2Real (от моделирования к реальности) решает проблему разрыва между симуляцией и реальным миром (reality gap) и позволяет преодолеть технические ограничения. Борьба с reality gap включает несколько подзадач.

Нужно найти компромисс между реализмом и производительностью. В большинстве случаев в симуляциях используются игровые движки. Нам нужно понять, насколько реальным должен быть смоделирован окружающий мир, чтобы рассчитать ресурсы на рендер 3D-графики. Либо же главное — производительность: тогда мы помещаем сотню роботов, которые будут обучаться.

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

На практике Sim2Real используется в следующих случаях:

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

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

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

Технические ограничения Sim2Real

  • Симуляция жидкостей и деформирующихся объектов. Тяжело определить, как ведут себя жидкости, чтобы симуляция соответствовала реальности и роботы учились в ней взаимодействовать с подобными объектами.

  • Симуляция Non-convex-объектов. Игровые движки умеют работать с convex-объектами — выпуклыми фигурами. А non-convex-объекты — вогнутые, поэтому их необходимо разбивать на более мелкие примитивные элементы.

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

Существующие решения

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

  • Симуляторы вендоров промышленных роботов: Kuka, ABB, Fanuc и так далее. У каждого свой язык программирования и софт. Так, у ABB есть ABB Robot Studio.

  • Симуляторы для конкретной задачи: сварка, фрезеровка, упаковка и т. д. Можно привести как пример отечественный SprutCAM.

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

  • Универсальные симуляторы промышленных роботов, такие как RoboDK.

  • Цифровые двойники. Nvidia Isaac Sim поможет смоделировать поведение материалов, то есть придать физические свойства тем вещам, с которыми мы работаем.

Отдельно можно выделить игровые движки:

  • У Unity уже реализована интеграция с ROS (Robotic Operation System) — инструментом для прототипирования роботов, у него низкий порог входа. Он активно используется в промышленных и исследовательских целях.

  • У Unreal Engine реалистичная визуализация «из коробки», и он особенно популярен среди тех, кто работает с беспилотным транспортом.

Физические движки:

  • Mujoco. Open-source-проект, выкупленный Google для подразделения Google DeepMind.

  • PyBullet. Также open-source. Имеет проработанную физику, но слабую визуализацию.

  • NVIDIA Flex. Предназначен для симуляции жидкостей и деформирующихся объектов.

  • V-Sim. Платный проект, который сделали выходцы из Nvidia, буквально пару месяцев назад они привлекли 21 миллион долларов инвестиций — это доказывает, что тематика востребованная.

  • Copelia-C — симулятор промышленных роботов, применяемый в R&D.

Примеры использования Sim2Real от разных компаний

Waymo

У Waymo есть несколько версий симуляторов: CarCraft, Simulation City и Waymax. Перед тем как выкатить обновление, они тестируют его в симуляции. Разработчики создали огромный мир, запускают туда автомобиль и обучают алгоритмы искусственного интеллекта, как в этом мире нужно водить. Важная цифра, которую они любят приводить: авто Waymo проехали 1 млн миль по дорогам и 5 млрд миль в симуляторах.

Wavve

У Wavve есть две версии симуляторов: Wavy Infinity Simulator и Ghost Gym. Первый был создан на основе игрового движка в 2022 году. Во втором случае разработчики изначально запускали машины с камерами на улицы городов, собирали датасет и дальше уже его переводили в симулятор, размечали данные и на основании этого датасета продолжали генерировать все новые миры.

Dyson

Тут можно привести пример Dyson Robotic Learning Lab — это симулятор на основе игрового движка Unity для решения задач тестирования и непрерывной интеграции роботов-пылесосов. Dyson активно используют симуляторы на основе Unity, Mujoco, PyBullet для отладки и прототипирования алгоритмов машинного обучения не только для пылесосов, но и для гуманоидных роботов.

Boston Dynamics

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

Nvidia

NVIDIA Groot Lab предназначен для сложных манипуляций роботов с большим количеством степеней свободы, в том числе гуманоидных. Они используют подход real2sim2real. Человек обучает робота класть хлеб в тостер: сначала разработчики снимают 5 раз этот процесс, затем модель загружают в симуляцию и начинают копировать. Важно вводить изменения — переставить хлеб на 5 см, переместить тостер, — чтобы робот мог учиться. При этом Nvidia используют симулятор Mujoco, хотя у них и есть собственные Isaac Gym и Isaac Lab.

OpenAI

Да, компания в первую очередь известна ChatGPT, который генерирует ей основную выручку. Но несколько лет назад они тоже занимались Sim2Real. Для тренировки RL-агентов они использовали симуляторы Isaac Gym и Mujoco.

Как повысить качество симуляции

Разные компании уже активно используют Sim2Real, поэтому накопилось много кейсов борьбы с reality gap. Как правило, эта проблема решается в три шага:

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

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

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

Domain randomization для решения reality gap

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

Рассмотрим гипотезу, которая касается визуализации:

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

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

Следующая гипотеза звучит так:

Если алгоритм столкнется с достаточно широким диапазоном объектов во время разработки, то реалистичные будут лишь одной из их вариаций.

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

Далее — гипотеза о физических свойствах:

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

Представим ситуацию, в которой мы обучили робота в симуляции с коэффициентом трения 0,4±0,2. В реальном мире он может столкнуться с совершенно другими значениями. Поэтому мы должны были изначально задать коэффициент трения, например, от минус до плюс бесконечности, и посмотреть, как с этими условиями справится робот.

Перспективы Sim2Real

Для Sim2Real можно выделить несколько ближайших задач, которые улучшат симуляцию и откроют новые возможности для робототехники:

  • Создание стандартов и единой методологии в симуляторах для Domain Randomization. Этот подход помогает решать проблемы reality gap, но пока есть лишь примеры от отдельных компаний.

  • Улучшение качества и масштабируемости симуляторов. Симуляция должна быть максимально приближена к реальному миру без потери производительности.

  • Симуляция и покрытие edge-cases-сценариев. В реальном мире может произойти много разных событий, которые будут маловероятны в симуляции — например, аварии. Робот может взаимодействовать с мягкими игрушками или тканями, которые иногда рвутся. Такие ситуации сложно смоделировать.

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

На этом у меня все. Надеюсь, мне удалось показать, что обучение роботов — это сложный и очень интересный процесс, которому есть куда развиваться. Если у вас появились вопросы или дополнения к этой теме, оставляйте их в комментариях!

Комментарии (0)