データ収集
OpenArm はデータネイティブ プラットフォームとして設計されています。 このガイドでは、カメラの配線から LeRobot 形式でのエピソードの録画まで、すべての段階で品質チェックを行います。
録音用のハードウェア接続
データ収集には、基本的なアーム制御よりも多くのハードウェアが必要です。 このセクションでは、LeRobot を起動する前に、何をどこに接続するかについて説明します。
リストカメラ
USB Web カメラまたは Intel RealSense D435i をエンドエフェクター フランジに取り付けます。 USB 3.0 経由で接続すると 30 fps 以上が可能です。 確認する: ls /dev/video*
オーバーヘッド/ワークスペースカメラ
グローバルビューのためにワークスペースの上にあるカメラを修正しました。 テーブルの上約 60 cm に、下に 30 度の角度で取り付けます。 2 番目の USB 3.0 ポート。
CANバス(アームコントロール)
セットアップからすでに接続されています。 確認する: ip link show can0。 LeRobot を起動する前に、CAN インターフェイスが起動している必要があります。
テロップデバイス
3D SpaceMouse、リーダー アームとしての 2 番目の OpenArm、またはゲームパッド。 2 台の OpenArms を備えたリーダーとフォロワーが最高品質のデモンストレーションを行います。
カメラ同期に関する注意: LeRobot は、ホスト PC レベルですべてのストリームにタイムスタンプを付けます。 マルチカメラ セットアップの場合は、USB 3.0 ハブ (USB 2.0 ハブではない) を使用して、カメラ フレームとジョイント状態の読み取り間の遅延スキューを最小限に抑えます。 目標: ストリーム間のスキューが 5 ミリ秒未満。
ステップバイステップの記録ワークフロー
記録セッションごとに次の手順に従います。 各ステップは最後のステップに基づいて構築されます。ステップを飛ばさないでください。
セッション前の安全チェック
作業スペース (半径 1 m) を空け、アームがホームポジションに自由に到達することを確認し、記録前に非常停止をテストします。 見る 安全ページ.
CAN インターフェースと ROS2 を起動します。
sudo ip link set up can0
source /opt/ros/humble/setup.bash
source ~/openarm_ws/install/setup.bash
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=false can_interface:=can0
腕をホームに戻す
各セッションの前に、原点復帰ルーチンを実行して基準位置を設定します。 アームは、エンドエフェクターに負荷がかからない状態でホームポジションに到達する必要があります。
python3 -m openarm_can.scripts.home --interface can0
カメラフィードを確認する
LeRobot を起動する前に、すべてのカメラがストリーミングしていることを確認してください。 LeRobot がカメラを検出しないと、カメラが見つからないとデータセットが自動的に破損します。
# Quick camera check (press Q to exit)
python3 -c "
import cv2
for i in range(4):
cap = cv2.VideoCapture(i)
if cap.isOpened():
print(f'Camera {i}: OK')
cap.release()
"
タスクシーンを設定する
オブジェクトを一貫した開始位置に配置します。 一貫したシーンの初期化は、ポリシーの一般化にとって重要です。 開始時の構成を写真に撮るか、マークを付けます。
LeRobot の記録を開始する
source ~/.venvs/openarm/bin/activate
python -m lerobot.scripts.control_robot \
--robot.type=openarm \
--control.type=record \
--control.fps=30 \
--control.repo_id=your-username/openarm-pick-place-v1 \
--control.num_episodes=50 \
--control.single_task="Pick up the red cube and place it in the bin" \
--control.warmup_time_s=5 \
--control.reset_time_s=10
LeRobot は各エピソードの前にプロンプトを表示します。 録画を開始する前に、warmup_time_s を使用してテロップの位置を準備します。
エピソードを確認して再生する
録画後、データセットを完成させる前に、疑わしいエピソードを再生します。 低品質のエピソードはすぐに削除してください。
python -m lerobot.scripts.visualize_dataset \
--repo_id=your-username/openarm-pick-place-v1 \
--episode_index=0
HuggingFace ハブにプッシュする
huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
--repo_id=your-username/openarm-pick-place-v1
LeRobot データセット形式
LeRobot は、表形式データには Parquet ファイルを、画像ストリームには MP4/PNG ファイルを使用して、データセットを HuggingFace データセット形式で保存します。 各エピソードは、タイムスタンプが付けられた一連の観察とアクションです。
ディレクトリ構造
your-username/openarm-pick-place-v1/
├── meta/
│ ├── info.json # Dataset metadata, fps, shapes
│ ├── episodes.jsonl # Per-episode metadata (task, length, outcome)
│ └── stats.json # Min/max/mean/std for all fields
├── data/
│ └── chunk-000/
│ ├── episode_000000.parquet
│ ├── episode_000001.parquet
│ └── ...
└── videos/
└── chunk-000/
├── observation.images.wrist_cam/
│ ├── episode_000000.mp4
│ └── ...
└── observation.images.overhead_cam/
└── ...
エピソードデータスキーマ
データとしての失敗エピソード
OpenArm は、成功だけでなく、失敗した試行も安全に記録するように設計されています。 失敗の軌跡 (滑り、掴み間違い、衝突、回復の試み) は、堅牢なポリシーの一般化にとって重要な第一級のデータです。 失敗エピソードを自動的に削除しないでください。 代わりに、それらに注釈を付けます。 success エピソード メタデータのフィールドを設定し、トレーニング フレームワークにそれらを使用するかどうかを決定させます。
収集されたデータの品質チェックリスト
各記録セッションの後、ハブにプッシュする前に、このチェックリストを実行してください。 低品質のデータは、エピソード数の少なさよりも政策のパフォーマンスに悪影響を及ぼします。
-
1エピソードの長さが一定である 同じタスクのすべてのエピソードは、長さの中央値の ±30% 以内である必要があります。 異常値は通常、オペレーターが一時停止したか、把握を怠ったか、または記録が中断されたことを示します。
-
2カメラフレームの欠落はありません すべてのエピソードに、ストリームごとに予想されるフレーム数があることを確認します。 走る
lerobot.scripts.visualize_dataset3 ~ 5 つのエピソードでビデオの品質を確認します。 -
3ジョイントの位置は安全な範囲内です 確認する
observation.state関節の制限を超えることはありません スペック。 高速スパイクは CAN ドロップアウトまたは制御グリッチを示します。これらのエピソードは削除してください。 -
4タスクシーンがエピソード間でリセットされました 各エピソードは、同じ初期位置にあるオブジェクトから開始する必要があります。 リセットをスキップした場合、ポリシーは一貫性のない初期条件から学習し、一般化が不十分になります。
-
5カメラの取材が完了しました 手首のカメラには、エンドエフェクターと操作されるオブジェクトが常に表示される必要があります。 オーバーヘッド カメラにはワークスペース全体が表示されるはずです。 エピソードの途中でオブジェクトがフレームから外れた場合は、マウントを再調整します。
-
6デモンストレーションのスタイルは一貫している すべてのオペレーターは同じアプローチパスと把握スタイルを使用する必要があります。 混合戦略は政策トレーニングを混乱させます。 タスク バージョンごとに 1 人のオペレーターを使用するか、オペレーターごとにエピソードにラベルを付けます。
-
7データセットの統計は合理的であるように見えます チェック
meta/stats.json録音後。 アクションの平均がゼロに近く (関節制限に引っかかっていない)、アクションの std がエピソード間の変動を示すのに十分な大きさであることを確認します。 -
8成功率は文書化されています 収集中に人間の成功率を記録します。 接触が多いタスクの成功率は 60 ~ 70% が一般的です。 成功率が低い場合は、タスクが難しすぎることを示している可能性があります。 これが高いほど、タスクが簡単すぎて有用なトレーニング信号を提供できないことを意味する可能性があります。
データセットからポリシーをトレーニングする
データセットが品質チェックリストに合格したら、LeRobot を使用して ACT または拡散ポリシーを直接トレーニングできます。
ACTを訓練する
python -m lerobot.scripts.train \
--policy.type=act \
--dataset.repo_id=your-username/openarm-pick-place-v1 \
--policy.chunk_size=100 \
--training.num_epochs=5000 \
--output_dir=outputs/act-pick-place
鉄道普及政策
python -m lerobot.scripts.train \
--policy.type=diffusion \
--dataset.repo_id=your-username/openarm-pick-place-v1 \
--training.num_epochs=8000 \
--output_dir=outputs/diffusion-pick-place
さらに深く進んでください: 全文を読む データ収集パイプラインの概要 Robotics Library では、エピソード構造、データセットのバージョン管理、シムとリアルのアライメント、およびマルチタスク データセットの構成を徹底的に処理します。