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-подходов. Человек сначала учит робота что-то делать, повторяя действие несколько раз, а затем мы загружаем их в симуляцию. Допустим, нужно положить хлеб в тостер — из пяти демонстраций получается тысяча разных сценариев, если перемещать предметы или добавлять помехи, вроде лишней кружки на столе. Так мы учим роботов со сложной кинематикой работе в непредсказуемом реальном мире.
На этом у меня все. Надеюсь, мне удалось показать, что обучение роботов — это сложный и очень интересный процесс, которому есть куда развиваться. Если у вас появились вопросы или дополнения к этой теме, оставляйте их в комментариях!
ссылка на оригинал статьи https://habr.com/ru/articles/859712/
Добавить комментарий