TT Lab
요금제

한국어

시작하기
블로그

블로그

탁구 팔 강화학습: 기준선을 넘었지만, 이득의 대부분은 학습이 아니었다

상태: 초안 (2026-10-18), 실측. 모든 성공률은 시뮬레이터 안의 값이고, 카메라 주기·지연·잡음과 회전 힌트 정확도는 가정값입니다. 학습은 2026-10-18 에 홈랩 쿠버네티스의 GPU 노드 한 대(노트북용 RTX 4060 한 장)에서 임시 파드로 했습니다. 파드 상한은 CPU 6코어·메모리 4 GiB 이고, 같은 노드의 다른 서비스와 자원을 나눠 썼습니다. 판은 MuJoCo 3.16.0, MuJoCo Warp(warp-lang 1.18.0), Python 3.11, PPO(은닉층 256) 입니다. 물리는 2·5편과 같습니다(시간 간격 0.5 ms, 라켓 강성 4e6). 평가는 학습 공과 분리한 평가 공 500개(5편 기준선과 같은 seed 0 표본)로, 랜덤화 없는 DeepMind 기본 물리에서 했습니다. RL 은 3시드의 중앙값이고, 괄호는 시드 최소–최대입니다. 기준선과 명목 계획기는 결정적이라 한 번 돌렸습니다. 원자료(학습 기록, 평가 결과, 녹화 궤적, Warp 대조)는 작업 디렉터리 measure/sim-tt-rl/ 에 있습니다.

목차

1. 직관: 무엇을 배우게 할 것인가

강화학습으로 탁구를 가르치는 방법은 크게 둘입니다. 하나는 로봇의 관절을 직접 움직이게 하는 것입니다. 정책이 매 순간 관절 목표를 내고, 공을 맞히는 법부터 스스로 찾습니다. 다른 하나는 고전 제어가 잘하는 일은 맡기고, 판단만 배우게 하는 것입니다. 역기구학·궤적·관절 제어는 그대로 두고, 정책은 「언제, 어떤 각도로, 얼마나 세게 칠지」 같은 타격 파라미터만 고릅니다.

「탁구 로봇 팔의 기초」 13편(보상과 행동 공간, ../robot-arm-basics/13-reward-and-action-space.md)은 진자 라켓으로 이 둘을 견줬고, 하이브리드가 빨리 배우지만 예측기가 회전을 모르면 막힌다고 보였습니다. 이번에는 5편의 실제 크기 로봇(갠트리 2축 + 손목 2축)과 공개 공 분포에서 같은 질문을 던졌습니다.

2. 실험 설계

방법 정책이 내는 것 학습
고전 기준선 없음(5편의 계획기) 없음
하이브리드 명목 없음. 타격 파라미터를 싼 해석식으로 정하고, 관절 한계를 넘는 해는 포기하지 않고 한계 안으로 잘라서 실행 없음
RL (a) 하이브리드 결정 시점마다 법선 yaw·pitch 보정, 면 속도, 타격 시각, 라켓 중심 x·z 보정. 실행은 닫힌 해 IK·5차 궤적·PD PPO, 100만 결정, CPU
RL (b) 관절 직접 100 Hz 로 관절 목표 위치·속도. PD 와 한계만 거침 PPO, 2.5억 결정, GPU(MuJoCo Warp, 4,096 세계)

3. 결과

반환 성공률: 이득의 대부분은 새 계획기에서 왔다 평가 공 500개, 시뮬레이터 안. RL 은 3시드 중앙값(랜덤화 없음·지연 학습은 1시드). 0% 25% 50% 75% 100% 참 상태 고전 기준선 61.6 하이브리드 명목(학습 없음) 83.2 RL (a) 하이브리드 84.8 명목 + 회전 힌트(학습 없음) 83.2 RL (a) + 회전 힌트 84.2 RL (b) 관절 직접 75.6 RL (b) 지연 0–120 ms 학습 74.4 RL (b) 랜덤화 없음 2 120 Hz·30 ms 고전 기준선 59.2 하이브리드 명목(학습 없음) 80.6 RL (a) 하이브리드 83.8 명목 + 회전 힌트(학습 없음) 80.6 RL (a) + 회전 힌트 83.4 RL (b) 관절 직접 76.2 RL (b) 지연 0–120 ms 학습 73.4 RL (b) 랜덤화 없음 72.6 120 Hz·100 ms 고전 기준선 26.6 하이브리드 명목(학습 없음) 53.6 RL (a) 하이브리드 58.2 명목 + 회전 힌트(학습 없음) 66.6 RL (a) + 회전 힌트 68.6 RL (b) 관절 직접 29.6 RL (b) 지연 0–120 ms 학습 52 RL (b) 랜덤화 없음 0
그림: 방법과 조건별 반환 성공률
방법 참 상태 120 Hz·30 ms 120 Hz·100 ms
고전 기준선 61.6% 59.2% 26.6%
하이브리드 명목(학습 없음) 83.2% 80.6% 53.6%
RL (a) 하이브리드 84.8%(84.4–85.0) 83.8%(82.8–83.8) 58.2%(58.0–59.0)
명목 + 회전 힌트(학습 없음) 83.2% 80.6% 66.6%
RL (a) + 회전 힌트 84.2%(84.0–84.2) 83.4%(83.0–83.4) 68.6%(67.4–69.0)
RL (b) 관절 직접(Warp) 75.6%(75.2–76.0) 76.2%(75.8–78.4) 29.6%(12.8–38.6)
RL (b) 지연 0–120 ms 로 학습 74.4% 73.4% 52.0%
RL (b) 랜덤화 없이 학습 2.0% 72.6% 0.0%
RL (b) CPU 판(30분 학습) 0.0% 0.0% 0.0%

(지연 0–120 ms 학습, 랜덤화 없음, CPU 판은 1시드입니다.)

3.1 정직하게 읽기: 이득은 어디서 왔나

3.2 관절을 직접 배우는 RL

3.3 같은 공, 세 방법

평가 공 21번을 120 Hz·30 ms 조건에서 녹화한 궤적(5 ms 간격)으로 다시 그렸습니다. 그림을 누르면 3배 느리게 재생합니다.

같은 공, 세 방법: 옆에서 본 공과 라켓 평가 공 21번, 카메라 120 Hz·지연 30 ms 조건, 기록된 궤적(5 ms 간격). 3배 느리게. ▶ 누르면 재생 고전 기준선 계획 실패 (관절 한계 밖) 하이브리드 명목(학습 없음) 반환 성공 RL (a) 하이브리드(학습 후) 반환 성공 가로축은 탁자 길이 방향(로봇 쪽 끝선 뒤 점선이 타격면), 빨간 선분은 라켓 면입니다.
그림: 같은 공에 대한 기준선, 명목 계획기, 학습 후 하이브리드의 궤적

기준선은 0.2 s 에 계획을 세우다 관절 한계 밖이라 포기하고 라켓을 움직이지 않습니다. 명목 계획기와 학습 후 하이브리드는 같은 공을 상대 코트로 넘깁니다. 두 궤적이 거의 같다는 것이 3.1절의 이야기 그대로입니다.

3.4 남은 실패

4. GPU 가 필요했던 이유: MuJoCo Warp

관절 직접 RL 은 표본이 많이 듭니다. CPU 판(프로세스 6개)은 30분 동안 1,750만 결정을 학습했지만 성공률 0% 에 머물렀습니다. 같은 환경을 MuJoCo Warp 로 옮겨 GPU 한 장에서 4,096 세계를 함께 돌렸습니다.

학습 곡선: 벽시계 시간 대 학습 중 성공률 학습 분포(랜덤화·탐색 잡음 포함)에서 잰 최근 회차 성공률. 시드별 선. 0 25 50 75 100 0 30 60 90 120 150 벽시계(분) RL (a) 하이브리드 RL (a) + 회전 힌트 RL (b) 관절 직접 RL (b) 지연 0–120 ms RL (b) 랜덤화 없음 RL (b) CPU 판 CPU 판은 30분 동안 0%. Warp 판은 2.5억 결정에 39–62분.
그림: 학습 곡선
실행 결정 수 학습 시간 물리 스텝/s(중앙값) 학습 중 마지막 성공률
RL (a) 하이브리드(CPU, 3시드) 100만 60.5–145.6분 59,526–115,518 75.0–75.8%
RL (b) CPU 판 1,750만 30.0분 214,169 0.0%
RL (b) Warp(3시드) 2.5억 41.5–62.0분 1,833,179–2,393,369 63.5–65.5%
RL (b) Warp, 지연 0–120 ms 2.5억 39.3분 2,498,807 50.7%

(물리 스텝은 dt 0.5 ms 의 MuJoCo 스텝입니다. 학습 중 성공률은 랜덤화와 탐색 잡음이 섞인 학습 분포에서 잰 값이라 3절의 평가값과 다릅니다. 하이브리드 학습 시간이 시드마다 다른 것은 같은 노드의 다른 작업과 CPU 를 나눠 썼기 때문입니다.)

Warp 로 옮겨도 같은 물리인지 먼저 확인했습니다.

5. 실행 중 있었던 일

학습 파드는 kubectl run --rm -i 로 띄웠습니다. 컨테이너가 끝나면 파드가 저절로 지워지게 하려는 것이었습니다. 그런데 첫 파드는 약 4시간 뒤 attach 연결이 TLS 오류로 끊겼고, 그 순간 --rm 이 학습 중인 파드를 지웠습니다. 그 뒤로는 컨테이너가 1분마다 한 줄씩 출력해 연결을 살려 두고, 결과는 10분마다 바깥으로 꺼내 두었습니다. 파드에는 최대 실행 시간(activeDeadlineSeconds)을 걸어 마지막 안전장치로 두었습니다. 같은 노드에서 다른 서비스가 돌고 있어 메모리 상한을 4 GiB 로 두고, 노드의 남은 메모리를 10분마다 기록했습니다(기록한 37번 동안 5,099–8,685 MB 여유).

6. 미실측

7. 다음 편으로

다음은 낮은 공과 작업 공간을 넓히는 깊이 축을 로봇 모델에 넣어 같은 평가를 다시 돌리는 것입니다. 실제 영상으로 물리와 심판을 맞추는 이야기는 8편에 있습니다.

티티 한마디. 강화학습이 기준선을 크게 이겼다고 기뻐했는데, 알고 보니 대부분은 학습 없는 새 계획기 덕분이었어요. 「배운 몫」과 「설계가 바뀐 몫」을 나눠서 재야 진짜 실력이 보여요!

참고

모든 링크는 2026-10-18 에 열람해 열리는 것을 확인했습니다.

로그인하면 좋아요를 누를 수 있습니다

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다