소프트웨어 및 드라이버 설정

Paxini SDK를 설치하고, Python으로 압력 데이터를 스트리밍하고, 접촉 히트맵을 시각화하고, 선택적 ROS2 통합을 추가하고, 전체 데이터 수집 파이프라인을 위해 로봇 팔과 동기화하세요.

1단계 — 설치

Paxini SDK 설치

Paxini Gen3은 USB HID를 통해 통신하므로 커널 모듈이나 공급업체 드라이버가 필요하지 않습니다. Python SDK는 하위 수준 HID 프로토콜을 래핑하고 깔끔한 스트리밍 API를 공개합니다.

모든 OS 지원 Gen3은 표준 USB HID 장치로 열거됩니다. Windows, macOS 및 Linux는 모두 인박스 드라이버를 통해 이를 지원합니다. Python 3.10 이상이 필요합니다.
# Python 3.10+ required pip 설치 paxini-sdk # With visualization extras (matplotlib, numpy) pip 설치 "paxini-sdk[viz]" # With ROS2 bridge (requires ROS2 Humble or Jazzy) pip 설치 "paxini-sdk[ros2]"

설치를 확인합니다.

python -c "paxini 가져오기; 인쇄(paxini.__version__)" # Expected: 1.2.x or later
2단계 - USB 감지

센서 감지

USB-C를 통해 Gen3 센서를 컴퓨터에 연결하세요. SDK의 장치 검색 유틸리티를 사용하여 인식되는지 확인하세요.

python -m paxini.discover # Example output: # Found 1 Paxini device(s): # [0] PX-6AX-GEN3 serial=PX3A0042 firmware=1.2.4 variant=fingertip

다중 센서 설정의 경우(예: USB 허브의 다섯 손가락):

python -m paxini.discover --all # Found 5 Paxini device(s): # [0] PX-6AX-GEN3 serial=PX3A0042 variant=fingertip (index 0) # [1] PX-6AX-GEN3 serial=PX3A0043 variant=fingertip (index 1) # ...
리눅스 USB 권한 Linux에서는 루트 없이 HID 장치에 액세스하려면 udev 규칙을 추가해야 할 수도 있습니다. 달리다 sudo python -m paxini.install_udev 한 번 규칙을 설치한 다음 센서를 뽑았다가 다시 연결하세요.
3단계 - 스트리밍 API

Python 스트리밍 API

핵심 API는 콜백 기반 스트림입니다. 각 프레임은 촉각프레임 전체 압력 배열과 메타데이터가 포함된 개체입니다.

# Minimal streaming example — 5 lines 파시니 수입 센서 = paxini.Sensor() # connects to first detected device 센서.시작() sensor.stream()의 프레임에 대해: 인쇄(프레임.압력_맵) # 2D numpy array, shape (rows, cols) 인쇄(frame.total_force_n) # float, total normal force in Newtons

모든 공개 API 메소드:

방법/속성 설명 보고
센서.시작()스트리밍을 시작하세요. 비차단없음
센서.정지()스트림을 깔끔하게 중지하세요.없음
센서.스트림()구성된 Hz에서 TactileFrame 객체를 생성하는 생성기생성기[촉각프레임]
센서.최신()차단하지 않고 가장 최근 프레임을 반환합니다.촉각프레임
센서.set_rate(hz)샘플링 속도 설정(USB-C의 경우 50~500Hz, BLE의 경우 50~200Hz)없음
센서.보정()현재 정지 부하에 대한 제로 오프셋 교정없음
센서.직렬장치 일련번호 문자열str
센서.변형"손끝" | "손가락 패드" | "손바닥 안에 감추다"str
4단계 - 데이터 형식

촉각 데이터 형식

촉각프레임 다음을 포함합니다:

필드 유형 설명
프레임.타임스탬프_ns정수나노초 타임스탬프(단조, 호스트 클록)
프레임.압력_맵np.ndarray(H, W) float32탁셀당 압력(kPa)입니다. 모양은 변형에 따라 다릅니다. 손가락 끝은 8×8, 손바닥은 16×12입니다.
프레임.접촉_마스크np.ndarray (H, W) bool압력이 접촉 임계값을 초과하는 경우 참(기본값: 5kPa)
프레임.접촉_면적_mm2뜨다활성 탁셀 면적의 합(mm²)
프레임.total_force_n뜨다뉴턴 단위로 모든 탁셀에 걸쳐 통합된 수직항력
프레임.접촉_중심(플로트, 플로트)(행, 열) 탁셀 좌표에서 접촉 영역의 중심
프레임.인_접촉부울total_force_n이 접촉 임계값을 초과하는 경우 참(기본값: 0.05N)
프레임.seq정수단조롭게 증가하는 프레임 시퀀스 번호
공간 해상도 손가락 끝 변형: 14×14mm, 1.75mm 탁셀 피치를 덮는 8×8 탁셀 배열. 손바닥 변형: 48×36mm, 3mm 피치를 덮는 16×12 배열. 각 탁셀은 0~600kPa를 측정합니다.
5단계 - 시각화

실시간 히트맵 시각화

SDK는 즉시 실행 가능한 라이브 시각화 도구를 제공합니다. 명령줄에서 직접 실행하세요.

# Launch live heatmap — press Q to quit 파이썬 -m paxini.visualize # Multi-sensor visualization (e.g., 5-finger setup) 파이썬 -m paxini.visualize --all

또는 다음을 사용하여 자신의 스크립트에 삽입하세요. paxini.viz 기준 치수:

파시니 수입 paxini.viz에서 HeatmapWindow 가져오기 센서 = paxini.Sensor() 센서.시작() window = HeatmapWindow(title="Paxini Gen3 — 손가락 끝") sensor.stream()의 프레임에 대해: window.update(프레임.압력_맵) window.should_close()인 경우: 휴식 센서.정지()
6단계(선택 사항) - ROS2

ROS2 인터페이스

ROS2 브리지는 다음을 게시합니다. sensor_msgs/이미지 (압력 맵) 및 사용자 정의 paxini_msgs/TactileFrame 센서별 주제. ROS2 Humble 또는 Jazzy가 필요합니다.

# Install the ROS2 extras and launch the node pip 설치 "paxini-sdk[ros2]" ros2는 paxini_ros2 센서_노드를 실행합니다. # Published topics (per sensor): # /paxini/PX3A0042/pressure_image sensor_msgs/Image # /paxini/PX3A0042/tactile_frame paxini_msgs/TactileFrame # /paxini/PX3A0042/contact_event std_msgs/Bool

다중 센서 설정의 경우 각 장치는 일련번호로 게시됩니다. 표준 ROS2 재매핑을 사용하여 실행 파일의 주제를 재매핑할 수 있습니다.

7단계 - Arm 통합

로봇 팔 통합

Paxini 데이터를 로봇 팔 관절 상태와 동기화하려면 paxini.sync 기준 치수. 공유 시계에 대해 모든 센서 프레임의 타임스탬프를 기록하고 동기화된(arm_state, tactile_frame) 쌍을 생성하는 차단 API를 제공합니다.

파시니 수입 paxini.sync에서 MultiSourceSync 가져오기 # Initialize sensor and arm interface 센서 = paxini.Sensor() arm = YourArmInterface() # any arm with a get_joint_state() method 동기화 = 멀티소스싱크( 센서=센서, 팔=팔, max_dt_ms=5.0 # reject pairs with >5ms timestamp gap ) arm_state의 경우 sync.stream()의 촉각: 인쇄(arm_state.joint_positions) 인쇄(tactile.total_force_n) 인쇄(촉각.압력_맵)
타임스탬프 정렬 Gen3 타임스탬프는 USB 인터럽트 시간에 호스트 클럭을 사용하여 나노초 해상도로 프레임을 표시합니다. 지터는 일반적으로 0.5ms 미만입니다. 그만큼 MultiSourceSync 클래스는 arm 속도와 센서 속도가 다를 때 보간을 처리합니다.
문제 해결

상위 3개 이슈

paxini.discover()는 빈 목록을 반환합니다.

센서가 감지되지 않습니다. 순서대로 확인하십시오. (1) 다른 USB-C 케이블을 사용해 보십시오. 일부 케이블은 충전 전용이며 데이터를 전달하지 않습니다. (2) Linux에서는 다음을 실행합니다. sudo python -m paxini.install_udev 그런 다음 센서를 분리했다가 다시 연결하세요. (3) 센서 LED가 계속 켜져 있는지 확인합니다(깜박이지 않음). 깜박이면 펌웨어 업데이트 모드에 있음을 의미합니다. 종료하려면 재설정 버튼을 5초 동안 누르세요.

Pressure_map은 누를 때 모두 0입니다.

센서에 교정이 필요하거나 임계값이 너무 높게 설정되었습니다. 달리다 sensor.calibrate() 센서가 언로드된 상태(접촉 없음). 문제가 지속되면 센서 변형이 마운트와 일치하는지 확인하십시오. 손가락 끝에 설치된 손바닥 센서는 더 큰 탁셀 영역으로 인해 매우 낮은 압력 값을 표시합니다. 또한 펌웨어 버전 1.2+를 확인하십시오. python -m paxini.discover.

MultiSourceSync가 TimestampDriftError를 발생시킵니다.

암 인터페이스 시계와 센서 타임스탬프가 다음보다 많이 분기됩니다. max_dt_ms. 이는 일반적으로 arm SDK가 오래된 조인트 상태(예: 더 낮은 속도로 버퍼링됨)를 반환하기 때문에 발생합니다. 증가하다 max_dt_ms 첫 번째 테스트로 10.0으로 업그레이드한 다음 팔 상태 새로 고침 빈도가 예상보다 낮은 이유를 조사합니다. USB 암의 경우 USB 폴링 속도가 전원 관리에 의해 제한되지 않는지 확인합니다(sudo powertop 리눅스에서).

아직도 붙어있나요? 에 게시 포럼 질문 스레드 OS, SDK 버전(paxini.__version__) 및 정확한 오류 출력.