본문 바로가기

Isaac Gym

시뮬레이션 하고 싶다. #3-1 [Make Custom Gym (Part 1)]

728x90

#1 Isaac Gym에서 Simulation 만들기

본 내용은 NVIDIA에서 제공되는 Programming-Simulation Setup를 참조하여 만들었습니다.

1. Simulation Setup & gymapi (개요)

Isaac에서는 비교적 간단한 방법으로 Simulation을 구현할 수 있다.

전체적인 내용을 다루면 글이 길어지기 때문에 Part별로 나눠서 설명하고자 한다.

 

그림 1. Simulation 설정

(그림 1.) Isaac의 특징에 대해 설명을 하고 이어서 gymapi의 기능과 어떻게 모델을 넣고, 어떻게 값을 조정하는지 알아본다.

그림 2. Simulation을 위한 Module들

일단 첫 구성은 그림 2. 에서 나타낸 바와 같이 아이작 짐 Sim의 연산을 위해 하드웨어들을 지정하는 과정이 필요하다.

2. Simulation Parameters 설정하기

그림 3. Simulation Parameters

 

이후 Simulation에서 사용될 물리현상들을 정의할 필요가 있다. 

정의되는 변수들은 그림 3. 과 같이 다양한 종류들이 있다. 

코드를 직접 짜 보면서 Isaac이 기본적으로 추구하는 구조가 정해져 있는데

"""

Main_변수                        = gymapi. 사용할_기능()

Main_변수.적용시킬_변수 = 특정한 기능 or Value 지정

Main                                 = gym.create_Main_변수(변수, 들)

"""

이런 식으로 class에서 self로 정의된 항목의 Data를 edit 하는 형식으로

Simulation을 만들어간다.

처음 3D tool을 접해보는데 굉장히 직관적이었다. 위의 구조를 눈에 익혀두면서 코드를 짜 보는 걸 추천한다.

 

3,4. Plane 생성 & Model 불러오기

그림 4. Plane & Load a Assets

설명한 된 바와 같이 무중력 환경이 아니므로 접지가 되는 면이 필요하다. 이는 예전에 Gazebo를 처음 만들 때도 필요했던 설정인데, 이 부분을 #3-1에서 자세하게 설명하고 있다. 

 

또한 #2에서 언급한 것처럼 Main_변수를 만들고

해당 변수의 Data값들을 수정해주면서

마지막에 add_ground를 통해 Custom 된 변수를 생성하는 것이 보인다.

 

#4 에서는 우리가 만든 Custom Model을 불러오는 역할을 한다.

만일 우리가 불러오는 모델의 추가적인 기능을 넣고 싶다면 AssetOptions()를 통해 다양한 옵션들을 첨부할 수 있다. 

공식 Document에 따르면 이 기능이 대략 20가지 정도 돼 보인다.

전부 기재하고 싶었지만 과하게 길어져서 이는 생략한다. 

 

Line 94의 fix_base_link 값을 조정해서 모델을 기저에 고정 하거나 자유롭게 움직이거나 할 수 있다.

 

5. Actor와 Env 만들기

 Isaac은 env속 actor가 존재한다는 느낌으로 흘러간다. (다른 툴도 그러는지 잘 모르겠다.)

여기서 눈여겨볼게 collision기능 쪽인데

Reinforcement Learning 할 때 이 부분을 참고해서, train 때 다른 파일들과 충돌하지 않게

독자적인 env에서 task를 수행할 수 있겠구나 하는 생각을 가졌다.

물론 예제를 더 뜯어봐야 알겠지만, 일단 내 개인 Custom 모델을 넣고자 할 때 어떻게 흘러갈지 감이 잡히더라.

 

일단 여기까지 하면 backend에서의 거의 모든 작업이 완료됐다. 

물론 실행하면 아직은 아무런 창이 나오지 않을 것이다. Viewer를 따로 설정해줘야 하기 때문.

이 부분은 다음에 업로드하려고 한다.