RC G1 터틸 글래브 <unk> 리눅스 설정
우부투, 데비안 또는 현대 리눅스에서 RC G1 터틸 글래브를 사용하십시오. 공급자 GUI는 윈도우/macOS에서만 있습니다. 이 가이드는 udev 규칙, 문서화된 일련 프로토콜 및 60 라인 파이썬 리더를 통해 진행됩니다.
이 후속 GUI는 윈도우와 맥오스에서만 제공됩니다. 리눅스에서 문서화된 바이너리 프로토콜을 사용하여 USB-시리즈를 통해 직접 장갑과 대화합니다.
촉각 감지 총 시간: 약 45 분 난이도: 중간 업데이트 2026 년 5 월
** Ubuntu 22.04, Ubuntu 24.04, Debian 12, Fedora 40에서 테스트되었습니다. Kernel 5.4 또는 최신 버전은
당신 이 성취 할 것
이 가이드의 끝으로, 당신은 작동하는 리눅스 파이프라인을 갖게 될 것입니다. 장갑은 USB 시리즈 또는 블루투스를 통해 안정적인
전제 조건
- ** 하드웨어:** RC G1 터틸 글래브, 데이터 획득 모듈 (충전), USB-A 블루투스 둥글 또는 USB-A에서 USB-C 케이블로 연결된 일련 케이블
- OS: 5.4 또는 그 이상의 커널에서 리눅스 배포를 합니다. 이 가이드 는 우분투 22.04 / 24.04, 데비안 12, 그리고 페도라 40에 대항하여 작성되었습니다.
- ** 기술:**
T20 , T20 , 짧은 파이썬을 읽는 편입니다.
단계
커널 드라이버가 존재하는지 확인하세요
현대 리눅스 커널 (5.4+) 은 데이터 획득 모듈에서 사용되는 CH340 USB 시리즈 칩에 대한
```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
```
CH340은 지구상에서 가장 많이 사용되고 있는 USB 시리즈 칩입니다.
자신을 대화 그룹에 추가하십시오
데비안과 우부턴에서, 일련 장치는
```bash
sudo usermod -aG dialout $USER
```
** 로그 아웃 및 로그 아웃**, 또는 현재
```bash
serial.serialutil.SerialException: [Errno 13] Permission denied: '/dev/ttyUSB0'
```
페도라에서는
결정적인 udev 규칙을 설치합니다 (선택하지만 권장됩니다)
udev 규칙이 없으면 커널은 1인칭으로
```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
```
이제 장치가 플러그 순서에 관계없이
블루투스를 사용하여 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)
```
펌웨어는
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
```
파이썬 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 서비스로 실행
헤드리스 배포를 위해 데이터 수집 셀, 연구 벤치 또는 현장 로봇을
```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 데이터 플랫폼 섭취에 가장 쉬운 길은 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는 인증, 재시험 및 플랫폼의 섭취 웹소켓에 조각 업로드를 처리합니다. 같은 명령 줄에 에피소드 메타데이터를 (task name, scene labels, hand side) 첨부하는 방법을 포함하여 전체 참조를 위해 [SDK quickstart]
프레임 레이아웃 및 ROS 2 예제
위의 리더는 전체 프레임에 대해 평면 256개의
ROS 2 통합을 위해
공급성 검사: 100 Hz x (256 바이트 압력 + 16 바이트 IMU + 12 바이트 프레임) = ~28 KB/s 한 손. 921600 바이트의 CH340는 ~115 KB/s의 사용 가능한 대역폭을 가지고 있으므로 전선 단손 스트리밍은 링크의 약 1/4를 사용합니다.
문제 해결
** 플러그인에서
레더는 100 Hz 대신 50 Hz에서 실행됩니다: 당신은 블루투스 (30 Hz 명칭; 일부 호스트는 다시 시도를 포함하여 ~ 50 Hz를 측정합니다.
** 프레임 캔버스 / IMU 쿼터니온은 NaN:** 확인 보드 는
** 두 개의 장갑이 연결되어 있으며, 오직 한 스트림:** 단계 3의 udev 규칙이 두 개의 시뮬링크 (
다음으로 어떻게 해야 할까요?
한 손이 안정적으로 스트리밍되면 다음 값이 높은 단계는: (1) 빈손의 5 초를 기록하고 평균을 빼어내는 방식으로 채널당 압력 기준선을 기밀화하고, (2) 두 번째 손을 가져와 동시에 플랫폼으로 스트리밍을 확인하고, (3) 중앙 CLI의 에피소드 모드를 사용하여 라벨화된 데이터 세트를 기록합니다.







