LeRobot documentation

チートシート

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.7.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

チートシート

LeRobotのコマンドをすべて一箇所に集めました。特定のコマンドの使い方を忘れた場合や、新しいコマンドについて知りたい場合は、ここで確認できます。

以下に示すすべてのコマンドについて、ポート/名前/IDを各自の値に変更することを忘れないでください。

特定のセットアップに合わせてすべてのコマンドを確認し、設定するための優れた方法として、このJupyter Notebookを使用することをお勧めします。

セットアップとインストール

インストールについては、LeRobot Installationを参照してください。

便利なツール

ポートの検索

これを使用して、ロボットがどのシリアルポートに接続されているかを確認します。ターミナルの指示に従ってください。USBケーブルを抜いてEnterキーを押すよう求められます。その後、スクリプトがそのロボットに対応する正しいシリアルポートを検出し、出力します。

lerobot-find-port
カメラを検索

カメラのインデックスを素早く特定し、その出力を検証します。このコマンドは、カメラ情報をターミナルに出力し、検出された各カメラのテストフレームをoutputs/captured_imagesに保存します。

lerobot-find-cameras

キャリブレーション

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

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

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

テレオペレーション

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

Video encoding parameters

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

推論

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

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
Update on GitHub