Configuração de Software e Driver
Instale o SDK Paxini, transmita dados de pressão em Python, visualize mapas de calor de contato, adicione integração opcional com ROS2 e sincronize com seu braço robótico para pipelines completos de coleta de dados.
Instale o SDK Paxini
O Paxini Gen3 se comunica via USB HID — nenhum módulo de kernel ou drivers de fornecedor são necessários. O SDK Python envolve o protocolo HID de baixo nível e expõe uma API de streaming limpa.
Verifique a instalação:
Detectando o Sensor
Conecte o sensor Gen3 ao seu computador via USB-C. Use a ferramenta de descoberta de dispositivos do SDK para confirmar que ele foi reconhecido:
Para configurações de múltiplos sensores (por exemplo, cinco dedos em um hub USB):
sudo python -m paxini.install_udev uma vez para instalar a regra, depois desconecte e reconecte o sensor.
API de streaming Python
A API principal é um fluxo baseado em callback. Cada quadro entrega um TactileFrame objeto contendo o array completo de pressão e metadados.
Todos os métodos da API pública:
| Método / Propriedade | Descrição | Retorna |
|---|---|---|
| sensor.start() | Começar a transmissão; não bloqueante | Nenhum |
| sensor.parar() | Pare o fluxo de forma limpa | Nenhum |
| sensor.fluxo() | Gerador produzindo objetos TactileFrame na frequência configurada em Hz | Gerador[TactileFrame] |
| sensor.mais_recente() | Retorna o quadro mais recente sem bloquear | TactileFrame |
| sensor.definir_taxa(hz) | Definir taxa de amostragem (50–500 Hz para USB-C, 50–200 Hz para BLE) | Nenhum |
| sensor.calibrar() | Calibração de zero-offset contra a carga de repouso atual | Nenhum |
| sensor.serial | String do número de série do dispositivo | str |
| sensor.variante | "ponta do dedo" | "almofada do dedo" | "palma" | str |
Formato de Dados Táctil
Cada TactileFrame contém:
| Campo | Tipo | Descrição |
|---|---|---|
| frame.timestamp_ns | int | Carimbo de tempo em nanosegundos (monotônico, relógio do host) |
| frame.pressure_map | np.ndarray (H, W) float32 | Pressão em kPa por taxel. A forma varia por variante: ponta do dedo é 8×8, palma é 16×12. |
| frame.contact_mask | np.ndarray (H, W) bool | Verdadeiro onde a pressão excede o limite de contato (padrão: 5 kPa) |
| frame.contact_area_mm2 | flutuante | Soma das áreas de taxel ativas em mm² |
| frame.total_force_n | flutuante | Força normal integrada em todos os taxels, em Newtons |
| frame.contact_centroid | (float, float) | (linha, coluna) centróide da região de contato em coordenadas de taxel |
| frame.in_contact | bool | Verdadeiro se total_force_n excede o limite de contato (padrão: 0,05 N) |
| frame.seq | int | Número da sequência de quadro que aumenta monotonamente |
Visualização de Mapa de Calor ao Vivo
O SDK inclui um visualizador ao vivo pronto para uso. Execute diretamente da linha de comando:
Ou incorpore em seu próprio script usando o paxini.viz módulo:
Interface ROS2
A ponte ROS2 publica um sensor_msgs/Image (mapa de pressão) e um paxini_msgs/TactileFrame tópico personalizado por sensor. Requer ROS2 Humble ou Jazzy.
Para configurações de múltiplos sensores, cada dispositivo publica sob seu número de série. Você pode remapear tópicos em seu arquivo de lançamento usando o remapeamento padrão do ROS2.
Integração de Braço Robótico
Para sincronizar os dados do Paxini com o estado das juntas do braço robótico, use o paxini.sync módulo. Ele marca todos os quadros do sensor em relação a um relógio compartilhado e fornece uma API bloqueante que gera pares sincronizados (arm_state, tactile_frame):
MultiSourceSync classe lida com a interpolação quando as taxas do braço e do sensor diferem.
3 principais problemas
O sensor não está sendo detectado. Verifique na ordem: (1) Tente um cabo USB-C diferente — alguns cabos são apenas para carga e não transmitem dados. (2) No Linux, execute sudo python -m paxini.install_udev em seguida, desconecte/reconecte o sensor. (3) Confirme que o LED do sensor está sólido (não piscando) — piscando significa que está no modo de atualização de firmware; mantenha o botão de reset pressionado por 5 segundos para sair.
O sensor precisa de calibração ou o limite está definido muito alto. Execute sensor.calibrate() com o sensor descarregado (sem contato). Se o problema persistir, verifique se a variante do sensor corresponde ao seu suporte — um sensor de palma instalado na ponta do dedo mostrará valores de pressão muito baixos devido à área maior do taxel. Também confirme a versão do firmware 1.2+ com python -m paxini.discover.
O relógio da interface do braço e o timestamp do sensor estão divergindo em mais de max_dt_ms. Isso geralmente é causado pelo SDK do braço retornando um estado de junta desatualizado (por exemplo, armazenado em um ritmo mais baixo). Aumente max_dt_ms para 10.0 como primeiro teste, depois investigue por que a taxa de atualização do estado do braço é menor do que o esperado. Para braços USB, confirme que a taxa de polling USB não está sendo limitada pela gestão de energia (sudo powertop sem Linux).
Ainda preso? Poste no thread de perguntas do fórum com seu sistema operacional, versão do SDK (paxini.__version__), e a saída de erro exata.