データ収集
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 は必要ありません。
ステップバイステップの記録ワークフロー
キャリブレーションが最新であることを確認する
アームが分解されたり移動されたりした場合は、新しいセッションの前にキャリブレーションを実行してください。 見る ソフトウェア → キャリブレーション.
python -m lerobot.scripts.control_robot \
--robot.type=so101 --robot.port=/dev/ttyUSB0 \
--control.type=calibrate
カメラフィードを確認する
python -c "
import cv2
for i in range(4):
cap = cv2.VideoCapture(i)
if cap.isOpened():
print(f'Camera {i}: OK')
cap.release()
"
アームをホームポジションに移動
フォロア アームをホーム ポジションに置きます (完全に伸ばし、エンドエフェクタが前方を向いている)。 テロップを開始する前に、リーダー アームを同じ位置にリセットします。
タスクシーンを設定する
オブジェクトを一貫した開始位置に配置します。 必要に応じてテーブルにマークを付けます。ポリシーの一般化には一貫した初期条件が重要です。
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 は各エピソードの前にプロンプトを出します。 ウォームアップ中に、録音を開始する前にリーダー アームのグリップを調整できます。
エピソードを確認して再生する
python -m lerobot.scripts.visualize_dataset \
--repo_id=your-username/so101-pick-place-v1 \
--episode_index=0
低品質のエピソードはすぐに削除してください。 カメラ フレームのドロップ、関節速度の異常、またはタスクの実行が不完全かどうかを確認します。
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 トレーニング エコシステムと直接互換性があることを意味します。
エピソードデータスキーマ
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 — 既存のベース データセットから微調整して、記録時間を節約できる場合があります。