16. 빠른 보행 — 속도를 올리면 팔은 커질까

이번 단계 목표: 지금까지 최고 속도는 0.6m/s(느긋한 산책)였습니다. 전진 명령 상한을 1.2m/s로 올려 빠르게 걷게 하고, 14번에서 남긴 예측 — “빨리 걸으면 각운동량 상쇄 필요량이 늘어 팔 스윙이 커질 것” — 을 검증합니다.


구성: 명령 범위 한 줄

14번(arms, 18관절) 설정에서 바꾼 것은 명령 범위 한 줄입니다:

command_cfg["lin_vel_x_range"] = [0.0, 1.2]   # 0.6 → 1.2 m/s

08번의 교훈 그대로 — 빠른 속도를 명령 분포에 넣으면 정책이 빠르게 걷는 법을 배웁니다. 학습은 arms 정책에서 이어 학습(--resume_from)으로 시작해, ‘걷기’가 아니라 ‘빨리 걷기’만 추가로 배우게 했습니다(15번에서 익힌 기법).

cd scripts/train
python g1_train.py --task fast --max_iterations 3000 --resume_from logs/g1-arms/model_2999.pt
python g1_eval.py  --task fast --ckpt 5998 --record    # 1.0 m/s 직진 (이어 학습 번호)
python g1_gait_metrics.py -e g1-fast --ckpt 5998 --vx 1.0

결과

학습 후(보상 20.9 수렴, 에피소드 최대), 1.0m/s 명령으로 10초에 9.49m를 직진했습니다 (추종 오차 1%). 걸음이 어떻게 달라졌는지:

지표 0.4 m/s (14번) 1.0 m/s (16번) 해석
걸음 빈도 1.25 Hz 1.25 Hz 박자 유지 (위상 클록 그대로)
보폭 30cm 78.6cm 성큼성큼 — 속도를 보폭으로 낸다
양발 동시 접지 22% 11% 사람도 빨리 걸으면 줄어드는 값
무릎 가동범위 ~55° ~62° 더 크게 굽힘
발 들림 7~8cm 8.3~8.9cm 유지

그리고 14번의 예측이 적중했습니다. 같은 정책에게 두 속도를 시켜 팔을 재 보면:

전진 속도 어깨 스윙 진폭 왼어깨↔오른엉덩이 위상 상관
0.4 m/s ±2.6° +0.66
1.0 m/s ±5.9° +0.95

속도 2.5배에 팔 스윙 진폭 2.3배, 위상 결합은 +0.95로 거의 완벽해집니다. 다리가 만드는 각운동량이 커질수록 팔이 더 크게, 더 정확한 박자로 상쇄에 나서는 — 사람 보행 역학 그대로의 관계가, 여전히 “팔을 흔들어라”는 채점 없이 나왔습니다. 물리는 정직합니다.

1.0m/s로 성큼성큼 걷는 G1

전체 영상:


회고

  • 속도는 보폭에서 나온다. 박자(1.25Hz)가 클록으로 고정돼 있으니, 정책은 속도를 걸음 빈도가 아니라 보폭(30→79cm)으로 냈습니다. 사람은 속도에 따라 빈도도 올리므로, 다음 개선이 있다면 ‘속도에 따라 변하는 클록’입니다 — 고정 클록의 한계(문헌에서도 지적되는 지점)를 직접 확인한 셈입니다.
  • 가설 → 예측 → 검증의 한 사이클. 14번에서 “빠르면 팔이 커질 것”이라 예측을 남겼고, 16번에서 실험으로 확인했습니다. 채점표 튜닝의 연속처럼 보였던 이 시리즈가 결국 하나의 실험 과학 사이클로 완성되는 순간입니다.

다음: 17. 계단 오르기

이 시리즈의 전체 글 목록 → 시리즈 목차