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

ANTHONY YAKOVLEV / UNITY TECHNOLOGIESContributor
May 20, 2020|8 Мин
Используйте шарнирные тела, чтобы легко создавать прототипы промышленных образцов с реалистичными движениями и поведением
Эта веб-страница была переведена с помощью машинного перевода для вашего удобства. Мы не можем гарантировать точность или надежность переведенного контента. Если у вас есть вопросы о точности переведенного контента, обращайтесь к официальной английской версии веб-страницы.

В Unity 2020.1, которая сейчас находится в бета-версии, появится новый компонент Physics: АртикуляцияТело. С помощью артикуляций как никогда легко моделировать роботизированные руки и кинематические цепи с реалистичной физикой и движениями. Наряду с другими улучшениями PhysX 4.1, Unity как никогда ранее способна моделировать промышленные приложения.

Unity 2020.1: улучшенная физика

В Unity 2019.3 мы обновили библиотеку физики с PhysX 3.4 до PhysX 4.0. Теперь бета-версия Unity 2020.1 делает еще один шаг вперед благодаря обновлению PhysX 4.1. Хотя предыдущие версии этой библиотеки обеспечивали отличную производительность для самых разных типов игр, моделирование реальности для неигровых приложений оказалось более сложной задачей. Моделирование кинематических цепей, таких как в тряпичной кукле, роботизированной руке или механизме с несколькими одновременно расположенными шарнирами, приведет к замираниям и нереалистичным движениям. Такие соединения не только выглядят необычно, но и не могут быть использованы для моделирования реального устройства, что препятствует созданию моделей или прототипов промышленных образцов.

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

Подробнее об общих улучшениях PhysX 4.1 можно узнать здесь.

Моделирование движения с помощью суставов

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

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

Проблемы с использованием старых соединений

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

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

Привнесение артикуляций в Unity - лучший способ моделирования реалистичных движений

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

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

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

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

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

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

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

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

Динамика движения вперед и артикуляция

Динамика движения вперед и сочленения в уменьшенном координатном пространстве позволяют удовлетворить высокие требования к точности и аккуратности, предъявляемые к роботизированным манипуляторам. Наряду с другими улучшениями PhysX 4.1, такими как решатель TGS, сочленения впервые делают возможным надежное моделирование роботизированных рук в Unity. Моделирование робота с помощью итеративного решателя суставов требовало точной настройки и использования коротких путей, которые все равно не соответствовали бы движениям реального робота.

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

ArticulationBody - новый физический компонент в Unity

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

Изображение

Форма тел описывается с помощью обычного компонента Collider, как и в случае с Rigidbodies.

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

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

Сравнение артикуляции с фиксированным или конфигурируемым суставом

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

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

Хотите попробовать сами?

Чтобы увидеть, как можно сконструировать манипулятор робота с последовательным соединением и шарнирами, посмотрите наш демонстрационный проект по робототехнике.

Загрузите Unity 2020.1, которая сейчас находится в бета-версии, чтобы попробовать свои силы в ArticulationBody.