Omniverse/Isaac Sim

[Nvidia Omniverse] Isaac SIm Articulation Body 개념 및 데모

pnltoen 2023. 1. 1.
반응형

Isaac Sim

Nvidia Omniverse


 

서론

 

기존 유니티로 진행한 프로젝트에서 Articulation Body를 활용하여 AMR, Quadruped 등 유니티 환경에 관절 오브젝트를 구현해보았다. Quadruped는 회사에서 잠깐 보았던 내용이여서 별도의 글은 작성하지 않았는데 잘 작동하는 것을 확인하였음. Nvidia Omniverse에서는 이러한 부분이 어떻게 사용이 되는지 알고 싶었고 찾아보니까 관련된 튜토리얼 영상이 있어서 해당 영상 시청 및 크렌인 구동을 진행해보았다.

 

참고로 설정은 쉽지만 실제 물체와 최대한 비슷하게 움직이게 하기 위해서는 유체, 고체, CAD의 Tree (유니티에서는 Hierarchy, 옴니버스는 Layer?) 의 개념, 진동학 등 많은 개념이 필요하다. 이 부분은 별도로 정리하지 않고 진행하겠음.

 

시청한 영상의 링크는 맽 밑 참고자료에 넣어 놓았다. 공부 늦게 할 수록 배우기 쉽다는걸 느낀다. Beta 버전 때는 이런 것도 없이 내용 다른 문서 찾아서 직접 하나하나 해봤는데... 유니티 공부하면서 배경지식이 많이 늘어 비슷한 RT3D에 대한 이해도 자체가 올라간 것 같다. 공부가 수월하게 진행되고 있음.

 

Rigging Processes

 

Rigging 이라는 단어가... 참으로 애매한데 쉽게 이야기하면 관절을 이어주는 개념이다 Skelectons 같은 다만 이 부분에 대해 유의해야할 점이 이게 기존 Animation 개념으로 구현을 할 것 인지? (눈에만 보이고 역학 고려 X) 아니면 Articualtion 개념으로 구현을 할 것인지? (역학 고려, 설정 복잡) 이 부분을 선택해야 한다. 당연히 Ani로 하는게 쉽고 빠르고 성능면에서도 이점을 볼 수 있다. 이는 Collider 연산을 하지 않기 때문인데 물론 상황에 따라 다를 수는 있음. 일반적으로는 그렇다.

 

발표자가 이야기 하는 단계는 아래와 같다.

 

  1. Assets 준비하기
    1. To make your life eaiser It's better to rename all of these parts right now to someting inutitive => ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 공감함..
  2. RigidBody와 Collider 준비하기 
    Collider는 본인 목적에 맞게 주면된다. 필요 없는 것 까지 걸면 성능에 악영향
  3. 조인트 설정하기

보니까 Layer에서도 Unit 설정이 가능하네...? 하하... 뭔가 지난 글들이 다 필요없어진 느낌... => 해봤더니 예상한대로 안됨. 설정 이 후 생성한 오브젝트만 영향을 받음.

 

찾아보니까 Scale이 중요한 이유가 Physical Material을 쓸 때 Onmniverse는 mass를 Automatic하게 calculate 하고 이에 scale이 커지면 Mass가 커짐. (기존에 AABB와 같은 extent algorithm 그리고 Ridar Node point 이렇게 2가지만 알고 있었는데 하나 더 추가됨!)

 

2번째 영상에 보면, Physics Scene에서 Single Asset을 확인할 때는 Gold Standard 인 CPU를 사용하라고 이야기 한다. GPU는 multiple object의 distributed processes에 최적화 된듯

 

아는 내용이지만 복습하면 TImestep이 작으면 -> 시뮬레이션의 정확도가 올라감 대신 성능에 악영향

반대로 Timestep이 크면 -. 시뮬레이션의 정확도가 내려감 대신 성능에 긍정적인 영향 

 

유니티, 옴니버스 모두 0.02 즉 50Hz로 기본 설정 되어있음.

 

Fixed Object인 경우에 예를 들어서 root나 base_link 등? 그냥 collider prefab을 입히면 됨. 이전에 하면서 오류 메세지를 봤는데 Omniverse는 Dynamic의 경우 콜라이더 셋팅을 다시 해줘야 하는 것 같았음. 

 

Dynamics X forms = Actor X form 둘이 같다... 같은 뜻의 단어가 왜이리 많을까 슬프다...

실습하기

 

해당 영상에 Sample Asset이 있지만 나는 별도의 캐드 파일이 있으니 다운 받지 않았다.

 

위의 과정으로  Asset을 준비한 후 모든 Xform Object의 Kind 를 assembly로 바꾼다. 이는 필수는 아니고 이렇게 해야 클릭 했을 때 최상단의 오브젝트로 표시되서 쉽게 rigging 할 수 있는듯?

 

움직일 애들한테는 RIgidbody와 Collider preset을 같이 해준다

 

중요한 점 : Collider는 별도의 mass를 갖고 있음. automatically 하게 compute 되는 mass라고 이야기 하는데... 이해가 간다. 

 

[Windows - SImulation - Debug]에 보면 유니티의 Physics Debugger 와 동일한 툴이 있다. 예전에 한참 frame 마다 debug하는 방법을 찾았는데 여기에 있넹... STep을 누르면 된다.

 

[Create - Physics - Collision Group] 으로 묶으면 뭔가 되게 깔끔하게 시뮬레이션 됨. 이거 뭐지... 찾아봐야겠다. 지금 보았을 때는 Joint 단에서 서로 간섭하지 않는 것 같음

 

Ragdoll을 예시로 한 모든 RT3D의 문제점인데... 질량차가 클 경우 시뮬레이션 해석 결과에 문제가 생긴다. 근데 옴니버스는 Collider에 mass를 잡으니까 (이 부분은 유니티랑 다른듯...?) 나사와 같은 작은 물체는 콜라이더를 안잡는게 좋을 듯. 이것도 공부해 보면 좋을 것 같은데 timestep이 작아지면 이 부분도 가능하다고 한다. 공식이 따로 있을 듯...?

 

Collider mass가 tight하게 잡히지 않을 때 => mass compute가 제대로 작동 안함 => Mass를 별도로 넣어줘야 함.

 

 

이런 툴이 있네... body 그리고 mass axes를 잡아주네... debugging 하기 너무 좋을듯..

 

RT3D 는 frictionless한 시스템이기 때문에... 실제에서 크게 작용하지 않는 작은 영향도 크게 만들 수 있다.

 

하다보니까 알게 됐는데 다음과 같이 서로 컴포넌트로 여러 오브젝트가 걸려있을 경우

 

 

옴니버스는 오브젝트를 3개로 인식한다. 기본 2개의 도형 1개 그리고 각각을 나눠서 2개.

참고 자료

 

 

 

 

 

 

반응형

댓글