LeRobot documentation

実世界のロボットにおける模倣学習

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

実世界のロボットにおける模倣学習

このチュートリアルでは、ニューラルネットワークを訓練して、実際のロボットを自律的に制御する方法を説明します。

学べる内容:

  1. データセットの記録と可視化の方法
  2. ご自身のデータを使用してポリシーを学習し、評価に備える方法
  3. ポリシーの評価方法と結果の可視化方法。

これらの手順に従うことで、以下の動画に示されているように、レゴブロックを拾い、箱に入れるといったタスクを高い成功率で再現できるようになります。

Video: pickup lego block task

このチュートリアルは特定のロボットに限定されていません。サポートされているプラットフォームに合わせて調整できるコマンドとAPIスニペットについて、順を追ってご案内します。

データ収集時には、リーダーアームやキーボードなどの「テレオペレーション」デバイスを使用してロボットを遠隔操作し、その運動軌跡を記録します。

十分な軌跡を収集できたら、これらの軌跡を模倣するようにニューラルネットワークを訓練し、訓練済みモデルをデプロイして、ロボットが自律的にタスクを実行できるようにします。

途中で問題が発生した場合は、Discordコミュニティに参加してサポートを受け取ってください。

ご自身の環境に合ったコマンドを素早く取得したい場合は、クイックスタートノートブック Open in Colab を使用してください。ロボットを一度設定するだけで、以下のコマンドがすべて貼り付け可能な状態で生成されます。

セットアップとキャリブレーション

まだロボットとテレオペレーションデバイスのセットアップとキャリブレーションを行っていない場合は、SO-101、OpenArm、Koch、またはLeKiwiなど、お使いのロボットのチュートリアルに従って設定してください。サポートされているすべてのロボットは、サイドバーのRobotsセクションにリストされています。

遠隔操作

この例では、SO101 ロボットのテレオペレーション(遠隔操作)を行う方法を紹介します。各コマンドに対応する API の使用例も併せて提供します。

ロボットに関連付けられたidは、キャリブレーションファイルを保存するために使用されることに注意してください。同じセットアップを使用する場合、テレオペレーション、記録、評価のいずれにおいても、同じidを使用することが重要です。

コマンド
APIの例
lerobot-teleoperate \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem58760431541 \
    --robot.id=my_awesome_follower_arm \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem58760431551 \
    --teleop.id=my_awesome_leader_arm

teleoperate コマンドは自動的に以下を実行します:

  1. 欠落しているキャリブレーションを特定し、キャリブレーション手順を開始します。
  2. ロボットとテレオペレーションデバイスを接続し、テレオペレーションを開始します。

カメラ

セットアップにカメラを追加するには、このガイドに従ってください。

カメラで遠隔操作

rerun を使用すると、カメラ映像と関節位置を可視化しながら、再度テレオペレーションを行うことができます。この例では、wrist と top の2つのカメラを使用します。チュートリアルの残りの部分でも、同じカメラ構成を維持します。

コマンド
APIの例
lerobot-teleoperate \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem5AB90687491 \
    --robot.id=my_follower_arm \
    --robot.cameras="{ wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}}" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem5AB90689011 \
    --teleop.id=my_leader_arm \
    --display_data=true

データセットを記録する

テレオペレーションに慣れたら、最初のデータセットを記録できます。

Hugging Face hub の機能を使用して、あなたのデータセットをアップロードします。これまで Hub を使用したことがない場合は、書き込みアクセス権限を持つトークンを使用して CLI からログインできることを確認してください。このトークンは、Hugging Face の設定から生成できます。

このコマンドを実行して、CLIにトークンを追加します:

hf auth login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential

次に、Hugging Face リポジトリ名を変数に格納します:

HF_USER=$(NO_COLOR=1 hf auth whoami | awk -F': *' 'NR==1 {print $2}')
echo $HF_USER

これでデータセットを記録できます。5エピソードを記録して、データセットをハブにアップロードするには、以下のコードをロボットに合わせて調整し、コマンドまたはAPIの例を実行してください。

コマンド
APIの例
lerobot-record \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem585A0076841 \
    --robot.id=my_awesome_follower_arm \
    --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 1920, height: 1080, fps: 30}}" \
    --robot.cameras="{ wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}}" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem58760431551 \
    --teleop.id=my_awesome_leader_arm \
    --display_data=true \
    --dataset.repo_id=${HF_USER}/record-test \
    --dataset.num_episodes=5 \
    --dataset.single_task="Grab the black cube" \
    --dataset.streaming_encoding=true \
    --dataset.encoder_threads=2
# Optional: --dataset.rgb_encoder.vcodec=auto

選択したカメラ名(ここではwristとtop)が、データセットのキーobservation.images.wristとobservation.images.topになります。このデータセットで学習したポリシーは、デプロイ時に同じカメラ名と解像度を期待するため、本チュートリアルのすべてのステップで同じ--robot.camerasの値を再利用してください。名前を異ならせる必要がある場合は、Rename Mapを参照してください。

lerobot-record は、セッションの日時を --dataset.repo_id の末尾に追加するため、すべての録画に一意の名前が付けられます: ${HF_USER}/record-test は ${HF_USER}/record-test_YYYYMMDD_HHMMSS として保存されます(例: record-test_20260929_143012)。完全な名前を Hugging Face プロファイルで確認するか、ls ~/.cache/huggingface/lerobot/${HF_USER} を使用して確認し、以下のコマンドで record-test_YYYYMMDD_HHMMSS と書かれている箇所には、その名前を使用してください。指定した名前をそのまま保持するには、--dataset.no_stamp=true を追加してください。

Datasetのアップロード

ローカルでは、データセットは以下のフォルダに保存されます: ~/.cache/huggingface/lerobot/{repo-id}。データ記録が完了すると、データセットは Hugging Face ページ(例: https://huggingface.co/datasets/${HF_USER}/record-test_YYYYMMDD_HHMMSS)にアップロードされます。以下のコマンドを実行して URL を取得できます:

echo https://huggingface.co/datasets/${HF_USER}/record-test_YYYYMMDD_HHMMSS

データセットにはコミュニティが簡単に検索できるようにLeRobotタグが自動的に付与され、--dataset.tags='["tutorial"]'のようにカスタムタグを追加することもできます。

LeRobotのタグで検索することで、ハブ上の他のLeRobotデータセットを探すことができます。

ローカルのデータセットをHubに手動でプッシュするには、以下を実行できます。

hf upload ${HF_USER}/record-test_YYYYMMDD_HHMMSS ~/.cache/huggingface/lerobot/${HF_USER}/record-test_YYYYMMDD_HHMMSS --repo-type dataset

Record関数

lerobot-record は、ロボットの動作中にデータを取得・管理するためのツール群を提供します:

1. データの保存
  • データはLeRobotDataset形式で保存され、録画中はディスクに保存されます。
  • デフォルトでは、録画後にデータセットが Hugging Face ページにプッシュされます。
    • アップロードを無効にするには、--dataset.push_to_hub=Falseを使用してください。
2. チェックポイントの保存と再開
  • チェックポイントは、記録中に自動的に作成されます。
  • 問題が発生した場合、または同じデータセットに追加のエピソードを記録したい場合は、--resume=true を付けて同じコマンドを再実行することで再開できます。タイムスタンプを含む完全なデータセット名を渡します(--dataset.repo_id=${HF_USER}/record-test_YYYYMMDD_HHMMSS)。録音を再開する際、--dataset.num_episodes はデータセットの目標エピソード総数ではなく、新たに記録する追加エピソードの数に設定する必要があります。また、--dataset.root="local_path" も必ず設定してください。これはデータセットの新しい部分の保存先となるローカルパスであり、再開には必須です。
  • --resume=true を付けずにコマンドを再実行すると、新しいタイムスタンプ付きの新しいデータセットが開始されます。--dataset.no_stamp=true を使用する場合、まず既存のデータセットディレクトリを削除してください。
3. 記録パラメータ

コマンドライン引数を使用して、データ記録の流れを設定します:

  • --dataset.episode_time_s=60 各データ録画エピソードの長さ(デフォルト: 60秒)。
  • --dataset.reset_time_s=60 エピソードごとに環境をリセットする時間(デフォルト: 60秒)。
  • --dataset.num_episodes=50 記録するエピソードの総数(デフォルト: 50)。
4. 録音中のキーボード操作

キーボードショートカットを使用して、データ記録の流れを制御します:

  • 右矢印キー(→)またはnを押す:現在のエピソードを早期停止するか、時間をリセットして次へ移動します。
  • 左矢印(←)またはrを押す: 現在のエピソードをキャンセルして、再録画します。
  • Escape (ESC) または q を押す: セッションを即座に停止し、動画をエンコードして、データセットをアップロードします。

これらの制御フローのショートカットは、X11、Wayland、およびヘッドレス/SSHセッションで動作します。グローバルキーボードバックエンドが利用できない場合(Wayland、ヘッドレスマシン、またはアクセシビリティ権限のないmacOS)、lerobot-recordは自動的にターミナルから同じキーを読み取ります。インタラクティブなターミナルから起動し、フォーカスを維持してください。また、文字の代替キーとして、n(次へ、→と同じ)、r(再録画、←と同じ)、q(終了、ESCと同じ)を使用することもできます。$DISPLAYの設定は不要です。

これは録画の制御フローにのみ適用されます。キーボードによる遠隔操作(キーボードでロボットを操作すること)は依然としてグローバルなキーバックエンドを必要とするため、X11セッション、Windowsデスクトップ、またはAccessibility/Input Monitoringが許可されたmacOSでのみ動作し、Waylandやヘッドレスセッションでは動作しません。

データ収集のヒント

データ記録に慣れたら、学習用のより大きなデータセットを作成できます。良い最初のタスクは、異なる位置でオブジェクトを把持し、それをビンに置くことです。少なくとも50エピソードの記録を推奨します。各位置につき10エピソードずつです。カメラは固定し、記録全体を通じて一貫した把持動作を維持してください。また、操作しているオブジェクトがカメラに映っていることを確認してください。良い目安として、カメラの映像だけを見ても、自分でそのタスクを実行できる状態にしてください。

以下のセクションでは、ニューラルネットワークを学習します。信頼できるグリップ性能を達成した後、データ収集時にさらなるバリエーションを導入できます。例えば、追加のグリップ位置、異なるグリップ手法、カメラ位置の変更などです。

結果に悪影響を及ぼす可能性があるため、多様性を急激に大きくしすぎないよう注意してください。

この重要なテーマをさらに深く掘り下げる場合は、良いデータセットとは何かについて私たちが執筆したブログ記事をご覧ください。

キャデンスレポート

lerobot-record は --dataset.fps でループの速度を制御し、実際に達成した内容を報告します。保持する各エピソードについて1行のサマリーを出力し、録画が終了した際にはセッション全体のブロックを出力します。Ctrl-C による中断の場合も同様です。

Cadence (episode 0): 29.88 Hz vs 30 Hz target · 600 ticks, 20.0 s measured · 8/599 ticks over the 33.3 ms budget (work mean 18.4 ms, worst 45.1 ms)
Cadence (episode 1): 29.88 Hz vs 30 Hz target · 600 ticks, 20.0 s measured · 8/599 ticks over the 33.3 ms budget (work mean 18.4 ms, worst 45.1 ms)
Cadence summary — whole run, 2 episodes · target 30 Hz (33.3 ms budget per tick): 1200 ticks, 1198 judged
  effective cadence: 29.88 Hz over 40.1 s measured
  ticks over the 33.3 ms work budget: 16/1198 (1.3%) — work mean 18.4 ms, worst 45.1 ms
  loop-body steps (share of measured work):
    observe      mean  13.65 ms · worst  40.20 ms ·  74.4% of work · 1200 calls
    process_obs  mean   0.30 ms · worst   0.30 ms ·   1.6% of work · 1200 calls
    teleop       mean   1.80 ms · worst   1.80 ms ·   9.8% of work · 1200 calls
    send         mean   0.90 ms · worst   0.90 ms ·   4.9% of work · 1200 calls
    record       mean   1.70 ms · worst   1.90 ms ·   9.3% of work · 1200 calls
  pacing headroom: 15.1 ms slept per tick on average (max 16.7 ms) — near zero means the loop is saturated

このセクションは、データセットでの学習を行う前に読む価値があります。フレームのタイムスタンプはインデックスから導出されるため、25 Hzで実行されたセッションであっても、30 Hzと主張するデータセットが生成されます。記録されたモーションは単に現実より速いだけです。上記の例では、observeがループ全体の処理時間の74%を占め、そのworstは33.3 msの予算に対して40 msです。カメラが原因で、これらの16ティックが超過しました。ペースの余裕がほぼゼロということは、遅いティックを吸収する手段がもうないことを意味します。

エピソード間のリセットフェーズも同じ方法でペースが計測されますが、何も記録しないため、これらの数値には意図的に含まれていません。lerobot-teleoperateとlerobot-replayは同じ方法で報告し、lerobot-rolloutはCadence Reportingで説明されている補間固有の行を追加します。

トラブルシューティング:

  • Linux 環境では、lerobot-record がインタラクティブなターミナルで実行されている限り、録画の制御フロー用のキー(矢印キー、Escape キー)は X11、Wayland、およびヘッドレス/SSH セッションで動作します。$DISPLAY の設定は不要です。キーが反応しない場合は、パイプ接続や非 TTY セッションではなく、インタラクティブな(TTY)ターミナルで、かつそのターミナルがフォーカスされていることを確認してください。文字キーの代替手段として、n / r / q も使用できます。キーボードによる テレオペレーション(録画の制御フローとは異なります)は、依然としてグローバルなキーバックエンドを必要とします。具体的には、X11 セッション、Windows デスクトップ、または Accessibility/Input Monitoring の権限が付与された macOS が必要です。Wayland やヘッドレスマシンでは利用できません。pynput の制限事項を参照してください。

データセットを可視化

デフォルトでは、データセットはHubにアップロードされます(--dataset.push_to_hub=Falseを渡した場合を除く)。そのため、LeRobot Dataset Visualizerですぐに開くことができます。ホームページでリポジトリIDを入力するか、このコマンドが出力するリンクから最初のエピソードに直接アクセスできます。

echo "https://huggingface.co/spaces/lerobot/visualize_dataset?path=/${HF_USER}/record-test_YYYYMMDD_HHMMSS/episode_0"

ビジュアライザーにサインインして、プライベートなデータセットを開きます。手順については、ブラウザでデータセットを探索するを参照してください。

エピソードをリプレイする

有用な機能として、replay 関数があります。この関数を使用すると、記録した任意のエピソードや、あらゆるデータセットのエピソードを再生できます。この関数は、ロボットの動作の再現性をテストし、同じモデルのロボット間の転移可能性を評価するのに役立ちます。

以下のコマンドまたはAPIの例を使用して、ロボットで最初のエピソードを再生できます。

コマンド
APIの例
lerobot-replay \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem58760431541 \
    --robot.id=my_awesome_follower_arm \
    --dataset.repo_id=${HF_USER}/record-test_YYYYMMDD_HHMMSS \
    --dataset.episode=0 # choose the episode you want to replay

ロボットは、記録した動きに似た動きを再現する必要があります。例えば、Trossen RoboticsのALOHAロボットでreplayを使用しているこの動画をご覧ください。

ポリシーの学習

ロボットを制御するポリシーを学習するには、lerobot-train スクリプトを使用します。いくつかの引数が必須です。コマンドの例を以下に示します。

lerobot-train \
  --dataset.repo_id=${HF_USER}/record-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}/my_policy

コマンドを説明します:

  1. 先ほど記録したデータセットを、--dataset.repo_id=${HF_USER}/record-test_YYYYMMDD_HHMMSS 引数として指定しました(タイムスタンプを含むデータセットの完全な名前を使用してください)。
  2. ポリシーにpolicy.type=actを指定しました。これにより、configuration_act.pyから設定が読み込まれます。重要なのは、このポリシーが、データセットに保存されているロボットのモーター状態数、モーターアクション数、カメラ数(例: wristおよびtop)に自動的に適応する点です。
  3. Nvidia GPUで学習を行うためpolicy.device=cudaを指定しましたが、Apple siliconで学習する場合はpolicy.device=mpsを使用できます。
  4. トレーニングプロットの可視化にTrackioを使用するためにtrackio.enable=trueを指定しました。これは任意です。trackio show --project lerobotを実行してダッシュボードを開くか、--trackio.space_id=<user>/<space>を渡して実行をHugging Face Spaceに同期できます。
  5. --stepsを設定していないため、トレーニングはデフォルトの100,000ステップで実行されます。これは通常、小規模なデータセットに必要な量を超えています。模倣学習は、データに対して5〜10エポックで収束するのが一般的です。データセットのサイズとバッチサイズに基づいてエポックを--stepsの値に変換するには、Compute & Hardware Guideを参照してください。

トレーニングには数時間かかります。チェックポイントはoutputs/train/act_so101_test/checkpointsに保存されます。

チェックポイントから学習を再開するには、act_so101_test ポリシーのlast チェックポイントから再開するコマンドの例を以下に示します。

lerobot-train \
  --config_path=outputs/train/act_so101_test/checkpoints/last/pretrained_model/train_config.json \
  --resume=true

--config_path は Hub リポジトリ ID も受け入れます。実行がチェックポイントを Hub にプッシュした場合(--save_checkpoint_to_hub=true を使用した場合)、リポジトリから直接再開できます。最新のチェックポイントがダウンロードされ、オプティマイザー、スケジューラー、ステップカウンター、データの順序を復元して学習が継続されます。

lerobot-train --config_path=${HF_USER}/my_policy --resume=true

学習後にモデルをハブにプッシュしたくない場合は、--policy.push_to_hub=falseを使用してください。

さらに、tagsを追加したり、モデルにlicenseを指定したり、--policy.private=true --policy.tags=\[so101,tutorial\] --policy.license=mitを追加することでモデルリポジトリをprivateにしたりできます。

Google Colabを使用してトレーニング

ローカルコンピュータに高性能なGPUがない場合、ACTトレーニングノートブックに従ってGoogle Colabを利用してモデルをトレーニングできます。

Hugging Face Jobsを使用してトレーニング

Hugging Face Jobs を使用すると、ハードウェアを簡単に選択して、クラウド上でトレーニングを実行できます。強力な GPU がなかったり、より多くの VRAM が必要だったり、モデルのトレーニングを大幅に高速化したい場合は、HF Jobs をご利用ください。従量課金制で、使用した秒数ごとにのみ料金が発生します。料金体系や追加情報はこちらでご覧いただけます。

lerobot-train はデフォルトでローカルで実行されます。HuggingFace の GPU で実行するには、--job.target にハードウェアのフレーバー名を指定してください。

lerobot-train \
  --dataset.repo_id=${HF_USER}/record-test_YYYYMMDD_HHMMSS \
  --policy.type=act \
  --policy.repo_id=${HF_USER}/my_policy \
  --job.target=a10g-small

hf jobs hardware で利用可能なフレーバーと料金を一覧表示します。実行中はログがターミナルにストリーム出力されます。Ctrl-C を押すとデタッチできます(ジョブはクラウド上で実行を継続します)。再接続またはキャンセルするには、以下を使用します。

hf jobs logs <job-id>
hf jobs cancel <job-id>

データセットがローカルにのみ存在する場合(まだ Hub にはない場合)、ジョブがrepo_idでダウンロードできるように、自動的にprivateの Hub リポジトリにプッシュされます(公開されることはありません)。学習済みモデルは、実行の終了時にモデルリポジトリにプッシュされます。保存されるたびに中間チェックポイントを Hub にプッシュして、実行中の進捗を監視できるようにするには、--save_checkpoint_to_hub=trueを追加してください。これには、この機能を含むランタイムイメージが必要です。

すべてのジョブ(および実行によってプッシュされたすべてのデータセット)にはlerobotタグが付けられるため、Hub上で簡単に検索できます。--job.tags '["my-tag"]'で独自のタグを追加できます。

デフォルトでは、ジョブの実行時間はウォールクロックで2d(48時間)に制限されています。HF Jobs の duration 文字列で上書きできます。例えば、--job.timeout=4hでより早く失敗させたり、--job.timeout=7dでより長い実行時間を設定したりできます。

注: モデルのリポジトリは事前に作成されます(ジョブが実行するステージング済みの学習設定を保持するためです)。モデルがプッシュされる前に実行が失敗した場合、そのリポジトリは Hub に残され、確認できるようになります。自動的に削除されるわけではないため、繰り返し失敗すると空のリポジトリが残ることがあります。hf repos delete <repo-id> を使用して削除できます。

前提条件: 提出前にhf auth loginを実行してください。Trackioを使用する場合は、--trackio.space_id=<user>/<space>を渡します。Spaceが存在しない場合は作成され、ジョブのHF_TOKENは自動的に転送されます。

ジョブでの再開。再開コマンドに--job.targetを追加すると、再開がクラウドで実行されます。同じコマンドがローカルでもリモートでも機能します。チェックポイントのリポジトリが信頼できる情報源となり、新しいチェックポイントは同じリポジトリ内で系譜を継続します。

# resume a Hub run on a job (its checkpoints are already on the Hub)
lerobot-train --config_path=${HF_USER}/my_policy --resume=true --job.target=a10g-small

# resume a LOCAL run on a job — the checkpoint is uploaded to a private Hub repo first,
# then the job resumes from it (a local-only dataset is uploaded the same way)
lerobot-train \
  --config_path=outputs/train/act_so101_test/checkpoints/last/pretrained_model/train_config.json \
  --resume=true \
  --job.target=a10g-small

ジョブ設定は現在のコマンドから取得されるため、必要に応じて--job.target、--job.timeoutなどを上書きしてください。再開した実行自体を後で再開可能にするには、--save_checkpoint_to_hub=trueを維持してください。

ポリシーのチェックポイントをアップロードする

トレーニングが完了したら、最新のチェックポイントを以下でアップロードします。

hf upload ${HF_USER}/act_so101_test \
  outputs/train/act_so101_test/checkpoints/last/pretrained_model

upload_intermediate_checkpoints を使用して、中間チェックポイントもアップロードできます。

CKPT=010000
hf upload ${HF_USER}/act_so101_test${CKPT} \
  outputs/train/act_so101_test/checkpoints/${CKPT}/pretrained_model

推論を実行してポリシーを評価します

lerobot-rolloutを使用して、学習済みのポリシーをロボットにデプロイします。ニーズに応じて、異なる戦略を選択できます。

同じ--robot.id(キャリブレーションが見つかるように)、同じ--robot.cameras、そして記録したデータセットと同じタスク説明を使用してください。lerobot-rolloutで記録されたデータセットは、名前がrollout_で始まる必要があります。また、lerobot-recordと同様に、その名前にタイムスタンプが追加されます。

以下の例では、モデルを--policy.pathから読み込みます。特定のプッシュ済みバージョンを固定するには、--save_checkpoint_to_hub=trueによって複数のチェックポイントがコミットされた後に有用な機能として、コミットハッシュ、ブランチ、またはタグを指定して--policy.pretrained_revisionを追加します。プッシュされた各チェックポイントにはそのステップがタグ付けされているため(例: --policy.pretrained_revision=010000)、コミットSHAを調べる必要なく、ステップでチェックポイントを復元できます。

ベースモード(録音なし)
Sentryモード(録画あり)
lerobot-rollout \
  --strategy.type=base \
  --policy.path=${HF_USER}/my_policy \
  --robot.type=so101_follower \
  --robot.port=/dev/tty.usbmodem5AB90687491 \
  --robot.id=my_follower_arm \
  --robot.cameras="{ wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}}" \
  --task="Grab the black cube" \
  --duration=60

--strategy.type フラグは、実行モードを選択します:

  • base: データの記録なしで自律的にロールアウトを実行します(クイックな評価に有用)
  • sentry: 自動アップロード付きの連続記録(大規模評価に有用)
  • highlight: キーストロークによる保存付きリングバッファ録音(興味深いイベントのキャプチャに有用)
  • dagger: Human-in-the-loop データ収集(HIL Data Collectionを参照)
  • episodic: エピソード間のリセットフェーズを伴う、エピソード指向のポリシー記録

すべての戦略は、遅い VLA モデル(Pi0、Pi0.5、SmolVLA)でのスムーズな実行のために --inference.type=rtc をサポートしています。各戦略とそのフラグについては、Policy Deployment を参照してください。

Update on GitHub