Juqiao 触覚手袋

データ収集

ロボットの関節状態やカメラ映像とともに接触圧力を記録します。 グローブは、 どれほど難しいか ロボットグリッパーが押しているのは、視覚だけでは見えない情報です。

グローブがデータセットに追加するもの Standard teleoperation datasets capture joint positions, velocities, and camera images. Juqiao Glove を追加すると、各掴み時の接触力の空間分布を示す 64 ノード、200 Hz の圧力マップが記録されます。 このデータに基づいてトレーニングされたポリシーは、壊れやすい物体や変形しやすい物体にとって重要なグリップ力を調整する方法を学習できます。
ハードウェアのセットアップ

システム接続

ソフトウェアを起動する前に、すべてのデバイスを接続してください。 グローブは厳密に USB 有線であり、ワイヤレス モードはありません。

ロボットアーム+ハンド

Orca Hand (推奨) またはその他のエンドエフェクター。 アームに応じて、Feetech USB アダプターまたは CAN 経由で接続します。

/dev/ttyUSB0 or CAN0

ジューチャオグローブ

USB-C をホスト PC に接続します。 CDC-ACM シリアルとして表示されます。 1.5mケーブル。 自由に移動できるように、必要に応じて USB 拡張機能を使用してください。

/dev/ttyACM0

リストカメラ

ロボットの手首に取り付けられた USB または GigE カメラにより、トレーニング用にオブジェクト中心のビューが提供されます。

/dev/video0 or GigE IP

オーバーヘッドカメラ

シーンコンテキスト用のワークスペースカメラを修正しました。 マルチビュー データセット用にリスト カメラとペアリングします。

/dev/video2 or GigE IP

遠隔操作装置

リーダーアーム (SO-101 / OpenArm リーダー)、VR コントローラー、またはフォロワー ロボットを駆動する SpaceMouse。

リーダーポート/HID
録音ワークフロー

ステップバイステップの記録

1

ロボットのアームとハンドを持ち上げます

アーム ドライバー (該当する場合は Orca Hand ドライバー) を別のターミナルで起動します。 続行する前に、joint_states が公開されていることを確認してください。

# Terminal 1: Robot arm (example: OpenArm) ros2 起動 openarm_ros2 openarm.launch.py​​ ポート:=/dev/ttyUSB0 # Terminal 2: Orca Hand (if using Orca Hand end-effector) ros2 起動 orca_ros2 orca_hand.launch.py​​ ポート:=/dev/ttyUSB1 # Verify ros2 トピック hz /joint_states # Should be ~100 Hz ros2 トピック hz /orca_hand/joint_states # Should be ~100 Hz
2

Juqiao Glove ドライバーを起動します

グローブ ROS2 ノードを起動します。 録音セッションを開始する前に、200 Hz データが流れていることを確認してください。

# Terminal 3: Juqiao Glove ros2 起動 juqiao_glove_ros2 glove.launch.py​​ ポート:=/dev/ttyACM0 # Verify pressure data is live ros2 トピック hz /juqiao_glove/tactile_array # Should be ~200 Hz ros2 トピック エコー /juqiao_glove/grasp_region # Should print region strings
3

カメラを起動する

手首ビューと頭上ビューのカメラ ノードを開始します。 画像トピックがターゲット フレーム レート (通常は 30 fps) でパブリッシュされていることを確認します。

# Wrist camera (USB) ros2 usb_cam を実行 usb_cam_node_exe --ros-args -p video_device:=/dev/video0 -p フレームレート:=30.0 # Overhead camera (GigE example) ros2 起動カメラ_ros2 gige_camera.launch.py​​ ip:=192.168.1.100 # Verify ros2 トピック hz /wrist_camera/image_raw ros2 トピック hz /overhead_camera/image_raw
4

すべてのストリームが同期されていることを確認します

使用 ros2トピックリスト 必要なトピックがすべて存在することを確認します。 エピソードを記録する前に、モダリティ全体でタイムスタンプが 20 ミリ秒以内であることを確認してください。

ros2トピックリスト | grep -E "関節|触覚|画像|把握" # Expected topics: # /joint_states (arm, ~100 Hz) # /orca_hand/joint_states (hand, ~100 Hz) # /juqiao_glove/tactile_array (glove, ~200 Hz) # /juqiao_glove/grasp_region (glove, ~200 Hz) # /wrist_camera/image_raw (camera, 30 Hz) # /overhead_camera/image_raw (camera, 30 Hz)
5

LeRobot でデータセットを記録する

LeRobot の記録スクリプトを使用します。 の --触覚トピック flag は、関節の状態と画像とともに、グローブ圧力ストリームをデータセット列として追加します。

# Record 50 episodes; press Enter to start each, Space to stop python -m lerobot.scripts.record \ --robot-path lerobot/configs/robot/orca_hand.yaml \ --fps 30 \ --repo-id $HUGGINGFACE_USER/orca_grasp_tactile \ --タグ "juqiao-glove、触覚、操作" \ --ウォームアップ時間-s 2 \ --episode-time-s 30 \ --リセット時間-s 5 \ --num-episodes 50 \ --プッシュツーハブ \ --tactile-topic /juqiao_glove/tactile_array \ --tactile-key tactile_pressures
LeRobot --tactile-topic フラグはまだありませんか? 同期とデータセット スキーマを自動的に処理する SVRC マルチモーダル レコーダー ラッパーを使用します。 pip install roboticscenter[レコーダー]
6

プッシュする前にエピソードを確認する

HuggingFace Hub にコミットする前に、ヒートマップ オーバーレイで各エピソードを再生して触覚データの品質を確認します。

# Replay and overlay heatmap on video python -m roboticscenter.scripts.review_episode \ --dataset-path ./data/orca_grasp_tactile \ --エピソードインデックス 0 \ --overlay-tactile \ --tactile-key tactile_pressures # Discard bad episodes python -m lerobot.scripts.delete_episodes \ --dataset-path ./data/orca_grasp_tactile \ --エピソード 3 7 12 # episode indices to discard
7

HuggingFace ハブにプッシュする

検証されたデータセットをアップロードします。 データセット カードは、触覚を含むモダリティの説明とともに自動生成されます。

ハグフェイス-cli ログイン # first time only python -m lerobot.scripts.push_dataset \ --dataset-path ./data/orca_grasp_tactile \ --repo-id $HUGGINGFACE_USER/orca_grasp_tactile # Verify upload Python -c " データセットからのインポートload_dataset ds = load_dataset('$HUGGGINGFACE_USER/orca_grasp_tactile', Split='train') print(ds.column_names) print(ds.features['tactile_pressures']) 」
参照

データセットスキーマ

データセット内の各フレームには次の列が含まれています。 すべての配列は float32 Parquet 列として保存されます。 画像を MP4 ビデオ シーケンスとして保存します。

カラム形状・種類説明
観察・状態 float32[6] ロボットアームの関節位置(ラジアン)。 インデックス 6 は、6-DOF アームを使用する場合のグリッパー開口部です。
観察.hand_state float32[17] Orca ハンドジョイントの位置 (ラジアン)、17 DOF。 器用でない場合は省略してください。 メタデータでは共同名ごとにラベルが付けられます。
観察.触圧 float32[64] Juqiao Glove はノードごとに正規化された圧力、0.0 (接触なし) ~ 1.0 (フルスケール)。 ロボットのフレームレートに合わせて 200 Hz ダウンサンプリング。
観察.tactile_pressures_raw uint16[64] 生の 16 ビット ADC 値。 再キャリブレーション後の再正規化のために保存します。 オプション。 データセットのサイズを減らすために省略します。
観察.把握領域 str アクティブな接触領域のヒューリスティック: 「ヤシ」, "親指", "索引", "真ん中", "指輪", "ピンキー"、 または "" (連絡はありません)。
観察・画像・手首 uint8[H, W, 3] リストカメラの RGB フレーム(30 fps)、MP4 ビデオ シーケンスとして保存。
観察.画像.オーバーヘッド uint8[H, W, 3] オーバーヘッド カメラの RGB フレームは 30 fps です。
アクション float32[6 または 23] 腕 (6) およびオプションで手 (17) の目標関節位置。 形状は手の器用さの有無によって決まります。
言語説明 str タスクの説明(例) 「卵を割らずに拾う」。 言語条件付きのポリシー トレーニングを有効にします。
エピソードインデックス 整数 データセット内のエピソード番号。
フレームインデックス 整数 エピソード内のフレーム番号 (0 から始まるインデックス)。
タイムスタンプ float64 エピソード開始からの経過秒数。

触覚ダウンサンプリング

グローブは 200 Hz でストリーミングします。 ロボットとカメラは通常 30 ~ 100 Hz で動作します。 レコーダは、最近傍タイムスタンプ マッチングを使用してフレームを調整します。 完全な 200 Hz 触覚ストリームを別個の配列として保存するには:

# Store full-rate tactile as a variable-length array per frame python -m roboticscenter.scripts.record \ --tactile-mode full_rate # default is "matched" (one per robot frame) # This produces a ragged column: observation.tactile_sequence # shape per row: float32[N, 64] where N varies (typically 6-7 frames at 200Hz/30fps)
品質

エピソードの品質チェックリスト

データセットに含める前に、これらの基準に照らして各エピソードを確認してください。 悪いエピソードが 1 つあると、政策訓練の質を低下させる偽の触覚パターンを引き起こす可能性があります。

  • 触覚ストリームは連続的 - フレームギャップなし 確認する フレーム.シーケンス スキップせずに増分します。 フレーム ドロップは、触覚コラムに繰り返しの値として表示されます。
  • 安静時のベースラインはゼロに近い (< 0.03) エピソードの開始時 (接触前)、最大圧力ノードは 0.03 未満である必要があります。 静止時にドリフトが 0.05 を超える場合は、グローブの再調整が必要であることを示します。
  • 接触イベントはビデオの目に見える把握と一致します で再生 --オーバーレイ-触覚。 圧力スパイク (最大ノード > 0.4) は、リスト カメラで目に見えるグリッパーの閉鎖と一致する必要があります。
  • 接触フェーズ中の把握領域は一貫しています 把握領域 各把握中に 1 つまたは 2 つの領域で安定する必要があります (例: 「ヤシ」 + "索引")。 急速に変化する領域は、グローブの位置ずれまたはノイズのある信号を示します。
  • ロボットの状態に対してグローブの遅延が 20 ミリ秒未満 触覚イベントの開始とグリッパーの速度スパイクを比較します。 遅延が 20 ミリ秒を超える場合は、USB ハブの混雑を示唆しています。グローブをホストの USB ポートに直接接続してください。
  • 言語指導は実証された課題と一致する 言語条件付きデータセットの場合、エピソードの開始時に入力された指示が、オペレーターが実際にデモンストレーションした内容を正確に説明していることを確認してください。
  • ロボットの動きにケーブルが干渉しない 1.5 m の USB ケーブルは、オペレータの手の動きを制限したり、エピソード中に手袋を引っ張ったりしてはなりません。 前腕にケーブル管理クリップを使用します。
政策研修

触覚観察トレーニング

触覚入力を使用するポリシーでは、通常、視覚のみのベースラインと比較して、接触に敏感なタスク (壊れやすい物の取り扱い、ペグの挿入、布の折り畳み) で 15 ~ 30% の改善が見られます。

# ACT policy with tactile observations (SVRC fork adds tactile encoder) python -m lerobot.scripts.train \ --dataset-repo-id $HUGGGINGFACE_USER/orca_grasp_tactile \ --政策法 \ --policy.observation_keys \ "観察.画像.手首" \ "観察.画像.オーバーヘッド" \ "観察.状態" \ "observation.hand_state" \ "観察.触圧" \ --output-dir 出力/act_tactile # The tactile encoder maps float32[64] → latent via a small MLP # No special architecture changes required for ACT or Diffusion Policy
# Diffusion Policy with tactile (identical --observation_keys, different policy flag) python -m lerobot.scripts.train \ --dataset-repo-id $HUGGGINGFACE_USER/orca_grasp_tactile \ -- ポリシーの普及 \ --policy.observation_keys \ "観察.画像.手首" \ "観察.状態" \ "観察.触圧" \ --output-dir 出力/diffusion_tactile
ヒント: 評価時に触覚を除去する 合格 観察.触覚圧力 = ゼロ(64) 推論中に、ポリシーが触覚と視覚にどの程度依存しているかを測定します。 これにより、タスクに触覚が必要かどうか、それとも視覚で十分かどうかが識別されます。