
LeRobot — 학습된 정책을 실기에서 구동하기 (평가)
요약
본 기사는 LeRobot 프레임워크를 사용하여 학습된 정책을 실제 로봇 하드웨어(SO-101)에 구동하고 평가하는 방법을 다룹니다. 자율 추론 모드를 통해 정책의 성능을 확인하며, 성공적인 평가를 위해 데이터셋 녹화 및 실행 시 주의해야 할 여러 기술적 사항들을 안내합니다.
핵심 포인트
- 자율 추론 시 `lerobot-record`에 `--policy.path` 전달
- 평가 에피소드는 트레이닝과 동일한 카메라/해상도 지정 필수
- 평가 데이터셋은 트레이닝 데이터와 다른 ID 사용 권장
- 정책의 성공률 향상을 위해 실패 모드별 수정 순서 참고

시리즈: LeRobot 튜토리얼 — 제 5회 / 총 5회
지난 회차: 정책 트레이닝 (제 4회)
서론
제 4회에서 outputs/train/<run>/checkpoints/last/pretrained_model/라는 체크포인트가 생성되었습니다. 본 기사에서는 이 체크포인트를 실제 SO-101 로 구동하여 정책이 실제로 태스크를 수행할 수 있는지 확인합니다.
구체적으로는, lerobot-record에 --policy.path=...를 전달하여 텔레오프(teleop)가 없는 자율 추론 모드로 구동하고, 평가용 에피소드를 별도의 데이터셋으로 녹화합니다. 이렇게 녹화된 에피소드는 나중에 재생할 수 있기 때문에,
pretrained_model/ 폴더를 가리킵니다. - 녹화할 때와 완전히 같은 이름(--robot.cameras front, wrist)과 해상도, FPS로 지정해야 합니다. 이 부분이 다르면 정책이 기대하는 관측값의 차원과 맞지 않아 추론 과정에서 오류가 발생합니다. - 트레이닝 데이터를 녹화했을 때와 동일한 ID를 사용합니다. 캘리브레이션 파일(모터 오프셋)은 이 ID로 로드됩니다. --robot.id=my_follower_arm - 원본 녹화 데이터와는 다른 이름(--dataset.repo_id, 예: 끝에 _eval 추가)을 사용합니다. 같은 이름을 쓰면 평가 에피소드가 트레이닝용 데이터셋에 섞이게 됩니다. - 평가에서는 많아도 10~20개 정도면 충분합니다. 50개를 할 필요는 없습니다. --dataset.num_episodes=10 - 정책이 막혔을 때의 여유 시간을 조금 길게 설정합니다. 너무 짧으면 태스크 완수 도중에 중단될 수 있습니다. --dataset.episode_time_s=15
4. 추론 실행하기
chmod +x scripts/eval.sh
./scripts/eval.sh 2>&1 | tee outputs/eval/last_eval.log
실행 직후, 먼저 정책 로드 로그가 출력된 후 Recording episode 0이 나타나며 자율 실행이 시작됩니다.

이때, 팔에서 손을 떼고 작업 공간 밖으로 나갑니다. 정책이 follower를 직접 움직이기 시작합니다.
--display_data=true를 붙였기 때문에 Rerun 창에는 트레이닝 때와 마찬가지로 카메라 영상과 액션이 실시간으로 표시됩니다. 이는 정책이 무엇을 보고 있는지 확인하는 데 매우 유용합니다.
)"에 "에피소드 0: 성공 / 에피소드 1: 把持失敗 / …"와 같이 기록해 두면, 다음에 무엇을 수정해야 할지 판단하는 근거가 됩니다. 여러 RUN_NAME을 비교할 때도 유효합니다.
push 하고 싶다면 record
때와 같습니다.
huggingface-cli login # 최초 1회만
huggingface-cli upload \
"${HF_USER}/so101_pick_place_eval"
...
7. 성공률을 높이는 방법
무엇을 수정해야 하는지는 실패 모드에 따라 다릅니다. 하지만, 시도해 볼 순서는 대략 정해져 있습니다. 저렴한 것부터 순서대로 나열합니다.
카메라 시야각 고정(固定)— 삼각대에 고정하고, 자동 초점 및 자동 노출을 OFF로 하며, 매번 같은 위치로 돌아가도록 철저히 합니다. 녹화할 때와 평가할 때 front
카메라가 몇 cm만 어긋나도, ACT의 정밀도는 급격히 떨어집니다. -
초기 자세 및 물체 배치 편차 감소— 평가할 때마다 큐브의 초기 위치를 녹화할 때와 같은 범위 내에 놓습니다. 반대로, 학습 데이터에 초기 위치의 변형이 부족하다면, 추가로 녹화해야 합니다. -
데모 일관성— 녹화할 때의 속도, 파지 각도, 접근 궤적이 들쭉날쭉하면, 정책은 그 어떤 것도 완벽하게 기억하지 못합니다. 다시 녹화한다면 "같은 흐름"으로 맞추는 것이 효과적입니다. -
에피소드 수 늘리기— 50 에피소드에서 멈춰 있다면, 우선 100~150을 목표로 합니다. ACT는 수십 에피소드 만에 움직이기 시작하지만, 로버스트네스는 추가 데이터로 명확하게 올라갑니다. -
학습 시간 늘리기 / 다른 체크포인트 사용—--steps
을 100k → 200k으로 올리거나, 중간 체크포인트 중에서 loss와 동작의 균형이 좋은 것을 선택합니다. -
정책 전환하기— 여기까지 모두 시도해 보고 한계가 느껴진다면, Diffusion Policy나 SmolVLA를 시도해 봅니다. 하지만 데이터셋의 질을 방치한 채로 넘어가도 개선되지 않는 경우가 많습니다.
막히는 지점(つまずきポイント)
요약
평가는 lerobot-record
의 --policy.path=
모드로 실행합니다. leader는 제외하고, 카메라와 --robot.id
는 학습할 때와 완전히 동일하게 합니다. -
평가 에피소드는 다른 데이터셋(예: *_eval)
으로 저장하고, lerobot-dataset-viz
로 하나씩 재생하며 실패 모드를 분석합니다. -
성공률을 높이는 순서는, "카메라 고정 → 초기 자세 → 데모 일관성 → 에피소드 수 → 학습 시간 → 정책 전환"이 기준입니다.
자율 추론 시에는 사람이 leader를 가지고 있지 않습니다. 작업 공간을 비우고, E-stop을 손에 둔 채로, 처음에는 1 에피소드씩 시도해 보세요.
시리즈 마무리
이것으로 "환경 구축 → 캘리브레이션/텔레오프 → 데이터셋 녹화 → 정책 학습 → 평가"까지의 5회 시리즈는 일단락되었습니다. 수고하셨습니다.
다음 단계로는,
다른 태스크(예: 쌓기, 정렬, 천 조작)로 같은 파이프라인을 돌려보기
- Diffusion Policy / Pi0 / SmolVLA를 시도하여 ACT와의 동작 차이를 체감해 보기
- 양팔 구성으로 하여 양손 협조 태스크에 도전하기
등이 흥미로운 방향입니다. 막히는 부분이 있을 때는 제 0회 — 시작 전 요약에서 용어와 Tips을 모아 두었으니, 적절하게 돌아와 주세요.
참고 링크
- LeRobot 리포지토리
LeRobot scripts 디렉터리 —
lerobot_record.py
("--policy.path"
의 구현) - ACT(Action-Chunking Transformer) 논문
- LeRobot 정책 목록
Rerun 뷰어 —
--display_data=true
로 열 수 있습니다.
토론

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기