Configuración de Software y Controlador
Instale el SDK de Paxini, transmita datos de presión en Python, visualice mapas de calor de contacto, agregue integración opcional con ROS2 y sincronice con su brazo robótico para flujos de recopilación de datos completos.
Instale el SDK de Paxini
El Paxini Gen3 se comunica a través de USB HID — no se requieren módulos del kernel ni controladores de proveedor. El SDK de Python envuelve el protocolo HID de bajo nivel y expone una API de transmisión limpia.
Verifica la instalación:
Detectando el sensor
Conecta el sensor Gen3 a tu computadora a través de USB-C. Usa la utilidad de descubrimiento de dispositivos del SDK para confirmar que es reconocido:
Para configuraciones de múltiples sensores (por ejemplo, cinco dedos en un hub USB):
sudo python -m paxini.install_udev una vez para instalar la regla, luego desconecta y vuelve a conectar el sensor.
API de transmisión de Python
La API principal es un flujo basado en callbacks. Cada cuadro entrega un TactileFrame objeto que contiene el arreglo completo de presión y metadatos.
Todos los métodos públicos de la API:
| Método / Propiedad | Descripción | Devuelve |
|---|---|---|
| sensor.start() | Comienza a transmitir; no bloqueante | Ninguno |
| sensor.detener() | Detener el flujo de manera limpia | Ninguno |
| sensor.flujo() | Generador que produce objetos TactileFrame a la frecuencia configurada | Generador[TactileFrame] |
| sensor.último() | Devuelve el marco más reciente sin bloquear | TactileFrame |
| sensor.establecer_tasa(hz) | Establecer la tasa de muestreo (50–500 Hz para USB-C, 50–200 Hz para BLE) | Ninguno |
| sensor.calibrar() | Calibración de compensación cero contra la carga de reposo actual | Ninguno |
| sensor.serial | Cadena del número de serie del dispositivo | str |
| variante.sensor | "punta del dedo" | "pad del dedo" | "palma" | str |
Formato de Datos Táctiles
Cada TactileFrame contiene:
| campo | Tipo | Descripción |
|---|---|---|
| frame.timestamp_ns | int | Marca de tiempo en nanosegundos (monotónica, reloj del host) |
| frame.pressure_map | np.ndarray (H, W) float32 | Presión en kPa por taxel. La forma varía según la variante: la yema del dedo es 8×8, la palma es 16×12. |
| marco.contact_mask | np.ndarray (H, W) bool | Verdadero donde la presión excede el umbral de contacto (predeterminado: 5 kPa) |
| frame.contact_area_mm2 | flotante | Suma de áreas de taxeles activos en mm² |
| frame.total_force_n | flotante | Fuerza normal integrada a través de todos los taxeles, en Newtons |
| frame.contact_centroid | (float, float) | (fila, col) centroide de la región de contacto en coordenadas de taxel |
| frame.in_contact | bool | Verdadero si total_force_n excede el umbral de contacto (predeterminado: 0.05 N) |
| frame.seq | int | Número de secuencia de marco que aumenta monotonamente |
Visualización de Mapa de Calor en Vivo
El SDK incluye un visualizador en vivo listo para usar. Ejecútalo directamente desde la línea de comandos:
O intégralo en tu propio script usando el paxini.viz módulo:
Interfaz ROS2
El puente ROS2 publica un sensor_msgs/Image (mapa de presión) y un paxini_msgs/TactileFrame tema personalizado por sensor. Requiere ROS2 Humble o Jazzy.
Para configuraciones de múltiples sensores, cada dispositivo publica bajo su número de serie. Puedes reasignar temas en tu archivo de lanzamiento usando la reasignación estándar de ROS2.
Integración de Brazo Robótico
Para sincronizar los datos de Paxini con el estado de las articulaciones del brazo robótico, utiliza el paxini.sync módulo. Marca todas las tramas de sensor contra un reloj compartido y proporciona una API bloqueante que genera pares sincronizados (arm_state, tactile_frame):
MultiSourceSync clase maneja la interpolación cuando las tasas del brazo y del sensor difieren.
Principales 3 problemas
El sensor no está siendo detectado. Verifica en el siguiente orden: (1) Prueba un cable USB-C diferente; algunos cables son solo de carga y no transmiten datos. (2) En Linux, ejecuta sudo python -m paxini.install_udev luego desconecta/vuelve a conectar el sensor. (3) Confirma que el LED del sensor esté fijo (no parpadeando); parpadeando significa que está en modo de actualización de firmware; mantén presionado el botón de reinicio durante 5 segundos para salir.
El sensor necesita calibración o el umbral está configurado demasiado alto. Ejecuta sensor.calibrate() con el sensor descargado (sin contacto). Si el problema persiste, verifica que la variante del sensor coincida con tu soporte; un sensor de palma instalado en una yema de dedo mostrará valores de presión muy bajos debido al área de taxel más grande. También confirma la versión del firmware 1.2+ con python -m paxini.discover.
El reloj de la interfaz del brazo y la marca de tiempo del sensor están divergiendo en más de max_dt_ms. Esto suele ser causado por el SDK del brazo que devuelve un estado de articulación obsoleto (por ejemplo, almacenado en un búfer a una tasa más baja). Aumenta max_dt_ms a 10.0 como primera prueba, luego investiga por qué la tasa de actualización del estado del brazo es más baja de lo esperado. Para brazos USB, confirma que la tasa de sondeo USB no esté siendo limitada por la gestión de energía (sudo powertop y Linux).
¿Aún atascado? Publica en el hilo de preguntas del foro con tu sistema operativo, versión del SDK (paxini.__version__), y la salida de error exacta.