TT Lab
요금제

한국어

시작하기
블로그

블로그

시뮬레이션에서 실물로: 도메인 랜덤화, 지연·잡음 모델링, 시스템 식별, 대량 병렬 시뮬레이션

상태: 초안 (2026-10-18), 실측. 숫자는 노트북(Apple M1 Max, macOS 26.5)의 Python 3.9.6·numpy 2.0.2 로 직접 계산한 시뮬레이션 값입니다. 이 글의 「실물」은 물리 상수를 바꾼 또 하나의 시뮬레이터이며 실제 로봇이 아닙니다(하드웨어 미실측). 원자료와 코드: 작업 디렉터리 measure/robot-arm-basics/rl/의 ttenv.py, ppo.py, exp_rl.py(그룹 sim2real), 결과 out/rl/s2r_*_s{0,1,2}.json. 참고 자료는 2026-10-18 에 열람했습니다. 작성 규칙: 실측 데이터가 기본이고, 못 잰 것은 「미실측」, 확인하지 못한 것은 「미확인」으로 표시합니다.

목차

1. 직관: 시뮬레이터의 빈틈을 배운다

강화학습 정책은 보상을 올리는 모든 틈을 찾습니다(13편). 시뮬레이터 안에서 그 틈에는 시뮬레이터가 틀린 부분도 들어 있습니다. 라켓 반발이 실제보다 조금 세다면, 정책은 그 센 반발에 맞춰 살살 치는 법을 배웁니다. 실물에서는 공이 네트에 걸립니다.

1~10편이 보여 준 대로 탁구의 물리 상수는 불확실합니다. 문헌의 Magnus 계수는 7배 넘게 벌어져 있고(6편), 반발 계수 0.05 의 차이가 착지점 13 cm 였으며(7편), 카메라와 제어기의 지연은 수십~100 ms 였습니다(1편). 시뮬레이션에서 실물로 가는 문제(sim-to-real, sim2real)를 다루는 방법은 크게 네 가지입니다.

방법 생각 대가
도메인 랜덤화(domain randomization) 상수를 에피소드마다 흔들어, 어떤 값에서도 되는 정책을 배운다 더 어려운 문제가 되어 더 많이 배워야 한다
지연·잡음 모델링 실제 시스템의 지연과 잡음을 시뮬레이터에 넣는다 실제 지연을 재야 한다
시스템 식별(system identification, real2sim) 실물에서 상수를 재서 시뮬레이터에 넣는다 잴 수 없는 것(회전 효과 등)은 남는다
대량 병렬 시뮬레이션 위 세 가지가 늘리는 학습량을 계산으로 감당한다 GPU·CPU 자원

2. 실제 탁구 로봇이 한 일

3. 실측: 진자 라켓의 「실물」

3.1 설정

「실물」은 다음 다섯 가지를 바꾼 시뮬레이터입니다. 각 숫자는 1~10편에서 본 불확실성의 크기에 맞춰 골랐습니다.

항목 명목 시뮬레이션 「실물」 근거
라켓 반발 e_r 0.80 0.72 10편의 모델 오차 실험과 같은 값
관측 지연 0 20 ms(2걸음) 1편: 실제 시스템의 지연은 수십 ms
공 위치 잡음 0 σ 5 mm(속도 잡음은 그에 비례) 2·6편의 보정·관측 잡음 크기
항력 ×1.0 ×1.1 6편: 문헌 C_D 0.37~0.55
Magnus ×1.0 ×1.5 6편: 문헌값이 7배 넘게 벌어짐

학습 분포는 네 가지입니다. 모두 직접 제어, 형태 보상, PPO 기본 설정, 공 19,200개, 시드 3개이고, 평가는 학습에 쓰지 않은 공 1,000개로 명목 시뮬레이션과 「실물」에서 각각 합니다.

학습 분포 반발 지연(걸음) 잡음 항력 배수 Magnus 배수
랜덤화 없음 0.80 0 0 1.0 1.0
좁은 랜덤화 0.75~0.85 0~1 0~3 mm 0.95~1.05 0.8~1.2
넓은 랜덤화 0.65~0.90 0~3 0~8 mm 0.9~1.2 0.5~2.0
식별한 값 그대로 0.72 2 5 mm 1.1 1.5

좁은 랜덤화는 「실물」을 포함하지 않습니다(반발 0.72 는 범위 밖, 지연 2걸음도 밖). 넓은 랜덤화는 포함합니다. 마지막 줄은 시스템 식별이 완벽하게 성공한 경우입니다.

3.2 결과

학습 분포를 넓히면: 명목 시뮬레이션 대 「실물」 0 25 50 75 100 % 83 73 랜덤화 없음 91 80 좁은 랜덤화 57 55 넓은 랜덤화 79 74 식별한 값 그대로 명목 시뮬레이션 「실물」(다른 물리) 「실물」= 반발 0.72·지연 20 ms·잡음 5 mm·항력 ×1.1·Magnus ×1.5. 시드 3개.
그림: 학습 분포별 명목 시뮬레이션과 「실물」 성공률
학습 분포 명목 시뮬레이션 「실물」 중앙(최소~최대) 차이(중앙)
랜덤화 없음 82.9% 72.7% (62.9~80.0) −10.2%p
좁은 랜덤화 91.2% 79.5% (70.8~85.2) −11.7%p
넓은 랜덤화 57.4% 54.7% (52.6~75.4) −2.7%p
식별한 값 그대로 79.3% 74.4% (64.2~80.4) −4.9%p

3.3 읽은 것

3.4 관측을 바꾸는 길

랜덤화는 「모르는 것을 견디는」 방법입니다. 「모르는 것을 알아내는」 방법도 있습니다. 같은 프로젝트에서 따로 진행한 MuJoCo 시뮬레이터 실험은, 고전 계획기가 공 궤적만으로 회전을 맞출 때보다 「탑·백·무회전」의 회전 종류를 미리 알고 그 종류의 평균 회전을 사전 정보로 넣을 때 반환률이 조건에 따라 7~19%p 높았다고 보고합니다(예: 결정 시점이 타격 300 ms 전이고 회전이 데이터셋 그대로일 때 77% → 94%). 회전 종류는 상대의 자세나 타구음처럼 공이 날기 전의 신호로 알아낼 수 있습니다. D'Ambrosio 외 2024 도 강한 회전을 정확히 읽지 못하는 것을 한계로 적고, 상대들이 그 점을 파고들었다고 썼습니다(V 절 5항). 정책이 보는 것을 늘리는 것이 랜덤화를 넓히는 것보다 값싼 경우가 있습니다.

4. 한계

5. 정리

티티 한마디. 시뮬레이터만 믿으면 진짜 탁구대에서 공이 네트에 걸려요. 물리를 조금씩 흔들어 가며 연습하면 처음 보는 탁구대에서도 덜 당황해요!

참고

모든 자료는 2026-10-18 에 열람했습니다.

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

댓글

아직 댓글이 없습니다.

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