본문 바로가기

Sim2Real/Acrobot

Simulation to Real. #1 [Acrobot Simulation-모델 만들기]

728x90

#Intro 

그간 열심히 이론을 공부하면서 어떤 DRL 방식을 최신 트렌드로 사용하고 있는지

또 어떻게 들어가는지 알아봤다. 

 

근데 말로만 하면 솔직히 누가 못하나

직접 만들어보는 과정이 중요하다고 생각해서 Acrobot을 만들어 보려고 한다. 

다른 명칭으로는 Two-inverted-Pendulum같은 말들도 있는데

OpenAI-Gym에서 사용되는 Acrobot이라는 명칭을 따서 만들어 볼 예정이다.

그림 1. OpenAI-Gym [Acrobot]

 

 


1. Observation

Acrobot을 강화학습 할 때 필요한 요소는 6가지로 나타난다. 

그림 2. Observation Information

요약하면 우리가 필요한 정보는 첫 링크의 θ1과 중간 링크의 θ2의 정보가 필요하다. 

첫 번째 joint는 Actuator를 사용해야 하므로, Motor로 만들고

두 번째 joint는 Rotary Encoder만 사용해도 된다고 본다.

 


2. Modeling

이전에 Quadruped Robot을 공부하면서, 강화 학습에 돌리기 이전에 Modeling부터 잘해야 된다는 교훈을 얻었는데,

실험실에 있는 장비를 토대로 모델을 제작해야 하다 보니, 내가 생각하는 디자인보다 더 제한적인 형태를 가지게 됐다.

 

1. 시뮬레이션을 위해 최대한 간단하게

2. 실물 제작 시 구동 가능하게.

 

두가지 키워드에 맞춰서 CATIA로 모델링을 하게 됐다.

URDF변환 시에는 SolidWorks를 사용하지만 3D CAD 툴 중에는 CATIA만 한 게 없는 것 같다.

무엇보다 Tree수정이 매우 간편해서 CATIA -> SolidWorks -> URDF의 과정을 거쳤다.

그림 3. Custom Acrobot Modeling

링크 1과 링크 2를 잇는 Rotary Encoder의 형상 대비

Motor의 Shaft가 작다 보니 Model의 형태가 엉뚱하게 나왔다. 

더군다나 제작을 3D printer로 하게 되는데, 제작 시 치수 공차를 대비해서

상단부에 홀을 내고 볼트나 너트를 조여 Roatory가 흔들리지 않도록 제작해 보았다.

 

최대한 URDF의 간단한 도형 Box와 Cylinder의 형태를 기반으로 만들고,

Rotary Encoder의 선이 문제가 될까 걱정이었는데,

이를 최대한 방지해 보고자 아래 부분을 살짝 뚫어서 라인 구멍을 냈다.

 

걱정이 드는 부분은 Shaft의 마모 때문에 hole 사이즈가 변하고

Observation Data에 영향을 주지 않을까 걱정이 든다.

 

하지만 뭐 예산이 없고 학교에 남아도는 재료들을 모아다가 제작하다 보니

어쩔 수 없다고 생각한다.

 


3. Simluation

 

이제 Simulation에도 CAD 모델을 넣어놓자. 

과정은 앞서 언급한 것과 같이 Solidworks를 통해 변환을 했고

간단하게 Axis, Coordinate만 찍어 놓은 뒤에 바로 URDF로 변환시켰다.

위 과정에 대한 자세한 설명은 Isaac Gym 카테고리의 시뮬레이션 오답노트 (https://want-study.tistory.com/25?category=1248744)

부분을 참조하면 좋을 거 같다. 

그림 4. Isaac-Gym Acrobot

Simulation자체에서 Flex 한 Line까지 구현하는 것은 힘들어서 SolidWorks 수정 시 제거하고 

Rotary부분과 Rotary Case부분을 합쳐서 간단한 모델로 구현했다.

이제 개강하면 학교에서 바로 3D Printing 할 예정이다.