Zurück zu Learn

RC G1 Tactile Glove <unk> Linux Setup

Verwenden Sie die RC G1 Tactile Glove auf Ubuntu, Debian oder einem modernen Linux. Die GUI des Anbieters ist nur Windows/macOS.

Die GUI-Verbindung ist nur für Windows und macOS verfügbar. Auf Linux spricht man direkt über USB-Serie mit dem Handschuh, indem man ein dokumentiertes binäres Protokoll verwendet, ohne proprietäre Treiber erforderlich zu sein, da das CH340-Modul vom in-Kernel T17-Treiber unterstützt wird, der in jeder modernen Distribution geliefert wird. Dieser Leitfaden gibt Ihnen einen 60-Zeilen-Python-Leser, der 162 Kanaldruck plus 6-Achsen-IMU bei 100 Hz, plus Udev-Regeln und einen Systemd-Service für Produktionsimplementationen streamt.

Berührungsempfindung Gesamtzeit: ca. 45 Minuten Schwierigkeiten: Zwischenzeit aktualisiert Mai 2026

** getestet auf:** Ubuntu 22.04, Ubuntu 24.04, Debian 12, Fedora 40. Kernel 5.4 oder neuer hat den T18 Treiber eingebaut kein DKMS erforderlich.

Was Sie erreichen werden

Am Ende dieses Leitfaden haben Sie eine funktionierende Linux-Pipeline: Die Handschuh strömt über USB-Serie oder Bluetooth in ein stabiles T19-Gerät, ein Python-Prozess dekodiert das Zwei-Packet-Frame-Protokoll bei 100 Hz und eine Systemd-Einheit hält es über Reboots laufen.

Voraussetzungen

  • Hardware: RC G1 Touch Glove, Datenübernahmemodul (geladen), USB-A Bluetooth-Dongle or USB-A zu USB-C-Kabel.
  • OS: jede Linux-Distribution auf Kernel 5.4 oder neuerer. Dieser Leitfaden ist gegen Ubuntu 22.04 / 24.04, Debian 12 und Fedora 40 geschrieben.
  • Fähigkeiten: Komfortabel mit der Schale, T20, und kurzes Python lesen.

Die Schritte

  1. Bestätigen Sie, dass der Kernel-Treiber vorhanden ist

Moderne Linux-Kernel (5.4+) bundeln T21 für den CH340-USB-Seriechip, der vom Datenakquisitionsmodul verwendet wird. Stecken Sie den USB-A Bluetooth-Dongle oder das USB-A-USB-C-Serie-Kabel ins Host und laufen:

```bash
dmesg | tail -20
```

Sie sollten eine Zeile sehen wie:

```bash
[ 1234.567890] usb 1-2: ch341-uart converter now attached to ttyUSB0
```

Wenn Sie es nicht sehen, installieren Sie das zusätzliche Modulpaket:

```bash
# Ubuntu / Debian
sudo apt install -y linux-modules-extra-$(uname -r)

# Fedora
sudo dnf install kernel-modules-extra
```

Dann trennen Sie das USB-Chip ab, wieder anlegen und überprüfen Sie T22. Der CH340 ist der am weitesten verbreitete USB-Seriechip auf dem Planeten wenn es nicht zählt, vermutet ein schlechtes Kabel, bevor Sie Ihren Kernel vermuten.

  1. Fügen Sie sich zur Dialoggruppe hinzu

Auf Debian und Ubuntu gehört das Seriengerät T23. Sie müssen der Gruppe beitreten:

```bash
sudo usermod -aG dialout $USER
```

Dann log out und log back in, oder laufen T24 in Ihrem aktuellen Shell. Ohne dies, versagt jeder Benutzer-Raum Leser mit:

```bash
serial.serialutil.SerialException: [Errno 13] Permission denied: '/dev/ttyUSB0'
```

Auf Fedora ist die gleichwertige Gruppe T25; auf Arch ist sie T26. Überprüfen Sie mit T27.

  1. Installieren Sie eine deterministische Udev-Regel (optional, aber empfohlen)

Ohne eine udev-Regel zugeordnet der Kernel T28 auf einer ersten Personbasis, was schwach ist, wenn mehrere Handschuhe angeschlossen sind oder wenn der Dongle zu einem anderen USB-Port wechselt.

```bash
sudo tee /etc/udev/rules.d/99-rc-g1-glove.rules >/dev/null <<'EOF'
# RC G1 Tactile Glove — CH340 serial (WCH 1a86:7523)
SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0660", GROUP="dialout", SYMLINK+="rc-g1-glove-%n"
EOF
```

Umladen Sie die Regeln:

```bash
sudo udevadm control --reload-rules && sudo udevadm trigger
```

Jetzt erscheint Ihr Gerät als T29 unabhängig von der Steckdosenordnung. Mehrere Handschuhe erhalten T30, T31, T32 basierend auf der Aufzählungsfolge, aber jede behält ihren Symlink für die Lebensdauer des Steckdosens.

  1. Paare über Bluetooth mit BlueZ (optional Path)

Wenn Sie lieber den drahtlosen Dongle als ein USB-Kabel verwenden möchten, schließen Sie den Dongle in er stellt sich als CH340-Serieport dar, nicht als HID-Gerät dann verwenden Sie den AT-Befehl der Firmware auf diesem Port bei T33 baud:

```bash
sudo apt install -y screen
screen /dev/rc-g1-glove-0 921600
```

Innerhalb der T34-Sitzung geben Sie die AT-Befehle ein:

```bash
AT+SCAN=1
# → +SCAN=2,3C8A1F2E9A36,-1,23,JQ-RH_3C:8A:1F:2E:9A:36   ← copy this MAC

AT+CONN=3C8A1F2E9A36
# → OK   (and then binary sensor data starts streaming — exit screen with Ctrl-A k)
```

Die Firmware gibt eine von T35 (links), T36 (rechts), T37 (links), T38 (rechts) oder T39 (ganzkörperlich) an, je nachdem, welches Modul Sie paaren. Passt das Suffix zu Ihrem physischen Gerät. Sobald Sie es paaren, geben alle nachfolgenden Lesungen auf dem Serienport des Dongles Ihnen Live-Sensorrahmen.

** BlueZ Hinweis:** Sie brauchen nicht T40 oder den BlueZ-Stack des Hostes das Dongle behandelt BLE in Firmware und zeigt einen transparenten Serienlink.

  1. Installieren Sie Python-Abhängigkeiten

Die Installation funktioniert im ganzen System, aber ein virtueller V hält die Dinge ordentlich:

```bash
python3 -m venv ~/.venv/rc-g1
source ~/.venv/rc-g1/bin/activate
pip install pyserial numpy
```

Wenn Sie eine Systeminstallation bevorzugen:

```bash
python3 -m pip install --user pyserial numpy
```

Python 3.9 oder neuer ist erforderlich. T41 stellt die plattformübergreifende Serien-Schicht bereit, T42 wird für den Druckrahmenpuffer verwendet.

  1. Schreiben Sie dem Leser

Erstellen Sie T43 mit folgenden Inhalten. Dies ist die vollständige Datei etwa 60 Zeilen und es ist das nützlichste auf dieser Seite. Lesen Sie zuerst den Dokumentstring; das Rahmenformat ist der Teil, den die meisten Leute falsch machen.

```python
#!/usr/bin/env python3
"""Minimal serial reader for the RC G1 Tactile Glove.

Frame format (per vendor protocol spec, v1.2):
    [Header 4B: 0xAA 0x55 0x03 0x99]
    [Packet seq 1B: 0x01 or 0x02]
    [Sensor type 1B: 0x01=LH, 0x02=RH, 0x03=LF, 0x04=RF, 0x05=WB]
    [Payload]
        seq 0x01: 128 bytes  — first 128 of 256 raw pressure values (8-bit ADC each)
        seq 0x02: 144 bytes  — last 128 pressure values + 16 bytes IMU (4 floats: w, x, y, z quaternion)

Two packets together = one full frame (256 pressure points, of which 162 are physically wired
to fabric sensors; the remaining slots read ~0 and can be masked). Wired streaming = 100 Hz,
Bluetooth = 30 Hz.
"""
import argparse, struct, sys, time
import serial
import numpy as np

HEADER = b"\xAA\x55\x03\x99"
SENSOR_NAMES = {0x01: "LH", 0x02: "RH", 0x03: "LF", 0x04: "RF", 0x05: "WB"}

def read_frame(port: serial.Serial):
    # Sync to header
    buf = b""
    while True:
        buf += port.read(1)
        if buf.endswith(HEADER):
            break
        if len(buf) > 4096:
            raise IOError("lost sync — no header in 4 KB")
    seq, sensor = port.read(1), port.read(1)
    if not seq or not sensor:
        raise IOError("short read on header trailer")
    seq, sensor = seq[0], sensor[0]
    payload_len = 128 if seq == 0x01 else 144
    payload = port.read(payload_len)
    if len(payload) != payload_len:
        raise IOError(f"short payload: got {len(payload)}/{payload_len}")
    return seq, sensor, payload

def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--port", default="/dev/rc-g1-glove-0")
    ap.add_argument("--baud", type=int, default=921600)
    args = ap.parse_args()

    with serial.Serial(args.port, args.baud, timeout=1) as port:
        print(f"Reading from {args.port} @ {args.baud}…", file=sys.stderr)
        half = None
        t0, n = time.time(), 0
        while True:
            seq, sensor, payload = read_frame(port)
            if seq == 0x01:
                half = payload  # stash first half
                continue
            if seq != 0x02 or half is None:
                continue
            # Combine the two halves
            raw = np.frombuffer(half + payload[:128], dtype=np.uint8)  # 256 pressure pts
            imu = struct.unpack("<ffff", payload[128:144])             # quaternion w,x,y,z
            n += 1
            if n % 100 == 0:
                hz = n / (time.time() - t0)
                side = SENSOR_NAMES.get(sensor, hex(sensor))
                peak = int(raw.max())
                print(f"[{side}] frames={n} rate={hz:5.1f} Hz peak={peak:3d}/255 quat={imu}",
                      file=sys.stderr)

if __name__ == "__main__":
    main()
```
  • Lassen Sie es laufen .

    python3 reader.py --port /dev/rc-g1-glove-0
    

Sie sollten alle 100 Bilder eine Statuslinie sehen, die die Probenrate zeigt. Drücken Sie einen Fingerspitz und beobachten Sie, wie T44 den maximalen Druckwert über den 256-Kanal-Buffer steigt.

  1. (optional) Laufen Sie als Systemd-Dienst

Für kopflose Einsätze Datenerhebungszellen, Laboraten oder Roboter im Feld Wickeln Sie den Leser in eine vorgestellte Systemd-Einheit ein, damit er beim Absturz automatisch wieder aufnimmt und beim Boot startet.

```bash
[Unit]
Description=RC G1 Tactile Glove reader (%i)
After=local-fs.target

[Service]
Type=simple
User=robotics
ExecStart=/home/robotics/.venv/rc-g1/bin/python /home/robotics/rc-g1-glove/reader.py --port /dev/%i
Restart=on-failure
RestartSec=2

[Install]
WantedBy=multi-user.target
```

Aktivieren und starten:

```bash
sudo systemctl daemon-reload
sudo systemctl enable --now rc-g1-reader@rc-g1-glove-0.service
```

Folgen Sie den Logs:

```bash
journalctl -u rc-g1-reader@rc-g1-glove-0.service -f
```

Die Vorlage T46 ermöglicht es Ihnen, mehrere Instanzen Seite an Seite zu laufen z.B. T47 und T48 für eine Doppelhand-Rig ohne die Einheitsdatei zu kopieren.

  1. Streamen Sie in die RC-Datenplattform

Der Leser druckt den Status auf stderr und schreibt (in der Produktion) die Frames auf stdout in jedem Format, das Ihnen gefällt.

```bash
pip install centeros-cli
centeros auth login
python reader.py --port /dev/rc-g1-glove-0 | centeros stream --hardware rc-g1-tactile-glove --operator-id <you>
```

Die CLI verwaltet die Authentifizierung, erneute Versuche und den gefüllten Upload auf das WebSocket der Plattform. Siehe den [SDK quickstart]T70) für die vollständige Referenz, einschließlich der Anbringung von Episodendaten (Aufgabenamen, Scenelabels, Handseite) auf derselben Befehlszeile.

Rammlayout und ROS-2-Beispiele

Der obige Leser erzeugt pro vollen Rahmen ein flaches 256-Element T49-Array von Druckwerten plus ein 4-Float-Quaternion. Die 256 Slots entsprechen einem 16x16-Gitter im internen Adressschema der Firmware, von denen 162 physisch mit Stoffsensoren auf der Handfläche und den Fingern verbunden sind; die restlichen Slots liest sich ungefähr auf Null und können bei der Erstellung abgeleiteter Funktionen maskiert werden. Die Kanal-zu-Finger-Mapping-Tabelle befindet sich auf der [Datenprotokoll-Referenzseite]T71) Drucken Sie sie einmal aus und banden Sie sie neben Ihrer Bank.

Für die ROS 2-Integration wickeln Sie T50 in einen T51, der eine T52 pro Hand bei 100 Hz veröffentlicht, plus eine T53 für das Quaternion. Wir veröffentlichen bald einen Referenz-Treiber unter github.com/robotics-center/rc-g1-ros2-driver Das Muster ist einfach: Spüln Sie einen Hintergrund-Thread, der die Leseschleife ausführt, schieben Sie die Frames in eine Thread-sichere Schlange und lassen Sie einen 100 Hz ROS-Timer die Schlange ablaufen und veröffentlichen.

** Durchput-Sensity-Check:** 100 Hz x (256 Byte Druck + 16 Byte IMU + 12 Byte Rahmen) = ~28 KB/s pro Hand. Die CH340 bei 921600 Baud hat ~115 KB/s nutzbare Bandbreite, so dass kabelgebundene Ein-Hand-Streaming verwendet etwa ein Viertel der Verbindung.

Fehlerbehebung

T54 auf T55: Sie haben Schritt 2 (T56 Gruppe) vergessen.

Kein T58 erscheint im Plug-in: das T59 Modul ist nicht geladen. Laufen Sie T60 zu bestätigen. Wenn die Modprobe mit "Modul nicht gefunden" versagt, installieren Sie T61 (Ubuntu) oder T62 (Fedora) und versuchen Sie es erneut.

T63: Das Datenübernahme-Modul ging in 1 Minuten Standby, um die Batterie zu sparen.

Reader läuft bei 50 Hz anstelle von 100 Hz: Sie sind auf Bluetooth (30 Hz nominell; einige Hosts messen ~50 Hz einschließlich erneuter Versuche).

Frames decode garbage / IMU quaternion ist NaN: überprüfen Sie, dass der baud T64 ist. Die Firmware unterstützt auch T65 baud für den Hochgeschwindigkeits-Kabelmodus; setzen Sie den Leser auf T66, wenn Sie das Modul entsprechend konfiguriert haben. Der Standard-Fabrik-Boud ist T67.

Zwei Handschuhe verbunden, nur ein Stream: Prüfen Sie, ob die udev-Regel aus Schritt 3 zwei Symlinks (T68) erzeugt. Wenn nur eines erscheint, ist das zweite Modul auf einer anderen USB-Anbieter-/Produkt-ID Laufen Sie T69 und fügen Sie eine zweite Regel mit den passenden IDs hinzu.

Was soll ich jetzt tun?

Wenn eine Hand zuverlässig strömt, sind die nächsten hochwertigen Schritte: (1) Kalibrieren Sie die Druckbasis pro Kanal, indem Sie 5 Sekunden einer leeren Hand aufzeichnen und das Mittel subtrahieren, (2) bringen Sie die zweite Hand auf und überprüfen Sie beide gleichzeitig in die Plattform strömt und (3) erfassen Sie einen markierten Datensatz mit dem Episodenmodus des CLI des Centeros hier beginnt der Handschuh selbst zu bezahlen.

Verwandte Tutorials und Ressourcen