Search Unity

ArticulationBody를 사용하여 현실감 있는 모션과 동작을 구현한 산업용 프로토타입 제작

, 5월 20, 2020

Unity 2020.1에 ArticulationBody라는 새로운 물리(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와 같은 조인트 컴포넌트가 사용됩니다.

제작 과정에서 각 조인트는 바디가 특정 거리를 유지하게 하는 직선상의 제약 또는 바디가 특정 축을 중심으로 특정 방향을 향하게 하는 각도상의 제약을 비롯한 기본 제약으로 구성됩니다. 이러한 제약은 동일한 거리를 유지하여 바디가 서로 겹치지 않도록 하는 데에도 사용됩니다. 결합된 모든 제약은 가능하면 연결된 오브젝트를 모든 제약 조건을 충족하도록 배치하기 위해 월드 공간에서 연결된 오브젝트 쌍 각각에 적용하는 임펄스 집합으로 수렴되는 것을 목표로 하는 반복 솔버에 연결됩니다.

기존 조인트 사용 시 발생하는 문제

첫 번째 문제는 솔버에 컨버전스 문제를 야기하는 충돌 요소가 매우 많아집니다. 반복 횟수, 연결된 바디의 상대 질량, 씬 내 제약 조건들의 복잡도로 인해 해결이 불가능한 문제가 발생할 수 있습니다. 이 경우 부분적인 해결책이 사용되기 때문에 특정 제약을 충족하지 못합니다.

두 번째 문제는 특정 시간에 제약 조건을 얼마나 위반하는지 보여주는 값인 조인트 오차에 따라 적용된 임펄스 값이 달라진다는 것입니다. 이 오차 보정 동작 때문에 특히 조인트가 서로 연결된 경우에 마치 바디가 감쇠된 스프링으로 연결된 것처럼 약한 스프링 효과가 늘 발생합니다.

Unity의 관절 기능으로 현실감 있는 모션 모델링

위에서 설명한 키네마틱 문제를 해결하기 위해 유니티는 논리적 트리로 구성된 바디의 집합인 관절(articulation)이라는 새로운 개념을 도입하고, 부모와 자식의 관계에 상호 제약적인 모션이라는 개념을 담았습니다. 여기에는 단일 루트 바디는 항상 존재하지만 루프는 존재하지 않습니다. 관절은 Unity의 Transform 계층 구조를 사용하여 표현됩니다.

이제 사용자는 아래의 Universal Robots UR3e와 같은 기존 로봇을 쉽게 모델링하고 실제 세계에서 움직임을 더 정확하게 반영하는 작업을 시뮬레이션할 수 있습니다. 앞으로는 로봇 기술자가 특정 움직임 시퀀스를 시각화하고 새 코드를 테스트하거나 합성 환경에서 새 디자인을 검증할 수도 있습니다.

관절을 활용하면 로봇 기술자와 기타 산업 부문 개발자에게 다음 두 가지 이점이 있습니다. 관절은 실제 세계의 실물과 더 유사한 방식으로 움직이며, 기존 리지드바디+조인트보다 더 빠르게 구성되어 개발 시간을 단축할 수 있습니다.

관절이 사용되는 주요 부문은 로봇 공학이 될 것으로 예상됩니다. 로봇 팔에는 보통 6개 이상의 관절이 하나씩 연이어 연결되기 때문에 각 관련 조인트의 포즈에 사소한 오류가 발생하더라도 엔드 이펙터의 포즈에 큰 영향을 미칠 수 있습니다. 사소한 오차는 키네마틱 체인을 따라 전달되어 비현실적인 움직임을 야기하고, 엔드 이펙터의 위치가 타겟을 벗어나게 됩니다.

시뮬레이션을 이용하면 실제 로봇을 통해 실시간으로 테스트할 필요 없이 다양한 배포 시나리오와 유닛 테스트를 가상으로 모델링한 다음 대규모로 테스트를 실시함으로써 개발 시간을 단축할 수 있습니다. PhysX의 개선된 기능과 ArticulationBody 컴포넌트를 통해 시뮬레이션 작업에 Unity를 더 효과적으로 활용할 수 있기를 기대합니다.

특정 부모 자식 관계에서 자유도의 수준은 사용되는 실제 조인트 유형에 따라 달라집니다. 현재 지원되는 사항은 다음과 같습니다.

  • Fixed(고정): 자유도가 0이며 서로 연관된 바디를 잠그는 데 사용
  • Prismatic(선형): 자유도가 1이며 부모에 대한 특정 축의 선형 오프셋에 해당
  • Revolute(회전): 자유도가 1이며 Prismatic의 회전식 형태
  • Spherical(구형): 자유도가 최대 3이며 선형 모션을 허용하지 않고 상대적 회전만 허용하는 소켓 내 볼(ball-in-socket) 조인트

조인트의 현실감을 높이기 위해 Featherstone의 알고리즘을 기반으로 하는 새 솔버가 사용되었습니다. 이 기술은 축소된 좌표계(각 바디가 부모와 관련하여 자유도에 비례하는 수만큼의 좌표를 갖는 공간)를 사용하여 조인트, 링크, 견고한 바디의 구조에 적용된 힘의 효과를 계산합니다. 기존에 활용한 최대 좌표계는 일반적인 사용 사례에서 더 뛰어난 성능을 보이지만 성능을 확보하기 위해 정확도와 정밀도가 저하된다는 문제가 있습니다.

포워드 동역학과 관절

축소된 좌표 공간의 포워드 동역학과 관절은 로봇 팔이 필요로 하는 높은 수준의 정밀도와 정확도를 충족하는 데 도움이 됩니다. TGS 솔버와 같이 PhysX 4.1에서 제공하는 기타 개선 사항과 관절을 이용하여 처음으로 Unity에서 로봇 팔을 안정적으로 시뮬레이션할 수 있게 되었습니다. 반복 조인트 솔버를 사용하여 로봇을 모델링할 때 필요했던 정밀 조정과 단축키는 실제 로봇의 움직임을 구현하는 데 역부족이었습니다.

이제 포워드 동역학 알고리즘을 사용하여 축소된 좌표 공간에서 관절을 시뮬레이션합니다. 포워드 동역학 알고리즘은 관절의 자유도 총량에 비례하여 조정되므로 제약의 수에 따라 조정되는 기존 반복 솔버보다 속도는 더 빠르면서 더 정확하게 결과를 계산할 수 있습니다.

Unity의 새로운 물리 컴포넌트: ArticulationBody

Unity에서 관절을 지원하기 위해 ArticulationBody라는 새 컴포넌트가 추가되었습니다. ArticulationBody는 Rigidbody와 ConfigurableJoint를 하나로 합한 것과 같은 컴포넌트입니다. 관절의 경우 루트를 제외한 모든 바디는 부모와 연결되는 조인트가 있기 때문에 개별 컴포넌트로 분리되지 않습니다.

인스펙터의 ArticulationBody 컴포넌트

바디의 모양을 설명할 때는 리지드바디의 경우와 마찬가지로 일반 Collider 컴포넌트를 사용합니다.

관절 내에 만들어진 바디는 축소된 좌표 공간에서 설정한 제한을 넘을 수 있으므로 Transform 컴포넌트를 사용하여 이동할 수 없습니다. 루트 바디는 유일한 예외로서, ArticulationBody.TeleportRoot 함수를 사용하여 이동할 수 있습니다. ArticulationBody는 Transform 컴포넌트의 변경 사항에 반응하지 않도록 설계되어 있습니다.

대신 다음과 같은 방법으로 관절과 상호 작용할 수 있습니다. 첫 번째는 관절의 각 바디에 힘과 토크를 적용할 수 있습니다. 두 번째로 각 조인트에 선형 및 각도 타겟을 설정하여 제어할 수 있는 선형 드라이브를 자유도별로 부여합니다. 마지막으로 축소된 좌표 공간에서 직접 바디의 포즈를 변경할 수 있습니다.

고정 또는 구성 가능한 조인트와 관절 비교

관절이 갖는 특별한 장점은 시뮬레이션의 품질이 연결된 바디의 질량비로부터 직접적인 영향을 받지 않는다는 것입니다. 리지드바디와 고정 조인트를 사용했을 때, 연결된 바디 간 질량비가 10:1보다 높아지면 시뮬레이션의 현실감이 떨어지기 시작합니다. 하지만 다음 예시에서는 빨간 구체가 검은 구체보다 1,000배 무거운 경우에도 고정 조인트로 연결된 관절 바디의 차원 그리드가 정밀하게 시뮬레이션되는 것을 알 수 있습니다.

시뮬레이션을 이용하면 실제 로봇을 통해 실시간으로 테스트할 필요 없이 다양한 배포 시나리오와 유닛 테스트를 가상으로 모델링한 다음 대규모로 테스트를 실시함으로써 개발 시간을 단축할 수 있습니다. PhysX의 개선된 기능과 ArticulationBody 컴포넌트를 통해 시뮬레이션 작업에 Unity를 더 효과적으로 활용할 수 있기를 기대합니다.

직접 체험해 보고 싶으신가요?

로봇 공학 데모 프로젝트 페이지에서 관절 조인트를 사용하여 순차적으로 연결된 로봇 팔을 만드는 방법을 참고하세요.

Unity 2020.1을 다운로드하여 ArticulationBody을 직접 사용해 보세요.

12 replies on “ArticulationBody를 사용하여 현실감 있는 모션과 동작을 구현한 산업용 프로토타입 제작”

I am very happy with Unity and its progress in the PhysX usage for industrial purposes. With our Asset Store solution Game4Automation for Unity we already support industrial use cases including interfaces to a lot of automation controllers. Currently we use mainly “forward kinematics” based on Gameobject hierarchy because this guarantees the accurate positions of the end effectors in industrial kinematics. The example project also shows a forward kinematic. For us, a more stable kinematic (with less “spring” behaviors in the joints) is mainly useful for backward kinematics. So my question is, if you move the robot end-effector, will the joints be able to follow exactly?

Friends, at the university gave the task to write an paper about Elon Musk and his contribution to alternative types of energy. Please help me with ideas. To be honest, I thought the process of writing this task would be much easier. Due to the fact that there is a lot of information, I do not understand what can be taken and considered objective, and what not. That’s why I decided to pay to write a paper service for writing scientific papers, with which I have been cooperating for a long time https://papersowl.com/pay-for-papers. I can advise you this service, where really professionals work.

Is it possible to apply world physics to the individual joints?

Say an object were to hit/push the end-most joint (end effector), would it correctly apply that force to that joint and the other joints connected to it (causing them to change position/rotation)?

If the robotic arm was to be mounted on a moving platform which moves at dynamic speeds (taking into account acceleration and deceleration), would the initial force provided by the acceleration cause an impact on the joint’s position/rotation?

Would it be possible to mount this robotic arm to a player controlled character (for game uses or robot simulation) and have the end effector’s position/rotation change based on an input device (i.e. VR controller/tracker pose)?

Thank you.

As loops are not allowed, how is the Linked Spheres demo constructed? Is it a single “1-D” sequence of ArticulationBody components?

Also, as articulations form a logical tree, does it means that we could have braches? i.e. a robot arm that splits articulated sub-arms at one or several points.

Does it mean we don’t need to apply counter-torque/large friction to prevent robotic arm to fall by default?

Comments are closed.