Juqiao タクタイル グローブ セットアップ ガイド

開梱からライブ圧力データとプラットフォーム統合までの完全なパス。 合計 30 分未満を計画してください。

1

手袋を着用して取得モジュールを接続します

Juqiao グローブは、手首にリボン ケーブル コネクタが付いた織布グローブとして出荷されます。 取得モジュールは、アナログからデジタルへの変換と USB 通信を処理する独立した小型 PCB エンクロージャです。

  • 手袋を着用してください 標準的な手袋と同様に、FPC コネクタは手首に配置されます。
  • リボン ケーブルを固定します。 グローブの手首コネクタからの FPC リボン ケーブルの位置を合わせて、取得モジュールのリボン レセプタクルにしっかりと押し込みます。 かすかなカチッという音は、シートが確実に固定されていることを示します。 ノードの読み取り値がゼロの場合は、リボンが完全に装着されていません。以下のトラブルシューティングを参照してください。
  • モジュールをマウントします。 遠隔操作中の手首の動きを妨げないように、取得モジュールをリスト ストラップまたは前腕マウントにクリップまたはベルクロで固定します。
  • USBを接続します: 付属の USB ケーブルを使用して、取得モジュールをホスト PC に接続します。
Linux および macOS ではドライバーは必要ありません。 取得モジュールは、USB CDC ACM シリアル デバイスとして表示されます。 Linux では次のように列挙されます。 /dev/ttyUSB0 または /dev/ttyACM0; macOS上では /dev/tty.usbserial-*。 Windows では、デバイスが COM ポートとして自動的に列挙されない場合は、付属の CP210x または CH340 ドライバーをインストールします。
2

Python SDK (pyserial) をインストールする

独自のベンダー SDK は必要ありません。 取得モジュールは、フレーム化されたバイナリ パケットを標準シリアル ポート経由でストリーミングします。 pyserial が唯一の依存関係です。

pyserial をインストールします。

pip install pyserial

シリアル ポートが表示されていることを確認します。

# Linux
ls /dev/ttyUSB* /dev/ttyACM*

# macOS
ls /dev/tty.usbserial-*

# Or use pyserial's port listing tool
python -m serial.tools.list_ports

ライブ ストリーミングを確認します (サニティ チェック):

# Replace /dev/ttyUSB0 with your port; 921600 is the default baud rate
python -m serial.tools.miniterm /dev/ttyUSB0 921600

取得モジュールの設定されたサンプル レートでバイナリ データのストリームが表示されるはずです。 端末が沈黙している場合は、USB 接続とモジュール LED を確認してください。サンプル レートで点滅しているはずです。

Linuxの権限の問題? Linux でアクセス許可拒否エラーが発生した場合は、ユーザーを dialout グループ化してログアウトし、再度ログインします。 sudo usermod -aG dialout $USER
3

Python フレーム リーダーを実行する

取得モジュールは、固定長のバイナリ フレームを送信します。 各フレームは 2 バイトの開始デリミタで始まります 0xAA 0x55、その後に 1 バイトのチャネル数 N、N × 2 バイトのビッグエンディアン 16 ビット圧力値、および 2 バイトの CRC16 チェックサムが続きます。 フレームの合計長 = 5 + 2N バイト。

基本的なフレーム リーダー — フレームごとの圧力値のリストを出力します。

import serial, struct, time

BAUD = 921600
PORT = "/dev/ttyUSB0"   # /dev/tty.usbserial-* on macOS, COMx on Windows
HEADER = b"\xaa\x55"

def read_frame(ser: serial.Serial, n_channels: int) -> list[int] | None:
    # Sync to frame header
    buf = ser.read(2)
    if buf != HEADER:
        ser.read_until(HEADER[-1:])
        return None
    raw = ser.read(1 + n_channels * 2 + 2)
    n = raw[0]
    if n != n_channels:
        return None
    pressures = list(struct.unpack_from(f">{n}H", raw, 1))
    # CRC check omitted for brevity — validate in production
    return pressures

with serial.Serial(PORT, BAUD, timeout=0.1) as ser:
    N = 64   # number of sensing nodes — confirm from spec doc
    while True:
        frame = read_frame(ser, N)
        if frame:
            print(frame)   # list of N 16-bit pressure values

手袋のさまざまな部分を握り、ノード値が増減することを確認します。 64 ノードすべてが応答する必要があります。 領域に応答がない場合は、グローブ コネクタとモジュールの両方にリボン ケーブルが固定されていることを再確認してください。

ハードウェアがありませんか? モックモードを使用します。 物理センサーを使用しないソフトウェア開発の場合は、有効な形式のフレームを出力するループバック デバイスまたはモック スクリプトを使用してシリアル ストリームをシミュレートします。 プラットフォーム ブリッジは、ソースに関係なく、同じ JSONL 形式を受け入れます。
4

ゼロ点校正

ファブリックセンサーは、温度変化や繰り返しの圧縮によるベースラインオフセットの影響を受けます。 正確な測定値を得るために、各セッションの開始時に調整してください。

  • 手袋を緩めます 圧力を加えずに平らな面に置きます。手を完全に動かさずリラックスした状態で保持できる場合を除き、校正中は着用しないでください。
  • Windows: Juqiao 構成ツールを開き、COM ポートを選択して、 接続するに移動し、 校正 → ゼロ。 すべてのノードのベースラインは、現在の静止値に設定されます。
  • Linux / macOS: V2.3 プロトコル ドキュメントに従ってソフトウェア ゼロ コマンドを送信するか、Python ブリッジ スクリプトでベースライン減算を適用します (静止時に 50 フレームをキャプチャし、チャネルごとの平均を減算します)。
# Simple software baseline subtraction (Linux/macOS alternative)
import serial, struct, numpy as np

BAUD, PORT, N = 921600, "/dev/ttyUSB0", 64
HEADER = b"\xaa\x55"

def read_frame(ser):
    ser.read_until(HEADER)
    raw = ser.read(1 + N * 2 + 2)
    return list(struct.unpack_from(f">{N}H", raw, 1))

with serial.Serial(PORT, BAUD, timeout=0.1) as ser:
    ser.reset_input_buffer()
    baseline = np.mean([read_frame(ser) for _ in range(50)], axis=0)
    print("Baseline captured. Starting calibrated stream...")
    while True:
        frame = read_frame(ser)
        if frame:
            calibrated = np.maximum(0, np.array(frame) - baseline)
            print(calibrated.astype(int).tolist())
グローブが温まったら再調整してください。 校正する前に、動作温度で 1 ~ 2 分間ウォームアップしてください。 長時間の録画セッション (30 分以上) の場合は、エピソードの間に新たなキャリブレーションを実行します。
5

プラットフォームの統合 — 恐れを知らないプラットフォーム

恐れを知らぬプラットフォーム platform.roboticscenter.ai Juqiao センサーを遠隔操作セッションの触覚ノードとしてサポートします。 圧力フレームは、ロボットの関節状態、カメラ ストリーム、その他のセンサー モダリティと並行して同期して記録されます。

登録シーケンス:

  • テレオペセッションを開始するには、 POST /api/teleop/sessions/create-sdkdevice_type: "juqiao_textile_skin".
  • プラットフォーム WebSocket を開きます。 /api/teleop/ws そして登録ハンドシェイクを送信します。 role: "operator", device_type: "tactile_sensor", capabilities: ["tactile", "pressure_array", "telemetry"].
  • 受信時 type: "ready"、シリアル リーダーからの JSONL テレメトリ フレームの転送を開始します。

プラットフォーム ブリッジの JSONL エミッター:

import serial, struct, time, json, sys

PORT = "/dev/ttyUSB0"
BAUD = 921600
N_CHANNELS = 64
HEADER = b"\xaa\x55"

def read_frame(ser):
    buf = ser.read_until(HEADER)
    if not buf.endswith(HEADER):
        return None
    raw = ser.read(1 + N_CHANNELS * 2 + 2)
    pressures = list(struct.unpack_from(f">{N_CHANNELS}H", raw, 1))
    return pressures

with serial.Serial(PORT, BAUD, timeout=0.05) as ser:
    while True:
        frame = read_frame(ser)
        if frame:
            record = {
                "ts": int(time.time() * 1000),
                "device": "juqiao_textile_skin",
                "variant": "high_frequency_v2.3",
                "pressures": frame,   # flat list, N_CHANNELS values
                "n_channels": N_CHANNELS
            }
            print(json.dumps(record), flush=True)  # JSONL for platform bridge

プラットフォーム WebSocket に送信されるテレメトリ フレーム形式:

{
  "type": "telemetry",
  "member_id": "juqiao-glove-right",
  "device": "juqiao_textile_skin",
  "variant": "high_frequency_v2.3",
  "pressures": [0, 512, 1024, ...],   // flat array, N_CHANNELS 16-bit values
  "n_channels": 64,
  "ts": 1743680400123                  // Unix millisecond timestamp
}

OpenArm または DK1 とのペアリング: 一般的な遠隔操作セットアップでは、3 つの別個のプロセスがホスト PC 上で実行され、それぞれが同じセッション ID で登録されます (ロボット アーム制御ブリッジ、Juqiao シリアル ブリッジ、手首ビューとシーン ビュー用のカメラ ブリッジ)。 プラットフォームは、 ts フィールドを作成し、デモンストレーションごとに 1 つのエピソードの JSONL ファイルをアーカイブします。 再生中、GloveWorkbench パネルは腕の関節の軌道に沿って触圧ヒートマップをレンダリングします。

両手セットアップ。 両手遠隔操作の場合は、別個のグローブ ノードを使用して 2 つのグローブ ノードを登録します。 member_id 値 — juqiao-glove-right そして juqiao-glove-left。 各グローブには独自の取得モジュールと USB 接続があります。 両方のグローブをティックごとに 1 つの JSON オブジェクトにバッチ処理して、200 Hz でのプラットフォーム メッセージ数を半減します。

セッションの作成、WebSocket ハンドシェイク、エピソードのダウンロードをカバーする完全な API リファレンスについては、 プラットフォーム SDK API リファレンス.

!

トラブルシューティング

  • Linux にはシリアル デバイスがありません: 走る sudo usermod -aG dialout $USER そしてログアウト/ログインします。 で確認してください lsusb モジュールが列挙するもの。 古いカーネルでは、 modprobe cdc_acm 必要になるかもしれません。
  • すべての圧力測定値はゼロです。 USB を取り外し、FPC リボンの両端 (グローブ コネクタとモジュール) を取り付け直し、再接続します。 モジュールの LED を確認します。設定されたサンプル レートで点滅するはずです。
  • アンロードされたノードでの大きなベースライン オフセット: セッションの前に室温でゼロ点校正を実行してください。 手袋をはめた後、1 ~ 2 分間安定させます。
  • フレーム同期エラー/データ化け: ボーレートが 921600 であることを確認します。オープン時にシリアル バッファをフラッシュします。 ser.reset_input_buffer()。 使用 read_until(HEADER) 起動時に固定長読み取りではなく再同期します。
  • センサー ノードの応答が遅い、または「粘着性」を感じます: セッションの前に、グローブを全可動域で数回ゆっくりと曲げます。 問題が解決しない場合は、ファイバーの疲労を示している可能性があります。交換については Juqiao Precision にお問い合わせください。
  • プラットフォーム ブリッジは 200 Hz でフレームをドロップします。 シングルグローブセッションではサンプルレートを 100 Hz に下げます。 両手セットアップの場合は、両方のグローブをティックごとに 1 つの JSON オブジェクトにまとめて、メッセージ数を半分にします。
まだ行き詰まっていますか? 接触 SVRCのサポート OS と Python のバージョン、出力を含めます。 lsusb -v (Linux) またはデバイス マネージャー (Windows)、仕様バージョン (V2.3 または V1.0 バイリンガル)、および症状の簡単な説明。

セットアップは完了しましたか?

完全な仕様を確認するか、プラットフォームを開いてエピソードの録画を開始してください。