ソフトウェアとドライバーのセットアップ
Paxini SDK をインストールし、Python で圧力データをストリーミングし、接触ヒートマップを視覚化し、オプションの ROS2 統合を追加し、完全なデータ収集パイプラインのためにロボット アームと同期します。
Paxini SDK をインストールする
Paxini Gen3 は USB HID 経由で通信します。カーネル モジュールやベンダー ドライバーは必要ありません。 Python SDK は、低レベルの HID プロトコルをラップし、クリーンなストリーミング API を公開します。
インストールを確認します。
センサーの検出
Gen3 センサーを USB-C 経由でコンピュータに接続します。 SDK のデバイス検出ユーティリティを使用して、デバイスが認識されていることを確認します。
マルチセンサー設定の場合 (例: USB ハブ上の 5 本の指):
sudo python -m paxini.install_udev 一度ルールをインストールしてから、センサーを取り外して再度接続します。
Python ストリーミング API
コア API はコールバックベースのストリームです。 各フレームは、 触覚フレーム 全圧力配列とメタデータを含むオブジェクト。
すべてのパブリック API メソッド:
| メソッド/プロパティ | 説明 | 返品 |
|---|---|---|
| センサー.スタート() | ストリーミングを開始します。 ノンブロッキング | なし |
| センサー.ストップ() | ストリームをきれいに停止する | なし |
| センサー.ストリーム() | 設定された Hz で TactileFrame オブジェクトを生成するジェネレーター | ジェネレーター[TactileFrame] |
| センサー.最新() | ブロックせずに最新のフレームを返します。 | 触覚フレーム |
| センサー.set_rate(hz) | サンプルレートの設定 (USB-C の場合は 50 ~ 500 Hz、BLE の場合は 50 ~ 200 Hz) | なし |
| センサー.キャリブレーション() | 現在の静止荷重に対するゼロオフセット校正 | なし |
| センサー.シリアル | デバイスのシリアル番号文字列 | str |
| センサーのバリアント | 「指先」 | 「指パッド」 | 「ヤシ」 | str |
触覚データフォーマット
それぞれ 触覚フレーム 含まれるもの:
| 分野 | タイプ | 説明 |
|---|---|---|
| フレーム.タイムスタンプ_ns | 整数 | ナノ秒タイムスタンプ (単調、ホストクロック) |
| フレーム.圧力マップ | np.ndarray (H, W) float32 | タクセルあたりの圧力 (kPa)。 形状はバリエーションによって異なります。指先は 8×8、手のひらは 16×12 です。 |
| フレーム.コンタクトマスク | np.ndarray (H, W) ブール値 | 圧力が接触閾値を超えた場合に True (デフォルト: 5 kPa) |
| フレーム.接触面積_mm2 | フロート | 活性タクセル面積の合計 (mm²) |
| フレーム.total_force_n | フロート | すべてのタクセルにわたる統合垂直抗力 (ニュートン単位) |
| フレーム.コンタクトセントロイド | (フロート、フロート) | (行、列) タクセル座標における接触領域の重心 |
| フレーム.in_contact | ブール | total_force_n が接触しきい値を超えた場合は True (デフォルト: 0.05 N) |
| フレームシーケンス | 整数 | 単調増加するフレームシーケンス番号 |
ライブヒートマップ視覚化
SDK には、すぐに実行できるライブ ビジュアライザーが同梱されています。 コマンドラインから直接実行します。
または、次のコマンドを使用して独自のスクリプトに埋め込みます。 paxini.viz モジュール:
ROS2インターフェース
ROS2 ブリッジは、 センサーメッセージ/画像 (圧力マップ) とカスタム paxini_msgs/TactileFrame センサーごとのトピック。 ROS2 Humble または Jazzy が必要です。
マルチセンサー設定の場合、各デバイスはシリアル番号で発行されます。 標準の ROS2 再マッピングを使用して、起動ファイル内のトピックを再マッピングできます。
ロボットアームの統合
Paxini データをロボット アームの関節状態と同期するには、 paxini.sync モジュール。 すべてのセンサー フレームに共有クロックに対してタイムスタンプを付け、同期された (arm_state、tactile_frame) ペアを生成するブロッキング API を提供します。
MultiSourceSync このクラスは、アームとセンサーのレートが異なる場合に補間を処理します。
トップ 3 の問題
センサーが検出されていません。 順番に確認してください: (1) 別の USB-C ケーブルを試します。一部のケーブルは充電専用で、データを伝送できません。 (2) Linux の場合は、次を実行します。 sudo python -m paxini.install_udev 次にセンサーを抜き差しします。 (3) センサー LED が点灯 (点滅していない) ことを確認します。点滅はファームウェア更新モードであることを意味します。 終了するには、リセットボタンを 5 秒間押し続けます。
センサーの校正が必要か、しきい値の設定が高すぎます。 走る sensor.calibrate() センサーがアンロードされた状態(接触なし)。 問題が解決しない場合は、センサーの種類がマウントと一致していることを確認してください。指先に取り付けられた手のひらセンサーは、タクセル領域が大きいため、非常に低い圧力値を示します。 ファームウェアのバージョン 1.2+ も確認してください。 python -m paxini.discover.
アーム インターフェイスのクロックとセンサーのタイムスタンプが、 max_dt_ms。 これは通常、アーム SDK が古いジョイント状態 (たとえば、より低いレートでバッファリングされた状態) を返すことが原因で発生します。 増加 max_dt_ms 最初のテストとして 10.0 に設定し、アーム状態のリフレッシュ レートが予想よりも低い理由を調査します。 USB アームの場合は、USB ポーリング レートが電源管理によって抑制されていないことを確認します (sudo powertop Linux の場合)。
まだ行き詰まっていますか? に投稿してください フォーラムの質問スレッド お使いの OS、SDK バージョン (paxini.__version__)、および正確なエラー出力。