# 요약

LeRobot 명령어를 한곳에 모았습니다. 특정 명령어의 사용법을 잊었거나 새로운 명령어를 배우고 싶다면 여기서 확인하세요.

> [!WARNING]
> 아래에 나열된 모든 명령어에서 포트/이름/ID를 본인의 값으로 변경해야 한다는 점을 기억하세요!

> [!TIP]
> 특정 환경에 맞게 모든 명령어를 확인하고 설정하는 또 다른 좋은 방법은 이 [Jupyter Notebook](https://github.com/huggingface/lerobot/blob/main/examples/notebooks/quickstart.ipynb)을 사용하는 것입니다.

### 설정 및 설치

설치 방법은 [LeRobot Installation](./installation)을 참고하세요.

### 유용한 도구

###### 포트 찾기

로봇이 연결된 시리얼 포트를 식별하는 데 이 명령을 사용합니다. 터미널의 지시를 따르세요. USB 케이블을 분리하고 Enter 키를 누르도록 요청됩니다. 그러면 스크립트가 해당 로봇에 대한 올바른 시리얼 포트를 감지하여 출력합니다.

```bash
lerobot-find-port
```

###### 카메라 찾기

카메라 인덱스를 빠르게 찾고 출력을 확인합니다. 이 명령은 카메라 정보를 터미널에 출력하고 각 감지된 카메라의 테스트 프레임을 `outputs/captured_images`에 저장합니다.

```bash
lerobot-find-cameras
```

### 교정

대부분의 경우 각 로봇 및 텔레오퍼레이션 장치별로 보정을 한 번만 수행하면 됩니다. 보정을 수행하기 전에 모든 관절이 대략 중간 위치에 있는지 확인하세요.

```bash
lerobot-calibrate \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_follower_arm
```

교정 시 사용한 것과 동일한 ID를 나중에 다른 스크립트에서도 사용하도록 하십시오. LeRobot은 이 방식으로 교정 파일을 찾습니다.

### 원격 조작

두 개의 카메라로 텔레오퍼레이션을 수행하고 Rerun으로 데이터를 표시합니다.

```bash
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](https://huggingface.co/settings/tokens)에서 토큰을 발급받을 수 있습니다). 또한 아래 명령에서 사용될 사용자 이름을 `HF_USER`에 저장하세요:

```bash
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`**를 누르면: 중지, 비디오 인코딩, 업로드를 수행합니다.

> [!WARNING]
> `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비트 코드로 양자화되어 별도의 비디오로 저장됩니다.

```bash
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.*` 키를 통해 독립적으로 인코딩됩니다.

```bash
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` 정책을 학습하는 방법은 다음과 같습니다:

```bash
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](./hardware_guide)에서는 어떤 정책이 사용자의 GPU에 적합한지 보여 줍니다.
- 디바이스: `cuda` (NVIDIA), `mps` (Apple Silicon), `cpu`

`--policy.type`는 해당 유형의 새 정책을 생성하고 데이터셋에서 처음부터 학습합니다(일부 정책은 설정에 따라 사전 학습된 비전 또는 언어 백본에서 시작합니다). 기존 모델을 미세 조정하려면 로컬 체크포인트나 Hub 저장소 ID를 `--policy.path`로 전달하세요. 정책 유형과 설정은 해당 경로에서 읽히므로 `--policy.type`는 필요하지 않습니다.

```bash
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](https://huggingface.co/docs/hub/jobs)에서 실행됩니다. 이 경우 로컬 전용 데이터셋을 업로드하고 학습된 모델을 푸시합니다. `hf jobs hardware`로 flavor 목록을 확인하세요. 작업의 메트릭을 추적하려면 `--trackio.enable=true --trackio.space_id=<user>/<space>`를 추가하세요. 팟의 로컬 Trackio 데이터베이스는 작업이 종료되면 유지되지 않습니다.

재개를 시작하려면 `--config_path`를 체크포인트로 지정하고 `--resume=true`를 추가하세요. 로컬 경로 또는 Hub 저장소 ID(최신 체크포인트가 가져와짐)를 지원하며, `--job.target=<flavor>`를 추가하여 로컬 또는 잡에서 작동합니다:

```bash
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가 중지될 때까지 실행됩니다.

> [!TIP]
> v0.5.x 이전 버전에서는 `lerobot-rollout`이 존재하지 않으므로 대신 `lerobot-record`를 사용해야 합니다. 자세한 내용은 [여기](https://huggingface.co/docs/lerobot/v0.5.1/en/il_robots#run-inference-and-evaluate-your-policy)를 참조하세요.

```bash
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
```

