2 回の手動データ収集

DK1 は、両手による遠隔操作データ収集を目的としてゼロから設計されています。 このガイドでは、両方のアームとカメラの配線、リーダー/フォロワー記録手順の実行、バイマニュアル データセット スキーマの理解、ACT トレーニング用のデータの準備について説明します。

録音する前に

両面マニュアル録音のためのハードウェア接続

バイマニュアル録音では、シングルアームセットアップよりも多くの接続が必要です。 LeRobot を開始する前にすべての接続を確認してください。セッション中に接続が失われると、エピソードが破損します。

🥇

リーダーアーム(ダイナミクセルXL330)

リーダーアームからホストPCまでUSB-C。 このアームはオペレータの手によって動かされます。 テロップ中の誤った切断を避けるために、短いケーブル (1 m) を使用してください。 確認する: ls /dev/ttyACM0

🥈

フォロワアーム(DM4340+パワー)

フォロワ アームからホスト PC までの USB-C と DC 電源。 フォロワー アームには外部電源が必要です。USB 電源だけで動作させないでください。 確認する: ls /dev/ttyACM1

📷

リストカメラ(フォロワーアーム)

USB Web カメラをフォロワー アームのエンドエフェクターに取り付けます。 これが主な操作カメラです。 USB3.0経由で接続します。 確認する: ls /dev/video0

📖

オーバーヘッド/ワークスペースカメラ

両手作業スペースの上、高さ約 70 cm、下に 30 度の角度でカメラを固定しました。 両腕を同時に捕らえます。 2 番目の USB 3.0 ポート。 確認する: ls /dev/video2

重要: 両手による同期。 2 つのアームと 2 つのカメラを備えた DK1 にとって、同期は最も重要なデータ品質要素です。 LeRobot は、ホスト PC のクロックからすべてのストリームにタイムスタンプを付けます。 タイムスタンプのスキューを最小限に抑えるには、(1) カメラとアームに別個の USB バス コントローラーを使用します。(2) 安定したクロックを持つ USB 3.0 ハブを使用します。(3) CPU ガバナーをパフォーマンス モードに設定します。 目標: 4 つのストリームすべての間のスキューが 5 ミリ秒未満。 左腕と右腕の状態の間で 10 ミリ秒の非同期が発生すると、接触が多いタスクで ACT トレーニングが失敗する可能性があります。

録音ワークフロー

リーダー/フォロワー遠隔操作記録手順

DK1 録音セッションごとに次の手順に従ってください。 両手操作の手順には、片手での採取と比べて追加の手順がいくつかあります。

1

セッション前の安全チェック

両アーム間の共有作業スペース(1.5m×1m)を空けてください。 両方の腕が衝突せずに共有ワークスペースに届くことを確認します。 記録前に非常停止をテストしてください。 見る 安全ページ.

2

両アームを接続して確認する

# Verify serial ports are available
ls /dev/ttyACM*
# Expected: /dev/ttyACM0 (leader) and /dev/ttyACM1 (follower)

# Quick connection test
python -m lerobot.scripts.control_robot \
  --robot.type=bi_dk1_follower \
  --robot.config=~/.lerobot/robots/dk1_bimanual.yaml \
  --control.type=none
3

カメラフィードを確認する

LeRobot を起動する前に、両方のカメラがストリーミングされている必要があります。 カメラが見つからないと、ヌル画像フレームを含むエピソードが黙って生成されます。

python3 -c "
import cv2
for i in [0, 2]:
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        ret, frame = cap.read()
        print(f'Camera {i}: OK ({frame.shape[1]}x{frame.shape[0]})')
    else:
        print(f'Camera {i}: FAILED')
    cap.release()
"
4

腕を開始位置に移動します

リーダー アームを開始テロップ位置に手動で移動します。 フォロワーアームはそれをミラーリングします。 ウォームアップ期間が始まる前に、リーダー アームを 2 ~ 3 秒間安定させて同期を確認します。

5

タスクシーンを設定する

両腕の一貫した開始位置にオブジェクトを配置します。 開始時の構成を写真に撮ります。 両手作業の場合は、テープで正確な位置をマークします。両方の腕の軌道に互換性がある必要があるため、シーンの一貫性がさらに重要です。

6

LeRobot の両手録画を開始する

source ~/.venvs/dk1/bin/activate
python -m lerobot.scripts.control_robot \
  --robot.type=bi_dk1_follower \
  --robot.config=~/.lerobot/robots/dk1_bimanual.yaml \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/dk1-bimanual-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Pick up block with left arm, place in bin with right arm" \
  --control.warmup_time_s=5 \
  --control.reset_time_s=15

より長いものを使用する reset_time_s 両手タスクの場合 - 2 本のアームとシーンをリセットすると、1 本のアームのセットアップよりも時間がかかります。

7

エピソードを確認して再生する

10 エピソードの各バッチが終了したら、続行する前に再生して確認してください。 腕の調整に注意してください。左右の腕の間の遅れは、フォロワーの動きのジッターとして現れます。

python -m lerobot.scripts.visualize_dataset \
  --repo_id=your-username/dk1-bimanual-pick-place-v1 \
  --episode_index=0
8

HuggingFace ハブにプッシュする

huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
  --repo_id=your-username/dk1-bimanual-pick-place-v1
データセットの形式

バイマニュアル用 LeRobot データセット形式 (DK1)

DK1 バイマニュアル データセット スキーマは、シングルアーム記録と比較して関節状態フィールドを 2 倍にします。 各エピソードには、リーダー アームとフォロワー アームの両方とすべてのカメラからの同期した観察が含まれています。

ディレクトリ構造

your-username/dk1-bimanual-pick-place-v1/
├── meta/
│   ├── info.json          # Dataset metadata, fps, shapes, robot_type
│   ├── episodes.jsonl     # Per-episode metadata (task, length, outcome)
│   └── stats.json         # Min/max/mean/std for all fields
├── data/
│   └── chunk-000/
│       ├── episode_000000.parquet
│       └── ...
└── videos/
    └── chunk-000/
        ├── observation.images.wrist_cam/
        │   ├── episode_000000.mp4
        │   └── ...
        └── observation.images.overhead_cam/
            └── ...

エピソード データ スキーマ (バイマニュアル)

各エピソードのフィールド Parquet ファイル — DK1 バイマニュアル (bi_dk1_follower)
観察・状態 float32[16] フォロアアームジョイント位置: 7 DOF + グリッパー × 2 アーム = 16 値
観察.状態_左 float32[8] 左フォロアアーム: 7 ジョイント位置 + 1 グリッパー (rad)
観察.state_right float32[8] 右フォロワーアーム: 7 ジョイント位置 + 1 グリッパー (rad)
アクション float32[16] 両方のフォロワー アームのターゲット位置 (リーダー アーム テレオペから)
アクション_左 float32[8] リーダーから左腕の目標ポジション
アクション右 float32[8] リーダーから右腕の目標ポジション
観察.画像.手首カメラ ビデオパス フォロワーアームエンドエフェクターの手首に取り付けられたカメラ
観察.画像.オーバーヘッドカメラ ビデオパス 完全な両手操作ワークスペースを表示する固定オーバーヘッド カメラ
タイムスタンプ float64 ホスト PC の Unix タイムスタンプ。 両方のアームがこのタイムスタンプでサンプリングされます。
arm_sync_delta_ms float32 DK1 固有: 左腕と右腕の状態読み取り間の時間差。 これが 10 ミリ秒を超えるエピソードにフラグを立てます。
次へ。完了 ブール エピソードの最後のフレームでは True
品質保証

バイマニュアルデモの品質チェックリスト

バイマニュアル データセットには、シングルアーム データよりも厳しい品質要件があります。 アーム間の調整が不十分であることが、DK1 ポリシーのトレーニング失敗の主な原因です。

  • 1
    アーム同期デルタは 10 ミリ秒未満です チェックしてください arm_sync_delta_ms 各エピソードのフィールド。 10 ミリ秒を超えるスパイクは、USB バスの競合またはシリアル パケットのドロップを示します。 高いデルタが持続するエピソードを削除します。
  • 2
    接触時にフォロアアームが振動しない 接触点 (把握、ハンドオフ、配置) でのフォロワー アームの軌道を確認します。 発振は高周波ノイズとして現れます。 observation.state。 PD ゲインが存在する場合は、それを減らします。 見る ソフトウェアのトラブルシューティング.
  • 3
    同じエピソードで両腕がタスクを完了する 両手タスクの場合、エピソードは両方の腕が割り当てられたサブタスクを完了した場合にのみ有効です。 左腕は成功したが、右腕が物体を落とした場合、エピソードを失敗としてマークし、削除するか注釈を付けます。
  • 4
    カメラフレームの欠落はありません 両方のカメラ ストリームに、予想されるフレーム数が含まれている必要があります。 いずれかのカメラからフレームが欠落すると、visumotor ポリシーの入力が破損します。 で確認してください lerobot.scripts.visualize_dataset.
  • 5
    タスクシーンはエピソード間で同様にリセットされました 両腕のワークスペースはエピソードごとにリセットする必要があります。 オブジェクトの位置、アームの開始構成、カメラの角度がすべて一致している必要があります。 写真の始動構成を参考にしてください。
  • 6
    エピソードの長さが一定である 成功したエピソードはすべて、長さの中央値の ±25% 以内である必要があります。 両手タスクでは、片腕タスクよりも分散が大きくなることがよくありますが、極端な外れ値 (中央値の 3 倍) は破棄する必要があります。
  • 7
    データセットの統計は両アームで対称的です meta/stats.json、それを確認してください action_left そして action_right 統計はタスクのジオメトリにとって妥当です。 1 つのアームの差異がゼロの場合、そのアームは動いていません。ポートの割り当てを確認してください。
  • 8
    テロップデモのスタイルは一貫している すべてのデモンストレーションでは、同じアプローチ パス、把握戦略、ハンドオフ テクニックを使用する必要があります。 混合戦略は、ACT トレーニングを混乱させるマルチモーダルなアクション分布を生成します。 タスクのバージョンごとに 1 つのオペレーターを使用します。
次のステップ

バイマニュアル データセットで ACT をトレーニングする

データセットが品質チェックリストに合格したら、LeRobot を使用して ACT または拡散ポリシーを直接トレーニングします。 ACT は DK1 の両手タスクに推奨されます。そのチャンク化されたアクション予測は、シングルステップ ポリシーよりもアーム間の調整を適切に処理します。

Train ACT (両手操作を推奨)

python -m lerobot.scripts.train \
  --policy.type=act \
  --dataset.repo_id=your-username/dk1-bimanual-pick-place-v1 \
  --policy.chunk_size=100 \
  --policy.n_action_steps=100 \
  --training.num_epochs=5000 \
  --training.batch_size=8 \
  --output_dir=outputs/dk1-act-bimanual

トレーニング普及ポリシー (接触の多いタスク向け)

python -m lerobot.scripts.train \
  --policy.type=diffusion \
  --dataset.repo_id=your-username/dk1-bimanual-pick-place-v1 \
  --training.num_epochs=8000 \
  --output_dir=outputs/dk1-diffusion-bimanual

さらに深く進んでください: 全文を読む データ収集パイプラインの概要 Robotics Library では、エピソード構造、データセットのバージョン管理、同期戦略、およびマルチタスクの手動データセット構成を徹底的に処理します。

データセットの準備はできていますか? トレーニングを開始します。

バイマニュアル データセットを HuggingFace にプッシュし、ACT のトレーニングを開始します。