1단계 — 설치
juqiao-glove 패키지 설치
장갑은 USB CDC 직렬을 통해 통신하며 커널 모듈이나 맞춤형 드라이버가 없습니다. Python 패키지가 래핑됩니다. 비연속성 바이너리 프레임 프로토콜을 처리합니다.
모든 OS 지원
장갑은 표준 CDC-ACM 직렬 장치로 나타납니다. Windows, macOS 및 Linux는 모두 인박스 드라이버를 사용하여 자동으로 열거합니다. 공급업체 드라이버 설치 프로그램이 필요하지 않습니다.
pip 설치 juqiao-glove
pip 설치 "juqiao-glove[viz]"
pip 설치 "juqiao-glove[ros2]"
설치를 확인합니다.
python -c "juqiao_glove 가져오기; 인쇄(juqiao_glove.__version__)"
2단계 - 포트 감지
USB 포트 감지
1.5m USB-C 케이블을 통해 장갑을 연결합니다. 장치는 CDC-ACM 직렬 포트로 열거됩니다.
| OS | 일반적인 포트 이름 | 메모 |
| 리눅스 | /dev/ttyACM0 | 사용자 추가 다이얼아웃 권한이 거부된 경우 그룹 |
| macOS | /dev/tty.usbmodem* | 사용 ls /dev/tty.usb* 정확한 이름을 찾으려면 |
| 윈도우 | COM3 (다양함) | 장치관리자 → 포트(COM & LPT) 확인 |
Python에서 장갑을 자동 감지합니다.
juqiao_glove에서 가져오기 JuqiaoGlove
장갑 = JuqiaoGlove.find() 인쇄(glove.port)
인쇄(glove.info())
또는 포트를 명시적으로 지정하세요.
장갑 = JuqiaoGlove(port="/dev/ttyACM0", 전송 속도=3000000)
리눅스 권한 오류?
달리다 sudo usermod -aG 다이얼아웃 $USER 그런 다음 로그아웃했다가 다시 로그인하십시오. 또는 다음을 사용하십시오. sudo chmod 666 /dev/ttyACM0 단일 세션 해결 방법입니다.
3단계 - 스트리밍 API
Python 스트리밍 API
장갑은 200Hz로 스트리밍됩니다. 각 프레임에는 64요소 압력 배열(16비트 ADC, 정규화 0.0~1.0)과 타임스탬프가 포함되어 있습니다.
juqiao_glove에서 가져오기 JuqiaoGlove 수입 시간 장갑 = JuqiaoGlove.find() 장갑.연결()
프레임 = 장갑.read_frame() 인쇄(프레임.타임스탬프)
인쇄(프레임.압력)
인쇄(프레임.압력.재형성(8, 8))
def on_frame(프레임): max_node = 프레임.압력.argmax() print(f"t={frame.timestamp:.4f} peak_node={max_node} val={frame.압력[max_node]:.3f}") 장갑.스트림(콜백=on_frame, 기간=5.0)
글러브.스트림()을 프레임으로 사용: 프레임 안의 프레임의 경우: 프로세스(프레임) 완료되면: 휴식 장갑.연결 해제()
프레임 객체 참조
| 기인하다 | 유형 | 설명 |
| 프레임.타임스탬프 | 뜨다 | 호스트측 수신 시간(초, Unix epoch) |
| 프레임.압력 | np.ndarray (64,) | 노드당 정규화된 압력, 0.0(없음) ~ 1.0(최대) |
| 프레임.압력_원시 | np.ndarray (64,) | 원시 16비트 ADC 수(0~65535) |
| 프레임.접촉_마스크 | np.ndarray (64,) 부울 | 압력이 임계값을 초과하는 경우 True(기본값 0.05) |
| 프레임.접촉_노드 | 목록[int] | 현재 접속 중인 노드의 인덱스 |
| 프레임.파악_지역 | str 또는 없음 | 경험적 영역: "손바닥 안에 감추다", "무지", "색인", "가운데", "반지", "핑키", 없음 |
| 프레임.시퀀스 | 정수 | 프레임 카운터(65535에서 래핑); 드롭된 프레임을 감지하는 데 사용 |
참조 - 센서 레이아웃
64노드 센서 레이아웃
64개의 탁셀은 손바닥과 다섯 개의 손가락 부분을 모두 덮는 직조 섬유 매트릭스로 배열되어 있습니다. 노드 색인은 일관된 등쪽 보기 행 주요 순서를 따릅니다.
juqiao_glove.layout에서 REGION_SLICES 가져오기 palm_nodes = 프레임.압력[REGION_SLICES["palm"]] Thumb_nodes = 프레임.압력[REGION_SLICES["thumb"]] index_nodes = 프레임.압력[REGION_SLICES["index"]]
그리드 = 프레임.압력.재형성(8, 8)
선택 사항 — 시각화
압력 히트맵 시각화
그만큼 [즉] extra는 교정 및 디버깅에 유용한 라이브 matplotlib 히트맵 렌더러를 설치합니다.
juqiao_glove에서 가져오기 JuqiaoGlove juqiao_glove.viz에서 PressureHeatmap 가져오기 장갑 = JuqiaoGlove.find() 장갑.연결() viz = PressureHeatmap(title="Juqiao Glove — 실시간 압력") viz.show(장갑)
헤드리스 환경 또는 데이터 검토를 위해 프레임을 비디오로 저장합니다.
juqiao_glove.viz에서 Record_heatmap_video 가져오기 Record_heatmap_video( input_npy="session_압력.npy",
output_mp4="히트맵.mp4", FPS=30, colormap="인페르노", )
선택 사항 — ROS2
ROS2 인터페이스
그만큼 juqiao_glove_ros2 패키지는 사용자 정의를 게시합니다 촉각 배열 200Hz에서 메시지를 보냅니다. ROS2 Humble 및 Iron과 호환됩니다.
pip 설치 "juqiao-glove[ros2]"
CD ~/ros2_ws/src 자식 클론 https://github.com/roboticscenter/juqiao_glove_ros2 cd ~/ros2_ws && colcon build --packages-select juqiao_glove_ros2
드라이버 노드를 시작합니다.
소스 /opt/ros/humble/setup.bash 소스 ~/ros2_ws/install/setup.bash
ros2 실행 juqiao_glove_ros2 글러브.launch.py
ros2 실행 juqiao_glove_ros2 글러브.launch.py 포트:=/dev/ttyACM0
게시된 주제:
| 주제 | 메시지 유형 | 비율 | 설명 |
| /juqiao_glove/tactile_array | juqiao_glove_ros2/TactileArray | 200Hz | 전체 64노드 압력 어레이 |
| /juqiao_glove/contact_mask | std_msgs/UInt8MultiArray | 200Hz | 노드당 바이너리 접촉(0 또는 1) |
| /juqiao_glove/grasp_region | std_msgs/문자열 | 200Hz | 활성 지역 경험적 또는 빈 문자열 |
| /juqiao_glove/status | Diagnostic_msgs/DiagnosticStatus | 1Hz | 펌웨어 버전, 프레임 드롭률 |
오르카 손 + 장갑 결합 출시
동기화 녹음을 위해 Orca Hand와 함께 장갑을 사용하는 경우:
ros2 실행 orca_ros2 orca_hand.launch.py 포트:=/dev/ttyUSB0
ros2 실행 juqiao_glove_ros2 글러브.launch.py 포트:=/dev/ttyACM0
ros2 주제 목록 | grep -E "orca|juqiao" ros2 주제 hz /juqiao_glove/tactile_array ros2 주제 hz /orca_hand/joint_states
4단계 - 교정
기준선 교정
장갑은 공장 교정과 함께 배송됩니다. 기준선 드리프트(휴지 상태에서 노드가 0이 아닌 값을 읽음)를 발견하거나 보관 기간을 연장한 후에는 다시 보정하십시오.
보정하기 전에 장갑을 벗으십시오.
교정은 무압력 기준선을 포착합니다. 교정 과정 중에는 장갑을 착용하거나 만지지 마십시오. 표면에 편평하게 놓으십시오.
python -m juqiao_glove.calibrate --port /dev/ttyACM0
juqiao_glove에서 가져오기 JuqiaoGlove 장갑 = JuqiaoGlove.find() 장갑.연결() Globe.calibrate_baseline(기간=3.0)
장갑.save_calibration("~/.juqiao_glove_cal.json") 장갑.연결 해제()
런타임 시 로드 교정:
장갑 = JuqiaoGlove.find() 장갑.연결() 글러브.로드_캘리브레이션("~/.juqiao_glove_cal.json")
프레임 = 장갑.read_frame() 인쇄(프레임.압력.최대())
임계값 조정
기본 접촉 임계값은 0.05(전체 범위의 5%)입니다. 작업별로 조정:
장갑.set_contact_threshold(0.02)
장갑.set_contact_threshold(0.10)
Globe.set_contact_threshold({"palm": 0.08, "thumb": 0.03, "index": 0.03})
문제 해결
일반적인 문제
SerialException: [Errno 13] 권한이 거부되었습니다: '/dev/ttyACM0'
달리다 sudo usermod -aG dialout $USER 그런 다음 로그아웃했다가 다시 로그인하세요. sudo chmod 666 /dev/ttyACM0 (플러그를 뽑으면 재설정됩니다).
JuqiaoGlove.find()가 없음을 반환했습니다. — 장치를 찾을 수 없습니다.
USB 연결을 확인하세요. 달리다 dmesg | tail -20 (리눅스) 또는 ls /dev/tty.usb* (macOS) OS가 장치를 열거했는지 확인합니다. 다른 USB 포트나 케이블을 사용해 보십시오(커넥터는 USB-C이지만 충전 전용이 아닌 데이터 케이블이어야 함).
64개 노드 모두 0.0을 읽음 - 압력 데이터 없음
부르다 glove.info() 펌웨어가 응답하는지 확인합니다. 그렇다면 교정 파일이 과도하게 빼지 않는지 확인하십시오. 삭제 ~/.juqiao_glove_cal.json 그리고 장갑을 편평하게 눕힌 상태에서 재보정하세요.
기준선 드리프트 - 유휴 상태에서 노드 읽기 0.1–0.2
재보정: 압력을 가하지 않고 장갑을 평평하게 놓고 달리십시오. glove.calibrate_baseline(). 온도 변화 또는 장기간 보관 후에 발생할 수 있습니다. 장갑을 낀 상태에서 드리프트가 0.4보다 큰 경우 감지 직물을 교체해야 할 수 있습니다(Juqiao 지원팀에 문의).
프레임 저하 - 시퀀스 번호 건너뛰기
USB 케이블 품질과 포트를 확인하세요. USB 3.0 포트를 사용하세요. Linux에서는 다른 고대역폭 장치와 함께 USB 허브를 사용하지 마십시오. 귀하의 on_frame 콜백은 빠르게 반환됩니다. 별도의 스레드에서 과도한 처리를 수행합니다.
ROS2 노드가 시작되지만 /juqiao_glove/tactile_array에 메시지가 없습니다.
포트 인수를 확인합니다. ros2 launch juqiao_glove_ros2 glove.launch.py port:=/dev/ttyACM0. 노드 로그를 확인하세요. ros2 node info /juqiao_glove_driver. 보장 dialout ROS2 노드를 실행하는 사용자에게 그룹 수정이 적용되었습니다.