Dataset Replay
데이터 기록에서 기록한 데이터가 정말 로봇을 움직일 수 있는 형태로 저장되었는지 확인하는 가장 직접적인 방법은 그 행동을 로봇에 다시 보내 보는 것입니다. 리더 암 없이 데이터셋의 행동만으로 로봇이 시범과 같은 동작을 재현하면, 기록도 로봇도 정상입니다. 학습에 들어가기 전의 점검 단계입니다.
학습 목표
- 재생이 데이터셋의 어떤 값을 어떻게 로봇에 보내는지 설명할 수 있다.
- 안전 절차를 지키며 에피소드를 재생하고 기록 상태를 판단할 수 있다.
1. 재생의 원리
재생은 데이터셋에 저장된 action 을 기록 당시와 같은 30 FPS로 순서대로 로봇에 보내는 것입니다. 관측은 쓰지 않고 카메라도 보지 않습니다. 눈을 감고 외운 동작을 그대로 반복하는 것과 같습니다.
그래서 재생은 두 가지를 확인해 줍니다. 데이터셋에 행동이 빠짐없이 저장되었는지, 그리고 로봇이 그 궤적을 물리적으로 따라갈 수 있는지입니다.
1.1. 안전
재생은 기록 당시의 절대 관절 각도와 바퀴 속도를 그대로 보냅니다. 주변 환경이 기록 때와 다르면 로봇은 그것을 모른 채 움직여 충돌합니다.
- 로봇 주변을 비우고, 기록 때와 비슷한 위치에서 시작합니다.
- 시작 시 팔이 첫 프레임 자세로 튀지 않도록 스크립트가 준비 시간 동안 현재 자세에서 천천히 이동합니다. 이 구간에서 바퀴는 멈춰 있습니다.
- 이어서 카운트다운 동안 재생을 기다립니다. 로봇에서 손을 뗄 여유입니다.
- 데이터셋에 팔 관절 값이 하나라도 빠져 있으면 스크립트는 움직이지 않고 멈춥니다. 빠진 관절을 0도로 보내는 것은 위험하기 때문입니다.
2. [Pi] 호스트 실행
데이터 기록과 같은 방법으로 호스트를 띄웁니다.
./start_lekiwi_host.sh lekiwi073. [PC] 에피소드 재생
3.1. 명령
리더 암은 연결하지 않아도 됩니다. 데이터 기록과 같은 환경 변수를 쓰고 첫 번째 에피소드를 재생합니다.
conda activate lerobot060
cd ~/workspace/lekiwi
export HF_USER="HueyWoo"
export TASK_NAME="lekiwi_pick_and_place"python lekiwi-replay.py \
--robot.remote_ip=192.168.0.207 \
--robot.id=lekiwi07 \
--dataset.repo_id=${HF_USER}/${TASK_NAME} \
--dataset.episode=0윈도우에서는 다음과 같이 실행합니다.
conda activate lerobot060
cd %USERPROFILE%\workspace\lekiwi
set "HF_USER=HueyWoo"
set "TASK_NAME=lekiwi_pick_and_place"python lekiwi-replay.py ^
--robot.remote_ip=192.168.0.207 ^
--robot.id=lekiwi07 ^
--dataset.repo_id=%HF_USER%/%TASK_NAME% ^
--dataset.episode=0| 인자 | 의미 |
|---|---|
--dataset.repo_id | 데이터 기록에서 기록한 데이터셋 이름 |
--dataset.episode | 재생할 에피소드 번호. 0부터 시작 |
--warmup_s | 첫 프레임 자세까지 이동하는 준비 시간. 기본 2초 |
--countdown_s | 준비 후 재생 시작까지 대기. 기본 2초 |
--dataset.fps | 재생 주기. 생략하면 데이터셋에 기록된 값을 씁니다. 바꾸지 않는 것을 권합니다 |
ESC 또는 Ctrl + C 로 즉시 중단할 수 있습니다.
3.2. 무엇을 볼 것인가
재생되는 동안 로봇을 관찰하며 다음을 확인합니다.
- 팔이 시범 데이터와 같은 궤적을 그리는가. 다르게 움직이면 캘리브레이션 값이 기록 이후 바뀌었거나 데이터가 손상된 것입니다.
- 바퀴가 시범 데이터와 같은 방향으로 움직이는가. 바퀴 속도가 빠져 있으면 스크립트가 경고를 남기고 바퀴를 멈춘 채 팔만 재생합니다.
- 동작이 끊기거나 튀는가. 기록 중 프레임이 빠졌을 때 나타납니다. 그 에피소드는 데이터셋 편집에서 삭제합니다.
에피소드 몇 개를 골라 재생해 보고 문제가 없으면 데이터셋은 학습에 쓸 수 있는 상태입니다. 전체를 하나씩 보기에는 재생이 느리므로, 나머지는 다음 페이지의 시각화 도구로 빠르게 훑습니다.
4. 문제 해결
| 증상 | 확인할 것 |
|---|---|
| 데이터셋을 찾지 못함 | ls ~/ 로 이름 확인 |
| 팔 관절이 빠져 있다며 멈춤 | 데이터셋이 손상됨. 데이터 기록에서 해당 에피소드 재기록 |
| 바퀴가 안 움직이고 경고만 남음 | 기록 때 바퀴 속도가 저장되지 않음. 호스트 설정 확인 후 재기록 |
| 시작하자마자 팔이 튐 | --warmup_s 를 늘림. 기록 때와 너무 다른 자세에서 시작하지 않기 |
| 연결 timeout | 호스트 실행 여부, IP, 같은 와이파이. 제어 스크립트 문제 해결 참고 |
5. 정리
- 재생은 데이터셋의
action을 기록 주기로 그대로 로봇에 보내는 것이며 리더 암이 필요 없습니다. - 절대 각도를 재현하므로 주변을 비우고, 준비 시간과 카운트다운 동안 손을 뗍니다.
- 팔과 바퀴가 시범대로 움직이면 기록이 온전한 것입니다. 튀거나 끊기는 에피소드는 데이터셋 편집에서 정리합니다.
다음 페이지 데이터 시각화에서는 로봇을 움직이지 않고 화면에서 데이터셋을 확인하는 방법을 다룹니다.