상태: 초안 (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 세계) |
- 로봇 한계. 5편과 달리 하드웨어 계획(3편)의 값을 실제로 강제했습니다. 가로 축 3 m/s·40 m/s², 높이 축 3 m/s·30 m/s², 손목 20·30 rad/s 입니다.
- 도메인 랜덤화(학습 때만). 탁자 반발 0.80–0.98, 마찰 0.1–0.3, 항력 계수 0.40–0.55, 카메라 지연 0–60 ms, 관측 잡음 0–5 mm. 마그누스는 공개 데이터의 회전과 짝이므로(2편) DeepMind 값으로 고정했습니다.
- 회전 종류 힌트. 6편의 결론을 그대로 넣은 변형입니다. 탑·백·무회전 가운데 하나를 알려 주고, 그 종류의 평균 회전을 궤적 맞추기의 사전값으로 씁니다. 평가에서는 힌트가 80% 만 맞는다고 가정했습니다(학습 때는 70–100% 로 흔듦).
- 평가 조건 셋. 참 상태(공의 상태를 바로 앎), 120 Hz·지연 30 ms, 120 Hz·지연 100 ms(카메라 잡음 σ 3 mm). 모두 가정값입니다.
3. 결과
| 방법 | 참 상태 | 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 정직하게 읽기: 이득은 어디서 왔나
- 기준선 → 명목: +21.4–27.0%p, 학습 없음. 기준선은 참 상태에서 공 115개를 계획 단계에서 포기했습니다(관절 한계 밖 74, 라켓이 닿을 수 있는 자리에 공이 오지 않음 37, 예측상 바운드 없음 4). 명목 계획기는 한계 밖의 해를 잘라서라도 휘두르므로 계획 실패가 0 이 되었고, 그 115개 가운데 36개를 넘겼습니다. 「맞혔으나 탁자 밖」도 68개에서 10개로 줄었습니다. 둘 다 계획기의 차이입니다.
- 명목 → RL (a): +1.6–4.6%p. 학습이 보탠 순이득은 작습니다. 착지 오차 중앙값은 14.6 → 10.8 cm(참 상태)로 줄어, 조준은 조금 나아졌습니다.
- 회전 힌트: 지연 100 ms 에서 +10.4%p(58.2 → 68.6%). 그런데 학습 없는 명목 + 힌트도 66.6% 였습니다. 이 이득도 학습이 아니라, 힌트를 궤적 맞추기의 사전값으로 쓴 데서 나옵니다. 지연이 짧으면(30 ms 이하) 힌트의 이득은 없었습니다.
- 결론은 13편의 진자 실험, 그리고 6편의 「회전 종류 힌트 + 궤적 맞추기」 결과와 같은 방향입니다. 좋은 계획기와 좋은 예측(사전값)이 먼저이고, 학습은 그 위의 미세 조정이었습니다.
3.2 관절을 직접 배우는 RL
- 맞히기는 잘하지만 조준이 약합니다. 참 상태에서 못 맞힌 공은 40개로 하이브리드(64개)보다 적었지만, 「맞혔으나 탁자 밖」 45개와 「맞혔으나 자기 코트」 37개가 하이브리드(10개, 2개)보다 훨씬 많았습니다. 착지 오차 중앙값도 27.1 cm 로 하이브리드의 두 배를 넘습니다.
- 지연에 약합니다. 학습 때 지연을 0–60 ms 로 흔든 정책은 100 ms 에서 29.6% 로 떨어졌고 시드 사이 흩어짐도 컸습니다(12.8–38.6%). 지연을 0–120 ms 로 넓혀 학습하자 100 ms 에서 52.0% 가 되었습니다. 학습 때 보지 않은 지연은 견디지 못합니다.
- 랜덤화를 빼면 무너집니다. 랜덤화 없이 학습한 정책은 학습 조건(120 Hz·30 ms)에서는 72.6% 였지만, 참 상태에서 2.0%, 100 ms 에서 0.0% 였습니다. 관측이 학습 때와 조금만 달라져도 듣지 않습니다.
3.3 같은 공, 세 방법
평가 공 21번을 120 Hz·30 ms 조건에서 녹화한 궤적(5 ms 간격)으로 다시 그렸습니다. 그림을 누르면 3배 느리게 재생합니다.
기준선은 0.2 s 에 계획을 세우다 관절 한계 밖이라 포기하고 라켓을 움직이지 않습니다. 명목 계획기와 학습 후 하이브리드는 같은 공을 상대 코트로 넘깁니다. 두 궤적이 거의 같다는 것이 3.1절의 이야기 그대로입니다.
3.4 남은 실패
- 작업 공간. 학습 후 하이브리드가 참 상태에서 못 맞힌 공 64개는 모두 관절 한계로 해를 잘라 낸 경우였습니다. 남은 실패는 학습이 아니라 로봇이 닿는 범위의 문제입니다.
- 낮은 공. 타격면에서 공 높이가 10 cm 미만인 공 43개는 어느 방법도 거의 받지 못했습니다(기준선 0%, 명목 9%, 하이브리드 12%). 3편이 2단계 축으로 깊이(y) 축을 먼저 보자고 한 근거가 하나 더 생겼습니다.
- 지연 100 ms. 하이브리드에서도 실패가 3배로 늘었습니다. 카메라 지연을 줄이는 것이 여전히 가장 큰 지렛대입니다(3·5편과 같은 결론).
4. GPU 가 필요했던 이유: MuJoCo Warp
관절 직접 RL 은 표본이 많이 듭니다. CPU 판(프로세스 6개)은 30분 동안 1,750만 결정을 학습했지만 성공률 0% 에 머물렀습니다. 같은 환경을 MuJoCo Warp 로 옮겨 GPU 한 장에서 4,096 세계를 함께 돌렸습니다.
| 실행 | 결정 수 | 학습 시간 | 물리 스텝/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 로 옮겨도 같은 물리인지 먼저 확인했습니다.
- 같은 공 200개를 CPU 와 Warp 로 날려, 1초 뒤 위치 차이의 중앙값이 0.003 cm 였습니다.
- 라켓 판 두께 6·14 mm, 공 속도 10–40 m/s 의 터널링 시험에서 Warp 판은 300회(두께마다 150회) 모두 관통 0회였고, 반발 계수도 CPU 판과 소수 넷째 자리까지 같았습니다.
- 같은 정책 입력으로 CPU 환경과 Warp 환경을 64회 대조해 결과가 64회 모두 같았습니다.
5. 실행 중 있었던 일
학습 파드는 kubectl run --rm -i 로 띄웠습니다. 컨테이너가 끝나면 파드가 저절로 지워지게 하려는 것이었습니다. 그런데 첫 파드는 약 4시간 뒤 attach 연결이 TLS 오류로 끊겼고, 그 순간 --rm 이 학습 중인 파드를 지웠습니다.
그 뒤로는 컨테이너가 1분마다 한 줄씩 출력해 연결을 살려 두고, 결과는 10분마다 바깥으로 꺼내 두었습니다. 파드에는 최대 실행 시간(activeDeadlineSeconds)을 걸어 마지막 안전장치로 두었습니다.
같은 노드에서 다른 서비스가 돌고 있어 메모리 상한을 4 GiB 로 두고, 노드의 남은 메모리를 10분마다 기록했습니다(기록한 37번 동안 5,099–8,685 MB 여유).
6. 미실측
- 실기 전이. 모든 결과는 시뮬레이터 안입니다. 실제 로봇에서 같은 순서(명목 > RL 미세 조정)가 나올지는 모릅니다.
- 실제 카메라 지연. 30 ms 와 100 ms 는 가정입니다. 우리 카메라의 실제 지연 분포는 아직 재지 않았습니다.
- 회전 종류 분류 정확도. 평가의 80% 는 가정입니다. 공·소리·자세로 회전 종류를 실제로 얼마나 맞히는지는 재지 않았습니다.
- 라켓 고무의 실제 반발·마찰, 로봇 한계값(속도·가속도·힘)도 가정입니다.
- RL (b) 의 지연 0–120 ms 학습, 랜덤화 없음, CPU 판은 1시드입니다.
7. 다음 편으로
다음은 낮은 공과 작업 공간을 넓히는 깊이 축을 로봇 모델에 넣어 같은 평가를 다시 돌리는 것입니다. 실제 영상으로 물리와 심판을 맞추는 이야기는 8편에 있습니다.
티티 한마디. 강화학습이 기준선을 크게 이겼다고 기뻐했는데, 알고 보니 대부분은 학습 없는 새 계획기 덕분이었어요. 「배운 몫」과 「설계가 바뀐 몫」을 나눠서 재야 진짜 실력이 보여요!
참고
모든 링크는 2026-10-18 에 열람해 열리는 것을 확인했습니다.
- MuJoCo: https://github.com/google-deepmind/mujoco, MuJoCo Warp: https://github.com/google-deepmind/mujoco_warp
- 공개 초기 공 상태: https://github.com/google-deepmind/competitive_robot_table_tennis(© 2025 Google LLC, CC BY 4.0. 데이터는 다시 배포하지 않고 시뮬레이션 결과만 실었습니다.)
- 함께 읽기: 5편 고전 제어 기준선, 6편 DeepMind 탁구 로봇 개선 방향, 「탁구 로봇 팔의 기초」 13편 보상과 행동 공간(
../robot-arm-basics/13-reward-and-action-space.md) - 인용 코드와 그림의 궤적은 TT Lab 실험 코드의 출력입니다.