DARwIn-OP RL 보행 프로젝트 시작
최근 어릴적 꿈의 로봇이었던 DARwIn-OP를 우연찮게 만지게 될 기회가 생겼다. 자동차든 PC든 레트로핏 하는 것을 좋아하다 보니 여기에 젯슨 오린 나노를 올려보고싶다는 생각이 들었고, 하는 김에 RL로 보행제어를 해보고 싶어졌다. 그런 관점에서 이 로봇은 생각보다 좋은 실험 대상이었다. 크기가 작고, 관절 수가 충분하고, 원본 프레임워크가 비교적 명확하며, 동시에 오래된 코드와 실제 하드웨어의 제약이 그대로 남아 있어 비교군과 해결해야 할 문제가 명확하다.
DARwIn-OP의 원래 보행은 사인파 기반 walking engine을 중심으로 돌아간다. 발의 궤적을 만들고, 역기구학으로 관절각을 계산하고, 자이로 기반 보정 값을 더해 8ms 주기, 즉 125Hz로 모터 명령을 보낸다. 이 방식은 구조가 명확하고 튜닝 포인트가 눈에 보인다는 장점이 있지만, 결국 사람이 파라미터를 하나씩 만져가며 맞춰야 한다. 바닥 조건이 바뀌거나, 무게중심이 바뀌거나, 모터 반응이 기대와 다르면 다시 긴 튜닝이 시작된다.
이번에 해보고 싶은 방향은 그 walking engine을 완전히 버리는 것이 아니라, 먼저 기준선으로 삼고 그 위에 강화학습 파이프라인을 얹어보는 것이다. 시뮬레이션에서는 MuJoCo와 Isaac Lab을 사용하고, 학습은 PPO를 중심으로 진행한다. 관측값에는 몸체 자세, 각속도, 관절 위치와 속도, 이전 action 등이 들어가고, policy는 20개 관절의 목표 위치를 출력한다. 단순히 “앞으로 가면 보상”만 주는 것이 아니라, 넘어지지 않는 것, 몸통 높이를 유지하는 것, 관절 한계에 무리하게 붙지 않는 것, action이 너무 튀지 않는 것까지 같이 봐야 한다.
문제는 언제나 sim-to-real이다. 시뮬레이터 안의 로봇은 너무 이상적이다. 목표 각도를 주면 모터가 잘 따라가고, 마찰은 깔끔하며, 지연도 통제 가능하다. 그래서 RL 보행이라는게 사실 엄청 쉬운일이 아닐까 라는 망상까지 했었다. 하지만 실제로 로봇에 얹어보니 MX-28 모터는 그렇지 않았다. 연식이 오래된 탓도 없지않아 있겠지만 속도 제한, 토크 제한, 내부 PID, 통신 지연, 배터리 전압, 발바닥 접촉 상태가 모두 영향을 주었다. 그래서 최근 작업은 “정책을 한 번 학습해서 바로 걷게 만들기”보다는, 실패 원인을 종류별로 다 확인하는 쪽에 가까웠다.
이러한 현실을 겪고 나서 재정의된 현재 목표는 오래된 DARwIn-OP 코드베이스를 Jetson 환경과 현대적인 RL 학습 파이프라인에 맞게 다시 해석하고, 시뮬레이션과 실기체 사이에서 무엇이 어긋나는지 기록하는 것이다. reference gait를 만들고, Isaac Lab에서 학습하고, 실제 로봇에서 policy를 실행하고, 다시 로그를 보며 gap을 줄이는 식이다.
“휴머노이드 로봇을 강화학습으로 걷게 만들기”라는 멋진 목표로 시작된 이 프로젝트는 조금 더 지저분하고 현실적인 일에 가까워져 가고 있다. 오래된 프레임워크를 읽고, URDF를 구성하고, 그것과 실제 로봇의 관절 방향을 확인하고, 시리얼 통신 지연을 줄이고, 모터 응답을 재고, 시뮬레이터의 actuator를 현실에 가깝게 만들고, 안전정지 조건을 조정하는 일. 그래도 바로 그 지점이 재미있다. 강화학습 보행이 논문 속 영상이 아니라 실제 책상 위 로봇에서 움직이기 시작하려면, 결국 이런 노가다를 한번은 해야 할 것이고, 적절히 혼자 통제가능한 로봇으로 이것을 해본다는 것은 생각보다 즐겁다.
앞으로는 이 글을 시작점으로 삼아 DARwIn-OP의 원본 walking engine 구조, Isaac Lab 환경 구성, PPO 학습 설정, 그리고 실제 로봇 deploy에서 겪은 sim-to-real 문제를 조금씩 나눠 정리해보고자 한다.