LeRobot documentation
요약
요약
LeRobot 명령어를 한곳에 모았습니다. 특정 명령어의 사용법을 잊었거나 새로운 명령어를 배우고 싶다면 여기서 확인하세요.
아래에 나열된 모든 명령어에서 포트/이름/ID를 본인의 값으로 변경해야 한다는 점을 기억하세요!
특정 환경에 맞게 모든 명령어를 확인하고 설정하는 또 다른 좋은 방법은 이 Jupyter Notebook을 사용하는 것입니다.
설정 및 설치
설치 방법은 LeRobot Installation을 참고하세요.
유용한 도구
포트 찾기
로봇이 연결된 시리얼 포트를 식별하는 데 이 명령을 사용합니다. 터미널의 지시를 따르세요. USB 케이블을 분리하고 Enter 키를 누르도록 요청됩니다. 그러면 스크립트가 해당 로봇에 대한 올바른 시리얼 포트를 감지하여 출력합니다.
lerobot-find-port
카메라 찾기
카메라 인덱스를 빠르게 찾고 출력을 확인합니다. 이 명령은 카메라 정보를 터미널에 출력하고 각 감지된 카메라의 테스트 프레임을 outputs/captured_images에 저장합니다.
lerobot-find-cameras
교정
대부분의 경우 각 로봇 및 텔레오퍼레이션 장치별로 보정을 한 번만 수행하면 됩니다. 보정을 수행하기 전에 모든 관절이 대략 중간 위치에 있는지 확인하세요.
lerobot-calibrate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm교정 시 사용한 것과 동일한 ID를 나중에 다른 스크립트에서도 사용하도록 하십시오. LeRobot은 이 방식으로 교정 파일을 찾습니다.
원격 조작
두 개의 카메라로 텔레오퍼레이션을 수행하고 Rerun으로 데이터를 표시합니다.
lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_leader_arm \
--display_data=true데이터셋 기록
데이터셋은 repo_id 아래에 Hugging Face Hub로 자동으로 업로드됩니다. CLI를 통해 HF 계정에 로그인되어 있는지 확인하세요(https://huggingface.co/settings/tokens에서 토큰을 발급받을 수 있습니다). 또한 아래 명령에서 사용될 사용자 이름을 HF_USER에 저장하세요:
lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_leader_arm \
--dataset.repo_id=${HF_USER}/so101_dataset_test \
--dataset.num_episodes=30 \
--dataset.single_task="put the red brick in a bowl" \
--dataset.streaming_encoding=true \
--display_data=true데이터셋을 수집하는 동안 키보드로 프로세스를 제어할 수 있습니다:
- 오른쪽 화살표 (
→) 또는n를 누르면 에피소드를 저장하고 다음으로 이동합니다. - 왼쪽 화살표 (
←) 또는r를 누르면: 현재 에피소드를 삭제하고 다시 시도합니다. - Escape (
ESC) 또는q를 누르면: 중지, 비디오 인코딩, 업로드를 수행합니다.
lerobot-record는 세션의 날짜와 시간을--dataset.repo_id의 끝에 추가하므로,${HF_USER}/so101_dataset_test는${HF_USER}/so101_dataset_test_YYYYMMDD_HHMMSS로 저장됩니다. 전체 이름은 Hugging Face 프로필에서 또는ls ~/.cache/huggingface/lerobot/${HF_USER}명령어로 확인하고, 아래 학습 명령어에 사용하세요. 정확한 이름을 유지하려면--dataset.no_stamp=true를 추가하세요.
기록 깊이
Intel RealSense 카메라(type: intelrealsense)는 use_depth: true를 설정하면 깊이 스트림을 기록합니다. 깊이는 12비트 코드로 양자화되어 별도의 비디오로 저장됩니다.
lerobot-record \
... \
--robot.cameras="{ head: {type: intelrealsense, serial_number_or_name: \"0123456789\", width: 640, height: 480, fps: 30, use_depth: true} }" \
--dataset.repo_id=${HF_USER}/so101_depth_test \
--dataset.single_task="put the red brick in a bowl" \
--dataset.depth_encoder.depth_min=0.01 \
--dataset.depth_encoder.depth_max=10.0 \
--dataset.depth_encoder.shift=0.0 \
--dataset.depth_encoder.use_log=true비디오 인코딩 매개변수
RGB 스트림과 depth 스트림은 --dataset.rgb_encoder.* 및 --dataset.depth_encoder.* 키를 통해 독립적으로 인코딩됩니다.
lerobot-record \
... \
--dataset.rgb_encoder.vcodec=h264 \
--dataset.rgb_encoder.pix_fmt=yuv420p \
--dataset.rgb_encoder.crf=23 \
--dataset.depth_encoder.vcodec=hevc \
--dataset.depth_encoder.extra_options='{"x265-params": "lossless=1"}'학습
하드웨어에 따라 정책 학습에 몇 시간이 걸릴 수 있습니다. 간단한 ACT 정책을 학습하는 방법은 다음과 같습니다:
lerobot-train \
--dataset.repo_id=${HF_USER}/so101_dataset_test_YYYYMMDD_HHMMSS \
--policy.type=act \
--output_dir=outputs/train/act_so101_test \
--job_name=act_so101_test \
--policy.device=cuda \
--trackio.enable=true \
--policy.repo_id=${HF_USER}/policy_test \
--steps=20000- 일반적인 정책 유형:
act,diffusion,multi_task_dit,smolvla,pi0,pi05,pi0_fast,groot,xvla. 각 정책은 사이드바의 Policies 아래에 전용 페이지를 가지며, Compute & Hardware Guide에서는 어떤 정책이 사용자의 GPU에 적합한지 보여 줍니다. - 디바이스:
cuda(NVIDIA),mps(Apple Silicon),cpu
--policy.type는 해당 유형의 새 정책을 생성하고 데이터셋에서 처음부터 학습합니다(일부 정책은 설정에 따라 사전 학습된 비전 또는 언어 백본에서 시작합니다). 기존 모델을 미세 조정하려면 로컬 체크포인트나 Hub 저장소 ID를 --policy.path로 전달하세요. 정책 유형과 설정은 해당 경로에서 읽히므로 --policy.type는 필요하지 않습니다.
lerobot-train \
--dataset.repo_id=${HF_USER}/so101_dataset_test_YYYYMMDD_HHMMSS \
--policy.path=username/the_policy_to_finetune \
--policy.device=cuda \
--policy.repo_id=${HF_USER}/policy_finetuned_test \
--output_dir=outputs/train/finetuned_so101_test \
--steps=20000로컬 GPU가 없나요? --job.target=<flavor>(예: a10g-small)을 두 명령어 중 하나에 추가하면 lerobot-train가 대신 Hugging Face Jobs에서 실행됩니다. 이 경우 로컬 전용 데이터셋을 업로드하고 학습된 모델을 푸시합니다. hf jobs hardware로 flavor 목록을 확인하세요. 작업의 메트릭을 추적하려면 --trackio.enable=true --trackio.space_id=<user>/<space>를 추가하세요. 포드의 로컬 Trackio 데이터베이스는 작업이 종료되면 유지되지 않습니다.
재개를 시작하려면 --config_path를 체크포인트로 지정하고 --resume=true를 추가하세요. 로컬 경로 또는 Hub 저장소 ID(최신 체크포인트가 가져와짐)를 지원하며, --job.target=<flavor>를 추가하여 로컬 또는 잡에서 작동합니다:
lerobot-train --config_path=${HF_USER}/policy_test --resume=true --job.target=a10g-small추론
Inference는 학습된 policy/model을 로봇에서 실행하는 것을 의미합니다. 이를 위해 lerobot-rollout를 사용합니다. policy의 경로를 제공해야 합니다. 로컬 경로 또는 Hugging Face repo id를 사용할 수 있으며, 예를 들어 위의 학습 명령에서 사용한 ${HF_USER}/policy_test와 같습니다. 데이터셋을 수집할 때와 동일한 포트, --robot.id, 카메라 구성 및 작업 설명을 사용해야 합니다. --duration은 초 단위로 지정되며, 지정하지 않으면 policy가 중지될 때까지 실행됩니다.
v0.5.x 이전 버전에서는
lerobot-rollout이 존재하지 않으므로 대신lerobot-record를 사용해야 합니다. 자세한 내용은 여기를 참조하세요.
lerobot-rollout \
--strategy.type=base \
--policy.path=${HF_USER}/policy_test \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower_arm \
--robot.cameras="{ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
--task="put the red brick in a bowl" \
--duration=60