データ収集

SO-101 は、LeRobot コミュニティで最も一般的なデータ収集部門の 1 つです。 このガイドでは、ハードウェア接続からエピソードの録画、HuggingFace へのデータセットのプッシュまでのすべてを説明します。

録音する前に

録音用のハードウェアセットアップ

SO-101 データ収集のセットアップは CAN バス アームよりも簡単で、すべてが USB 経由で実行されます。 接続するものはこちらです。

📷

ワークスペースカメラ

USB Web カメラは、上または横からワークスペースに向けられます。 固定位置に取り付けます。エピソード間で動かさないでください。 確認する: ls /dev/video*

🔒

リストカメラ(オプション)

エンドエフェクターに取り付けられた小型 USB カメラ。 一人称視点を追加します。 2 番目の USB ポートが必要です。 LeRobot はマルチカメラ同期をサポートしています。

🔌

フォロワアーム(USBシリアル)

アクションを実行する腕。 USBサーボコントローラ経由で接続します。 ポートを検証する ls /dev/ttyUSB*

👤

リーダーアーム(USBシリアル)

コンプライアンス モードの 2 台目の SO-101 — 手で動かしてフォロワーを駆動します。 2 番目の USB ポートに接続します。 最高品質のデモンストレーションを提供します。

ROS もカーネル ドライバーもありません: CAN バス設定とは異なり、SO-101 データ収集スタックは完全に USB シリアル上で実行されます。 MacBook または Windows ラップトップで録音できます。Ubuntu は必要ありません。

録音ワークフロー

ステップバイステップの記録ワークフロー

1

キャリブレーションが最新であることを確認する

アームが分解されたり移動されたりした場合は、新しいセッションの前にキャリブレーションを実行してください。 見る ソフトウェア → キャリブレーション.

python -m lerobot.scripts.control_robot \
  --robot.type=so101 --robot.port=/dev/ttyUSB0 \
  --control.type=calibrate
2

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

python -c "
import cv2
for i in range(4):
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        print(f'Camera {i}: OK')
    cap.release()
"
3

アームをホームポジションに移動

フォロア アームをホーム ポジションに置きます (完全に伸ばし、エンドエフェクタが前方を向いている)。 テロップを開始する前に、リーダー アームを同じ位置にリセットします。

4

タスクシーンを設定する

オブジェクトを一貫した開始位置に配置します。 必要に応じてテーブルにマークを付けます。ポリシーの一般化には一貫した初期条件が重要です。

5

LeRobot の記録を開始する

python -m lerobot.scripts.control_robot \
  --robot.type=so101 \
  --robot.port=/dev/ttyUSB1 \
  --robot.leader_arms.main.type=so101 \
  --robot.leader_arms.main.port=/dev/ttyUSB0 \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/so101-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Pick the red block and place it in the bin" \
  --control.warmup_time_s=3 \
  --control.reset_time_s=8

LeRobot は各エピソードの前にプロンプ​​トを出します。 ウォームアップ中に、録音を開始する前にリーダー アームのグリップを調整できます。

6

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

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

低品質のエピソードはすぐに削除してください。 カメラ フレームのドロップ、関節速度の異常、またはタスクの実行が不完全かどうかを確認します。

7

HuggingFace ハブにプッシュする

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

SO-101 データセット形式

SO-101 は、標準の LeRobot / HuggingFace データセット形式を使用します。これは、OpenArm、Koch、および他の LeRobot アームと同一のスキーマです。 これは、データセットが完全な LeRobot トレーニング エコシステムと直接互換性があることを意味します。

エピソードデータスキーマ

各エピソードのフィールド Parquet ファイル
観察・状態 float32[6] ジョイント位置 (度単位) (6 DOF — 5 ジョイント + グリッパー)
観察画像* ビデオパス カメラごとの MP4 ビデオ ファイルのフレームの参照
アクション float32[6] リーダーアームからの目標関節位置
タイムスタンプ float64 Unix タイムスタンプ (秒単位)
フレームインデックス int64 エピソード内のフレーム番号
エピソードインデックス int64 データセット内のエピソード番号
次へ。完了 ブール 各エピソードの最後のフレームでは True
タスクインデックス int64 タスク説明ルックアップテーブルへのインデックス付け

SO-101 特有の注意事項

SO-101 アクション スペースでは、関節位置がラジアンではなく度 (Feetech サーボ単位) で使用されます。 クロスプラットフォーム トレーニングのために SO-101 と OpenArm データセットを混合する場合は、最初に次の統計を使用して両方をラジアンに正規化します。 meta/stats.json.

品質保証

収集されたデータの品質チェックリスト

各記録セッションの後、ハブにプッシュする前にこれを実行します。

  • 1
    エピソードの長さは一貫している 異常な長さのエピソードは、通常、オペレーターが一時停止した、グリッパーが滑った、または記録が中断されたことを意味します。 長さの中央値の±30%以内に保ちます。
  • 2
    サーボ速度スパイクなし STS3215 サーボの帯域幅は限られており、突然の速度スパイクが発生します。 observation.state シリアルバスのドロップアウトを示します。 それらのエピソードを削除します。
  • 3
    カメラフレームはジョイントデータに合わせて調整されます カメラのタイムスタンプと共同タイムスタンプが互いに 20 ミリ秒以内であることを確認します。 USB シリアル遅延により、長時間録音するとずれが発生する可能性があります。 100 エピソードごとにカメラを再同期します。
  • 4
    リーダーアームのトラッキングはスムーズでした 記録中にフォロワーが著しく遅れた場合 (USB シリアル遅延により)、アクション ラベルは観測値からタイムシフトされます。 再生して確認してください。
  • 5
    タスクシーンは各エピソードの開始時に一貫していました 同じ位置と方向にあるオブジェクト。 SO-101 の再現性は (CAN アームと比較して) 低いため、これは特に重要です。初期条件の変動はポリシーのトレーニングに悪影響を及ぼします。
  • 6
    グリッパーの開閉を鮮明に記録 SO-101 グリッパーの状態はジョイント 6 です。把握イベントが、データ内で段階的なドリフトではなく、明確なジョイント位置の遷移 (開→閉) を示していることを確認します。
次のステップ

データセットからポリシーをトレーニングする

データセットが品質チェックに合格したら、LeRobot を使用して ACT または拡散ポリシーをトレーニングします。

ACTを訓練する

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

鉄道普及政策

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

コミュニティ データセット: SO-101 には、LeRobot エコシステム内で最大のコミュニティ データセット コレクションの 1 つがあります。 自分のデータを収集する前に確認してください 既存の SO-101 データセット用の HuggingFace Hub — 既存のベース データセットから微調整して、記録時間を節約できる場合があります。

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

データセットを HuggingFace にプッシュし、ACT または拡散ポリシーをトレーニングします。