RC G1タクチルグローブ <unk> Linux セットアップ
Ubuntu,Debian,または最新のLinuxでRC G1タクチルグローブを使用します.ベンダーGUIはWindows/macOSのみです.このガイドは udevルール,文書化されたシリアルプロトコル,60行パイトンリーダーを通行します.
関連GUIはWindowsとmacOSのみで提供されます.Linuxでは,ドキュメント化された二重プロトコルを使用し,USBシリーズで直接手袋に話しかけます. 独自のドライバは必要ありません. CH340モジュールは,すべての近代ディストロに搭載されている内核のT17 ドライバによってサポートされています. このガイドでは162チャンネル圧力を166軸IMUを100Hzでストリームし,UdevルールとシステムDサービスを提供します
タクシールセンサー 合計時間:約45分 困難:中間更新 2026年5月
** Ubuntu 22.04, Ubuntu 24.04, Debian 12, Fedora 40 でテストされました. Kernel 5.4 またはそれ以降は,
達成する事
このガイドの終わりまでに Linux のパイプラインが機能する. USB シリーズまたは Bluetooth を介して手袋が安定した
必須条件
- ハードウェア: RC G1 タクチルグローブ,データ取得モジュール (充電),USB-A ブルーツドングル _または_USB-AからUSB-Cのワイヤ付きシリアルケーブル.
- OS: カーネル5.4またはそれ以降のLinuxディストリビューション.このガイドはUbuntu 22.04 / 24.04,Debian 12およびFedora 40に対して書かれています.
- シェルで快適で
T20 短文字 Pythonを読み取れる
ステップ
カーネルドライバが存在していることを確認する
現代のLinuxカーネル (5.4+) は,データ取得モジュールで使用されるCH340USBシリアルチップの Bundle
```bash
dmesg | tail -20
```
こんな文章を見ればいいでしょう
```bash
[ 1234.567890] usb 1-2: ch341-uart converter now attached to ttyUSB0
```
追加モジュールパッケージをインストールする
```bash
# Ubuntu / Debian
sudo apt install -y linux-modules-extra-$(uname -r)
# Fedora
sudo dnf install kernel-modules-extra
```
接続を切り開き 再接続して
自分をディオロググループに追加する
DebianとUbuntuでは,シリアルデバイスは
```bash
sudo usermod -aG dialout $USER
```
シャッフルで,このユーザスペースリーダーが失敗します.
```bash
serial.serialutil.SerialException: [Errno 13] Permission denied: '/dev/ttyUSB0'
```
Fedoraでは同等グループが
- 決定的な udev ルールをインストールする (オプションだが推奨)
udev ルールなしでは,カーネルは初対子で
```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
```
規則を再加上する
```bash
sudo udevadm control --reload-rules && sudo udevadm trigger
```
プラグインの順序に関係なく,複数の手袋は,数値順序に基づいて,T30
BlueZ (オプションパス) を使用してBluetoothでペアする
USBケーブルよりも無線ドングルを使用する場合は,ドングルを
```bash
sudo apt install -y screen
screen /dev/rc-g1-glove-0 921600
```
```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)
```
固有ソフトウェアは,どのモジュールがペアリングされているかによって,T35
BlueZ注: 必要なのは
- Python依存をインストールする
システム全体でインストールができますが 仮想ナブは 整理を保ちます
```bash
python3 -m venv ~/.venv/rc-g1
source ~/.venv/rc-g1/bin/activate
pip install pyserial numpy
```
システムインストールを好む場合:
```bash
python3 -m pip install --user pyserial numpy
```
Python 3.9またはそれ以降は必要である.
- 読者に書け
```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()
```
実行する
```bash
python3 reader.py --port /dev/rc-g1-glove-0
```
検定速率を示す状態線を 100 枚のフレームごとに表示する必要があります 指を押して
(オプション) システムDサービスとして実行する
型号のない部署では,データ収集セル,ラボベンチ,またはフィールドのロボットに 読み手をテンプレートされたシステムdユニットに包んで,クラッシュ時に自動復元し,起動を開始します.次のものを
```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
```
起動する
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now rc-g1-reader@rc-g1-glove-0.service
```
記録を追いかける
```bash
journalctl -u rc-g1-reader@rc-g1-glove-0.service -f
```
- ストリームをRCデータプラットフォームに
読み手は,スタータスをstderrにプリントし, (制作中) は,任意のフォーマットでフレームをstdoutに書き込みます.RC Data Platformの摂取への最も簡単な道は,RCSV CLIです:
```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>
```
CLIは,プラットフォームのインゲスト WebSocket に認証,再試し,断片アップルを処理します.同じコマンドラインにエピソードメタデータを (タスク名,シーンラベル,手側) 添付する方法を含む完全な参照については,SDKの速スタート (SDK quickstart) を参照してください.
フレームレイアウトとROS 2の例
上記の読者は,全フレームごとに,圧力の値の平坦256要素
ROS 2 統合のために, 100 Hz で手当たり
** 経路の健全性チェック:** 100 Hz x (256バイト圧力 + 16バイト IMU + 12バイト枠組) = ~28 KB/s/手. 921600 baudのCH340は使用可能な帯域幅 ~115 KB/sを持っています.
トラブルシューティング
プラグインでは
**100Hzの代わりに50Hzで読みます:**あなたはブルートゥース (30Hz名義;一部のホストはリトープを含む~50Hzを測定します.
Frames decode garbage / IMU quaternion is NaN: 確認ボードは
2つの手袋が接続され,ただ一つのストリーム: ステップ3からの udevルールが2つのシンボルリンク (
次にどうする?
単一の手が信頼性のあるストリーミングを行うと,次の高価値のステップは: (1) 怠け手5秒を記録して平均を引いて1チャンネルあたり圧力ベースラインを校正する, (2) 秒手を挙げて,両方のストリーミングを同時にプラットフォームに検証する,および (3) センターのCLIのエピソードモードを使用してラベル付きのデータセットを記録する.







