# チートシート

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

### キャリブレーション

ほとんどの場合、各ロボットおよびテレオペレーションデバイスごとにキャリブレーションを1回だけ実行する必要があります。キャリブレーションを実行する前に、すべての関節が概ね中間位置にあることを確認してください。

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

キャリブレーション後に他のスクリプトで使用する場合、キャリブレーション時に使用したIDと同じものを使用してください。LeRobotはこの方法でキャリブレーションファイルを検出します。

### テレオペレーション

2つのカメラでテレオペレーションを行い、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
```

### Video encoding parameters

RGBストリームと深度ストリームは、それぞれ`--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` で確認できます。ジョブのメトリクスを追跡するには、`--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
```

### 推論

推論とは、学習済みのポリシー/モデルをロボット上で実行することを指します。そのために`lerobot-rollout`を使用します。ポリシーへのパスを指定する必要があります。ローカルパスでもHugging FaceのリポジトリIDでも構いません。例えば、上記の学習コマンドにある`${HF_USER}/policy_test`などです。データセットを収集したときと同じポート、`--robot.id`、カメラ設定、タスク説明を使用してください。`--duration`は秒単位です。指定しない場合、ポリシーは停止するまで実行し続けます。

> [!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
```

