触覚デモンストレーションの記録

触覚データは、ほとんどのロボット学習データセットに欠けているモダリティです。 このページでは、なぜそれが重要なのか、同期した触覚 + 腕 + カメラ ストリームを記録する方法、拡張データセット形式、触覚入力を使用するポリシーをトレーニングする方法について説明します。

なぜ触覚データがロボットの学習を改善するのか

ビジョンは方針を伝える どこ グリッパーは。 固有受容が教えてくれる どこまで 指は閉じています。 どちらも言わない 握りが安定しているかどうか。 視覚 + 関節データのみでトレーニングされたポリシーは、オブジェクトの動き、腕の力の制限、ロールアウト中の試行錯誤から間接的に把握の質を推測することを学習する必要があります。 触覚センシングを追加すると、直接接触状態の監視が可能になります。ポリシーは、すべてのデモンストレーションの各タイムステップで、確実な把握と滑りやすい把握を区別するグラウンドトゥルース信号を受信します。 これは、視覚的な把握品質の推定が信頼できない、変形可能なオブジェクト、透明なオブジェクト、またはさまざまなサイズのオブジェクトに特に影響を与えます。

同期録音のためのハードウェア設定

完全なマルチモーダル レコーディング リグには、共通のクロックに同期された 3 つのハードウェア レイヤーが必要です。

  1. ロボットアーム — USB またはイーサネット経由で関節の位置、速度、エンドエフェクターのポーズを 100 ~ 500 Hz で提供します。 ハードウェアスタンプ付きジョイント状態を取得するには、システム時間ではなく、arm SDK のタイムスタンプ API を使用します。
  2. Paxini Gen3 センサー — ロボットの手首に取り付けられた電源付きの USB ハブに接続されます。 各フレームは、USB 割り込み時にホスト PC によってタイムスタンプが付けられます (ナノ秒の分解能、ジッター <0.5 ms)。
  3. カメラ — 手首に取り付けたカメラ 1 台 (オプション: オーバーヘッド カメラ 1 台)。 ハードウェア トリガー同期を備えた USB カメラまたは GigE カメラ、または遅延が既知のソフトウェア トリガー カメラを使用します。 30 ~ 60 fps で録画します。

3 つのソースはすべて、同じ単調ホスト クロックを使用してタイムスタンプを書き込みます。 プラットフォーム SDK マルチソースレコーダー タイムスタンプ補間を使用して、後処理時にフレームを調整します。

# Complete synchronized recording session paxini.sync から MultiSourceRecorder をインポート レコーダー = マルチソースレコーダー( arm=arm_interface、 センサー=paxini.Sensor()、 カメラ=カメラ_インターフェース、 Output_dir="./demo_recordings/", エピソード_プレフィックス = "場所を把握" ) レコーダー.start_episode() # ... perform the manipulation demo ... レコーダー.end_episode() # saves episode_000.hdf5

データセット形式 - 拡張 LeRobot スキーマ

Paxini Gen3 データ収集パイプラインは、追加の触覚チャネルを使用して標準の LeRobot HDF5 データセット形式を拡張します。 既存の LeRobot ツール (データ読み込み、視覚化、ポリシー トレーニング) は完全な互換性を維持します。新しいキーは、それらを使用しないパイプラインでは単に無視されます。

HDF5キー ソース
観察・状態(た、7)アーム関節位置+グリッパー幅
観察・画像・手首(た、た、わ、3)リストカメラ(uint8 RGB)
アクション(た、7)目標ジョイント位置 + グリッパーコマンド
観察.触覚.圧力マップ(た、8、8)Paxini Gen3 圧力アレイ (kPa、float32)
観察.触覚.合計_力_n(て、)フレームごとの垂直抗力の合計 (ニュートン)
観察.触覚.in_contact(て、)フレームごとのブール接触フラグ
観察.触覚.接触中心(た、2)フレームごとの接触重心 (行、列)
メタ/タイムスタンプ_ns(て、)すべてのチャネルのナノ秒タイムスタンプ

新しい触覚キーが強調表示されます。 他のすべてのキーは標準の LeRobot スキーマに従います。

触覚データの品質チェックリスト

各セッションの前にベースラインキャリブレーションを実行します 電話 sensor.calibrate() グリッパーを開いてアンロードした状態。 これにより、指の接触やケーブルのストレスがゼロになります。 腕の位置を大幅に変更した場合は再調整してください。
接触イベントがビデオと一致していることを確認する 完全なデータセットを収集する前に、データ ビジュアライザーで 5 つのエピソードを確認してください。 の in_contact 立ち上がりエッジは、カメラ フィード内で目に見える指先とオブジェクトの接触の瞬間と一致する必要があります。 遅延が 20 ミリ秒を超える場合は、タイムスタンプの調整に問題があることを示します。
デモンストレーションで力の全範囲をカバーする 軽いグリップ、中程度のグリップ、しっかりとしたグリップ レベルでのグリップを記録することを目指します。 すべてのデモで最大グリッパー力を使用する場合、ポリシーは接触圧力を調整することを学習しません。 エピソードごとにオブジェクトの重量とコンプライアンスを変更します。
スリップ イベントにフラグを立ててトレーニング データから除外する オブジェクトが掴みの途中で滑ってしまうが、デモが継続して成功するというエピソードには、矛盾する監視信号が含まれています。 SDKを使用する paxini.annotate.flag_slip_events(episode) これらをレビュー用に自動的にマークします。
センサーの飽和をチェックする もし pressure_map.max() どのエピソードでも 600 kPa に達すると、センサーは飽和状態になります。 グリッパーの力を減らすか、パーム バージョン (タクセルあたりのピーク圧力を低くする) を使用して、より重いグリップを実現します。

触覚入力を使用した政策トレーニング

ACT または拡散ポリシーの観察モダリティとして触覚を追加するには、圧力マップまたは集約スカラー (total_force_n)。 圧力マップは完全な空間情報を提供しますが、センサーごとにフレームごとに 64 のフロートが追加されます。 スカラーは統合が容易であり、バイナリ把握の高品質タスクには十分です。

# ACT config snippet — add tactile to observation space 観察キー: - 観察.状態 # joint positions - 観察.画像.手首 # camera - 観察.触覚.合計_力_n # scalar - 観察.触覚.圧力マップ # optional: full map # Normalize tactile observations 触覚の正規化: total_force_n: {平均: 2.5、標準: 1.8} 圧力マップ: {平均: 12.0、標準: 45.0} # kPa statistics from your dataset

記録されたデータセットから正規化統計を計算し、視覚のみのベースラインに対して評価する方法を含む、完全なトレーニングのウォークスルーについては、 ラーニング パス ユニット 5.

器用な手のデータ収集戦略に関するより広範なコンテキストについては、 器用な手ガイド.