07. 영상 렌더링 — 결과를 블로그에 올리기

이번 단계 목표: 지금까지 만든 동작들을 영상(mp4)과 GIF로 깔끔하게 뽑아 블로그에 올릴 수 있게 합니다. 화면(뷰어) 없이 카메라로 저장하는 ‘헤드리스 렌더링’을 활용합니다.


뷰어로 보는 것과 영상으로 남기는 것은 다르다

개발할 땐 --vis로 실시간 창을 띄워 보는 게 편합니다. 하지만 블로그에 올리려면 파일이 필요하죠. Genesis는 카메라(Camera)로 장면을 찍어 이미지·영상으로 저장할 수 있습니다(00번에서 이미 스크린샷으로 써봤습니다). 이걸 헤드리스(headless) 렌더링이라 합니다 — 화면 없이도 파일이 나옵니다.

핵심 패턴은 세 줄입니다.

cam = scene.add_camera(res=(1280, 720), pos=(2.5, 1.8, 1.2), lookat=(0, 0, 0.6))
cam.start_recording()          # 녹화 시작
for ... :                      # 시뮬레이션 루프
    scene.step()
    cam.render()               # 매 프레임(또는 몇 step마다) 한 장씩 담기
cam.stop_recording(save_to_filename="outputs/result.mp4", fps=50)  # mp4로 저장

ffmpeg가 없어도 됩니다. mp4 저장에는 보통 ffmpeg가 필요한데, 00번에서 깐 imageio[ffmpeg] 덕분에 파이썬 안에 ffmpeg가 포함돼 별도 설치 없이 저장됩니다.

카메라가 로봇을 따라가게 하기. 걷는 로봇은 화면 밖으로 나가버립니다. 그래서 매 프레임 cam.set_pose(...)로 카메라를 로봇 위치 기준으로 옮겨 로봇을 졸졸 따라다니게 했습니다 (scripts/train/g1_eval.py 참고).


만든 영상들

단계 영상 내용
03 모션 outputs/03_g1_squat_wave.mp4 스쿼트 2회 + 손 흔들기
04 보행 도전 outputs/04_g1_walk_scripted.mp4 손으로 짠 보행(넘어짐)
06 RL 보행 outputs/06_g1_rl_walk.mp4 학습으로 걷는 G1

블로그 대문(hero)용 GIF도 만들었습니다. mp4를 가볍게 줄여 GIF로 바꾸는 도구:

python scripts/make_gif.py outputs/06_g1_rl_walk.mp4 outputs/06_g1_rl_walk.gif --scale 0.5 --fps 15

결과물

  • 단계별 클립 3개를 하나로 이은 쇼케이스 영상:

(제목 카드 → 모션 → 보행 실패 → RL 보행 순) – 블로그 대문용 GIF: outputs/06_g1_rl_walk.gif (걷는 G1)

산출물 크기 용도
06_g1_rl_walk.mp4 ~5 MB 학습된 보행 영상
06_g1_rl_walk.gif ~7 MB 시리즈 대문
00_showcase.mp4 ~2 MB 전체 요약 영상

GIF 용량 팁. GIF는 의외로 큽니다. make_gif.py에서 --scale(크기)과 --fps(초당 프레임), --max_seconds(길이)를 줄이면 용량이 확 작아집니다. 블로그 대문은 4~6초, 360p, 12~15fps면 충분합니다.


회고 — 막혔던 점 & 배운 것

  • 걷는 로봇은 화면 밖으로 나간다. 고정 카메라로 찍으니 G1이 5m를 걸어가며 프레임을 벗어났습니다. 매 프레임 cam.set_pose()로 카메라를 로봇 위치에 맞춰 옮겨 따라다니게 하니 해결됐습니다.
  • 카메라는 build() 전에 추가해야 한다. 학습 환경은 생성 시 이미 씬을 빌드해버려서, 평가 때 카메라를 나중에 붙이려다 “Scene is already built” 에러를 만났습니다. 환경에 “녹화 카메라” 옵션을 넣어 빌드 전에 카메라를 추가하도록 고쳤습니다.
  • 개발은 뷰어, 결과물은 헤드리스. 둘을 구분해 쓰니 편했습니다. 빠르게 확인할 땐 --vis로 창을 띄우고, 블로그용 최종 영상은 헤드리스 카메라로 안정적으로 뽑았습니다.

전체 회고 — 빈 폴더에서 걷는 휴머노이드까지

빈 폴더에서 시작해, 걷는 휴머노이드까지 왔습니다. 전체 여정을 한 장으로 돌아봅니다. ( 이 시점의 ‘걷는’에는 반전이 있습니다 — 10번에서 이 걸음의 실체가 드러나고 다시 고칩니다. 여기까지는 당시의 기록입니다.)

00 설치 검증  →  큐브 낙하 (Genesis 동작 확인)
01 개념 정리  →  Scene·Entity·step·URDF·DOF
02 로봇 로드  →  G1 불러오기, 가만 두면 쓰러짐
03 PD 제어   →  보이지 않는 스프링으로 3초간 기립 (흔들림 0.9cm)
04 모션 제어  →  스쿼트 + 손 흔들기 ('앞으로 vs 옆으로'의 교훈)
05 보행 도전  →  손으로 짠 보행, 2.2초 만에 꽈당 → 왜 어려운가
06 RL 학습   →  10분 학습으로 5m를 걷는 정책 (속도 0.49 m/s, 안 넘어짐)
07 영상      →  헤드리스 렌더링으로 블로그용 영상·GIF 완성

가장 크게 배운 것 세 가지

  1. 균형은 공짜가 아니다. 가만히 서 있는 것조차 끊임없는 제어의 결과입니다(02번). 자세 하나, 팔 동작 하나가 무게중심을 어떻게 움직이는지 몸으로 배웠습니다(03·04번).
  2. 손으로 짠 규칙엔 한계가 있다. 29개 관절이 얽힌 보행을 사람이 일일이 규칙화하는 건 너무 어렵습니다(05번). “현재 상태를 보고 고치는” 피드백이 없으면 균형은 무너집니다.
  3. 그래서 학습한다. 점수표(보상)만 주고 로봇이 수천 번 넘어져 보며 스스로 걷는 법을 찾게 하는 것 — 그게 더 강력했습니다(06번). 시뮬레이터가 빠른 덕분에 이게 실제로 가능해집니다.

다음 도전 과제(하고 싶은 것들) – 상체(팔·허리)까지 함께 쓰는 자연스러운 보행 – 방향 전환·다양한 속도 명령해냈습니다! 08. 방향 전환, 거친 지형 위 걷기 – 학습한 정책을 더 오래 돌려(3000+ iteration) 걸음 품질 끌어올리기 – 계단 오르기, 밀어도 안 넘어지기(외란 회복)해냈습니다! 09. 외란 회복

처음 Genesis를 켤 때만 해도 막막했는데, 작은 단계로 쪼개니 결국 걷는 휴머노이드까지 왔습니다. 이 기록이 같은 길을 걷는 분께 도움이 되길 바랍니다.


다음 단계

여기서 시리즈가 끝날 줄 알았는데, 도전 과제들이 하나씩 이어졌습니다 → 08. 방향 전환

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

댓글 남기기

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.