Skip to main content
Summary

시연 데이터는 사람이 먼저 보여주는 답안이다

모방학습에서 로봇은 사람이 조작한 기록을 보고 행동을 배운다. 이때 기록되는 것은 단순한 영상이 아니다. 특정 시각에 로봇이 무엇을 보았는지, 관절은 어떤 상태였는지, 사람이 어떤 제어 명령을 보냈는지가 함께 저장된다. 좋은 시연 데이터는 "이 장면에서는 이렇게 움직인다"라는 답안을 시간 순서대로 남긴 것이다.

텔레오퍼레이션은 사람이 원격으로 로봇을 조작하는 과정이다. 카메라 화면을 보며 로봇 팔을 움직이고, 물체를 집고, 목표 위치에 놓는다. LeRobot의 실제 로봇 모방학습 흐름에서도 먼저 로봇과 텔레오퍼레이션 장치를 설정·보정한 뒤, 그 조작 궤적을 데이터셋으로 녹화한다.1

여기서 중요한 기준은 하나다. 나중에 정책이 학습할 수 있을 만큼 일관되고, 정확하고, 다시 재생 가능한 데이터를 남겨야 한다. 사람이 한 번 성공했다고 좋은 데이터가 되는 것은 아니다. 영상과 제어 로그가 같은 순간을 가리켜야 하고, 에피소드의 시작과 끝이 분명해야 하며, 실패한 기록과 성공한 기록이 섞일 때도 그 의도가 명확해야 한다.

텔레오퍼레이션으로 시연 데이터 수집하기AI 생성 이미지

어떤 방식으로 조작할 것인가

텔레오퍼레이션 방식은 태스크의 정밀도에 맞춰 고른다.

가장 직관적인 방식은 리더-팔로워 장치다. 사람이 리더 로봇 팔을 직접 움직이면 팔로워 로봇 팔이 이를 따라간다. 두 팔의 형태가 비슷할수록 조작감이 자연스럽다. 작은 물체를 집거나, 그리퍼 각도를 섬세하게 맞추거나, 장애물을 피해야 하는 작업에 적합하다. 대신 장치가 하나 더 필요하고, 리더와 팔로워 모두 보정이 잘 되어 있어야 한다.

키보드는 준비가 쉽다. 특정 키를 눌러 관절을 조금씩 움직이거나 그리퍼를 열고 닫는다. 단순한 이동, 초기 테스트, 포트와 카메라 확인에는 유용하다. 하지만 연속적이고 부드러운 궤적을 만들기 어렵다. 키 입력이 끊기면 행동도 계단처럼 변하기 쉽다. 정밀한 집기 데이터 수집에는 보통 한계가 있다.

게임패드나 조이스틱은 키보드보다 연속 제어에 가깝다. 스틱을 기울이는 정도로 속도나 방향을 조절할 수 있기 때문이다. 일부 LeRobot 기반 예제에서는 왼쪽 스틱과 오른쪽 스틱을 여러 관절에 매핑하고, 트리거를 그리퍼 제어에 쓰는 식으로 데이터를 수집한다.2 다만 공식 LeRobot 워크플로에서 사용하는 장치와 명령 옵션은 로봇별 튜토리얼을 우선 따라야 한다. 게임패드는 프로젝트별 구현 차이가 크므로, 기록되는 action이 어떤 의미인지 반드시 확인해야 한다.

처음에는 쉬운 방식보다 "좋은 시연을 반복해서 만들 수 있는 방식"을 선택하는 편이 낫다. 정책은 사람이 남긴 행동의 품질을 넘어서기 어렵다. 조작자가 매번 흔들리고, 같은 장면에서 다른 방식으로 움직이면 모델도 그 혼란을 배운다.

보정 파일과 robot id를 일관되게 사용하기

녹화 전에 반드시 확인할 것이 있다. 같은 로봇 설정에는 같은 robot id를 사용해야 한다. LeRobot에서는 로봇 id가 보정 파일을 저장하고 다시 찾는 기준으로 쓰인다. 같은 하드웨어 조합으로 텔레오퍼레이션, 녹화, 평가를 할 때는 같은 id를 유지해야 한다.1

예를 들어 팔로워 로봇을 so100_follower_lab이라는 id로 보정했다면, 텔레오퍼레이션과 녹화에서도 같은 id를 써야 한다. 리더 장치도 별도의 teleop.id를 일관되게 지정한다. id를 바꾸면 LeRobot은 다른 장치로 인식할 수 있고, 보정이 누락되었거나 잘못된 보정값을 사용하는 상황이 생긴다.

기본적인 텔레오퍼레이션 명령은 다음과 같은 형태다.

lerobot-teleoperate \
  --robot.type=... \
  --robot.port=... \
  --robot.id=... \
  --teleop.type=... \
  --teleop.port=... \
  --teleop.id=...

카메라 화면을 보면서 조작하려면 로봇 카메라 설정을 추가하고 --display_data=true를 켠다.

lerobot-teleoperate \
  --robot.type=... \
  --robot.port=... \
  --robot.id=... \
  --teleop.type=... \
  --teleop.port=... \
  --teleop.id=... \
  --robot.cameras='...' \
  --display_data=true

이 단계에서는 데이터를 많이 모으려 하지 말고, 조작 안정성을 먼저 본다. 관절 방향이 예상과 같은지, 그리퍼가 반대로 움직이지 않는지, 카메라 이름과 화면 방향이 맞는지 확인한다. 카메라가 여러 대라면 front, wrist, top처럼 이름을 정하고 이후 녹화와 학습 설정에서도 그대로 사용한다.

녹화 전에 에피소드 규칙을 정한다

데이터 수집의 단위는 에피소드다. 하나의 에피소드는 보통 "초기 상태에서 시작해 태스크가 끝날 때까지"의 기록이다. 예를 들어 "큐브를 집어 상자에 넣기"라면 에피소드 시작은 로봇이 대기 자세에 있고 큐브가 정해진 범위 안에 놓인 순간이다. 종료는 큐브가 상자 안에 들어가고 그리퍼가 놓은 뒤, 로봇이 더 이상 의미 있는 행동을 하지 않는 순간이다.

녹화 전에 세 가지를 문장으로 정해 두자.

  • 시작 조건: 로봇 자세, 물체 위치, 그리퍼 상태, 카메라 시야

  • 성공 기준: 물체가 어디에 있어야 성공인지, 얼마나 안정적으로 놓여야 하는지

  • 실패 처리: 놓침, 충돌, 물체가 시야 밖으로 나감, 중간 정지 등을 저장할지 버릴지

이 규칙이 없으면 데이터 라벨이 흐려진다. 어떤 에피소드는 물체를 집기 전부터 시작하고, 어떤 에피소드는 이미 그리퍼가 물체에 닿은 상태에서 시작한다. 어떤 기록은 성공 직후 끝나지만, 어떤 기록은 성공 후 20초 동안 의미 없는 움직임이 이어진다. 이런 데이터는 timestamps, state, action, 영상이 모두 있어도 학습 신호가 약해진다.

LeRobot의 녹화 명령은 일반적으로 lerobot-record를 사용한다. 예시는 다음과 같다.

lerobot-record \
  --robot.type=... \
  --robot.port=... \
  --robot.id=... \
  --teleop.type=... \
  --teleop.port=... \
  --teleop.id=... \
  --display_data=true \
  --dataset.repo_id=사용자명/데이터셋이름 \
  --dataset.num_episodes=50 \
  --dataset.single_task="pick the cube and place it in the bin"

공식 워크플로에서는 기본 녹화 파라미터로 에피소드 시간, 리셋 시간, 에피소드 수를 지정할 수 있고, 녹화 중 키보드로 현재 에피소드를 빨리 끝내거나, 취소하고 다시 녹화하거나, 전체 세션을 중단할 수 있다.1 잘못 조작한 에피소드를 억지로 남기지 말고 즉시 취소하는 습관이 중요하다.

LeRobotDataset v3에서 실제로 저장되는 것

녹화가 끝나면 데이터는 LeRobotDataset 형식으로 저장된다. v3 형식에서는 저차원 고주파 데이터가 Apache Parquet shard에 저장된다. 여기에는 로봇 상태를 나타내는 state, 사람이 보낸 제어 명령인 action, 시간 정렬에 필요한 timestamps 같은 정보가 들어간다. 카메라 프레임은 MP4로 인코딩되며, 카메라별로 나뉘어 저장된다.3

주의할 점은 "파일 하나가 에피소드 하나"라고 생각하면 안 된다는 것이다. v3에서는 여러 에피소드가 하나의 Parquet shard나 비디오 shard에 함께 들어갈 수 있다. 에피소드의 경계는 파일 이름이 아니라 meta/ 아래의 메타데이터로 복원된다. 특히 에피소드별 길이, 태스크, 오프셋 정보가 영상 프레임과 상태·행동 행을 맞추는 기준이 된다.3

따라서 수집 중에는 다음을 함께 관리해야 한다.

  • 카메라 fps가 설정값대로 유지되는가

  • 영상 시간과 로봇 제어 로그가 밀리지 않는가

  • 특정 관절의 state가 멈춰 있거나 튀지 않는가

  • action이 기록되지 않는 구간이 없는가

  • 에피소드 종료 직전과 다음 에피소드 시작이 섞이지 않는가

특히 카메라 기반 정책을 학습할 예정이라면 영상 품질이 곧 관찰값 품질이다. 물체가 손이나 로봇 팔에 가려지는 시간이 너무 길면 모델은 중요한 판단 근거를 잃는다. 좋은 기준은 단순하다. 사람도 카메라 이미지만 보고 그 태스크를 수행할 수 있어야 한다.1

반복 수집은 다양해야 한다

한 위치에서만 물체를 집는 데이터 50개보다, 여러 위치에서 일관되게 성공하는 데이터 50개가 더 낫다. 공식 가이드에서도 물체를 여러 위치에 두고 집어 상자에 넣는 태스크를 시작점으로 제안하며, 최소 50개 정도의 에피소드와 위치별 반복 수집을 권장한다.1

다만 다양성은 한 번에 모두 늘리면 안 된다. 처음부터 물체 종류, 조명, 배경, 카메라 각도, 시작 자세를 모두 바꾸면 실패 원인을 알기 어렵다. 순서는 보통 다음이 좋다.

  1. 카메라와 로봇 위치는 고정한다.

  2. 물체 위치만 조금씩 바꾼다.

  3. 집는 방식은 최대한 일정하게 유지한다.

  4. 성공률이 안정되면 조명, 배경, 물체 방향을 천천히 바꾼다.

  5. 평가 환경에서 필요한 변화만 추가한다.

성공 시연만 모을지, 실패와 복구 행동을 포함할지도 결정해야 한다. 초기 모방학습에서는 성공 시연 중심이 단순하고 효과적이다. 모델이 배워야 할 목표 행동이 선명하기 때문이다. 그러나 실제 배포 환경에서 물체를 살짝 밀거나, 첫 집기에 실패한 뒤 다시 잡아야 한다면 복구 행동도 가치가 있다. 이때 실패를 아무렇게나 섞으면 안 된다. "실패 후 회복해서 성공한 에피소드"인지, "실패로 끝난 에피소드"인지 구분해야 한다.

수집 직후 바로 검수한다

데이터 검수는 학습이 실패한 뒤 하는 일이 아니다. 수집 직후 해야 한다. 아직 로봇과 물체가 그대로 있고, 조작자가 어떤 장면에서 실수했는지 기억하고 있을 때 나쁜 에피소드를 삭제하거나 다시 녹화해야 한다.

LeRobot Dataset Visualizer는 수집한 데이터셋의 에피소드 영상을 센서·제어 시계열 그래프와 함께 확인하는 데 사용할 수 있다. 에피소드별 영상, 메타데이터, fps, 녹화 시간, 에피소드 길이 분포를 살펴보고, 움직임이 거의 없거나 지나치게 흔들리는 기록, 길이가 이상한 기록을 찾는 데 도움이 된다.4

검수할 때는 다음 질문을 반복한다.

  • 영상과 로봇 상태 그래프가 같은 행동을 가리키는가

  • 물체가 주요 순간에 카메라 안에 보이는가

  • 관절값이 갑자기 비정상적으로 튀는 구간이 있는가

  • action이 0에 가까운 시간이 과도하게 긴가

  • 성공 전에 에피소드가 끊겼거나, 성공 후 너무 오래 이어지지 않았는가

  • 특정 위치나 조명에서만 실패가 몰려 있지 않은가

이상한 에피소드는 과감하게 제거한다. 데이터가 많아지는 것보다 나쁜 데이터가 줄어드는 것이 더 중요할 때가 많다. 특히 처음 50~100개 에피소드에서는 양보다 품질이 우선이다. 깨끗한 데이터셋 하나가 있어야 이후 정책 학습, 평가, 튜닝의 결과를 믿을 수 있다.

좋은 시연 데이터의 기준

텔레오퍼레이션 수집의 목표는 로봇을 많이 움직이는 것이 아니다. 학습 가능한 행동 예시를 남기는 것이다. 같은 id와 보정 파일을 사용하고, 시작과 종료 조건을 통일하고, 카메라와 로그의 시간 정렬을 확인하고, 태스크에 필요한 만큼만 변화를 추가해야 한다.

좋은 데이터셋은 나중에 열어 보아도 설명이 된다. 각 에피소드가 무엇을 하려는지 분명하고, 성공과 실패의 기준이 흔들리지 않으며, 영상과 state, action, timestamps가 같은 행동 구간을 가리킨다. 이런 데이터가 있어야 다음 장에서 다룰 정제와 시각화가 의미를 갖고, 그 다음 단계의 정책 학습도 안정적으로 시작할 수 있다.

참고

1Imitation Learning on Real-World Robots · Hugging Face

2lerobot-sim-teleop-data-collection · GitHub

3LeRobotDataset v3.0 · Hugging Face

4LeRobot Dataset Visualizer · GitHub

책 목록

LeRobot 실전 가이드: 데이터 수집부터 로봇 배포까지

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기