로봇계의 Chat GPT 모먼트
로봇 제어는 어렵다. 그리고 복잡하다. 단순히 모터 1개만 정회전, 역회전, 정지만 하는 작업이라 하더라도 어렵다. 젓가락을 손바닥 위에 올리고 앞 뒤로만 움직여서 중심을 잡으라고 하면 사람도 하기 어렵다. 그 어려운 것을 모터로 하려니 간단한 작업은 아니다.
막대기 중심 잡기는 그냥 던진 예시 같아 보이지만 사실 Cart Pole이라고 하는 매우 유명한 게임이다.
일직선상에 고정되어 있는 네모를 옮겨 막대기가 쓰러지지 않도록 최대한 오래 버티는 것이다. 오래 버틸수록 점수가 높다. 할 수 있는 것은 아주 간단하게 왼쪽으로 이동, 오른쪽으로 이동, 아무것도 하지 않기 이 세 가지다.
고전적인 방법으로 이 게임을 해결하기 위해서는 막대기의 현재 각도와 속도를 입력하고 그 값에 따라 움직임을 출력하는 함수를 수학적으로 설계해서 제어를 하면 된다. 여러 고전적인 제어 방법들이 있고 대학교 학부과정을 거치며 배운 경험이 있다.
하지만 지금은 AI의 시대가 아닌가? 막대기의 각도와 속도를 input(state)으로 사용하고 검은색 네모의 움직임을 output(action)으로 출력하는 모델을 설계한 다음 오래 버티면 버틸수록 점수(reward)를 높게 책정해 주고 학습하면 된다. 이것이 강화학습의 기본 개념이다.
현실에서 Cart Pole 게임과 같이 모터와 막대기를 세팅하고 학습을 하는 것은 무리이고, 컴퓨터에서 게임 시뮬레이터 1개로 학습한다고 하면 꽤나 오래 걸린다. 그런데 동시에 1000개의 게임을 하면서 학습하면 어떨까? 당연히 빨리 학습할 수 있다. 물론 그에 따라 높은 컴퓨팅 성능을 요구한다.
게임들은 보통 CPU를 기반으로 작동하기 때문에 시뮬레이션을 통한 강화학습 분야에서 동시에 돌아가는 게임의 수, 즉 CPU의 개수가 중요한 요인이었다. CPU가 많으면 많을수록 동시에 시뮬레이션할 수 있는 게임 수가 증가하기 때문이다. 그런데, CPU는 매우 비싸고 많아봤자 우리가 사용할 수 있는 수준에서는 32 코어를 넘기기 힘들다. 사실 32 코어도 매우 많은 숫자다. GPU는 어떨까? AI 분야에 혁신을 가져온 GPU는 RTX 4090 기준 16,384개의 쿠다 코어를 갖고 있다. 개수로는 쨉이 안된다. 그런데 GPU는 단순한 계산만 가능하기 때문에 물리적인 계산을 거쳐야 하는 시뮬레이션을 적용하기엔 한계가 있었다.
Chat GPT 모먼트가 로봇 시뮬레이션계에 당도한 것 같은 프로젝트가 등장했다. 그것이 바로 Isaac Gym이다. 원래 로봇 시뮬레이션 소프트웨어는 존재했다. 물리적인 계산도 모두 해주고, 로봇도 쉽게 불러와서 사용할 수 있었다. 대표적으로 MuJuCo가 있다. Isaac Gym은 기존의 시뮬레이션들이 못했던 GPU 기반의 물리적인 계산을 해냈다. 이제 CPU 없이 모두 GPU 위에서 시뮬레이션이 가능해진 것이다. 불리한 계산이지만 CPU 1 코어와 그래픽카드 1장을 비교한다면 무려 25만 배 좋은 성능을 체감할 수 있다.
이렇게 좋다 좋다 해놓고 못쓰게 해 놓았다면 말짱 도루묵이다. 설치하고 실제로 사용해 보기로 했다. 설치는 간단했고 예제도 잘되어있어서 아주 쉽게 구동할 수 있었다. 먼저 3개의 다리로 구성된 테이블에 떨어지는 공을 받아서 중심을 잡는 조금 더 복잡한 제어가 필요한 예제를 불러와서 학습을 해보았다. 아래 영상은 학습하기 전과 후이다. 학습 시간은 5분도 걸리지 않았다.
학습이 아주 잘 이뤄지고 성능도 좋다. 다음은 큐브의 자세를 로봇 손으로 제어하는 과제를 학습시켰다. 공중에 떠있는 큐브의 자세대로 손을 사용해 똑같이 만들어내는 과제다.
이번에도 역시 잘 학습했다. 다음은 4족 보행 로봇을 계단, 울퉁불퉁한 지형에서 잘 걷도록 학습을 해보았다.
어정쩡하지만 더 학습하면 잘 걷게 될 것이라고 확신한다. 이 모든 것을 학습하는데 1시간도 걸리지 않았다. 가히 로봇 시뮬레이션 계에 Chat GPT 모먼트가 아닐 수 없다. 환경 구성 코드도 모두 오픈되어 있고 내 커스텀 로봇을 넣을 수도 있다. 기존에 CPU 베이스로 학습을 했을 때의 답답함을 뻥 뚫어주는 기분이다. 복잡한 제어는 머리 싸매고 제어 함수를 짤 바에는 공부했던 것이 아깝긴 하지만 언젠가 그 개념이 쓰이겠지라는 희망을 품고 시뮬레이션 환경을 구성해서 강화학습으로 제어하는 것이 좋을 것 같다.
추가적으로 ROS와 통합이 되기 때문에 현실 로봇 제어에도 바로 적용할 수 있다. 여러 테크닉(Add Random Noise 등)을 활용하여 학습한다면 시뮬레이션 모델을 현실로 적용하는 Sim-2-Real의 벽도 매우 낮아질 것으로 기대한다.