Configuration du logiciel et du pilote
Installez le SDK Paxini, diffusez des données de pression en Python, visualisez des cartes thermiques de contact, ajoutez l'intégration ROS2 en option et synchronisez avec votre bras robotique pour des pipelines complets de collecte de données.
Installez le SDK Paxini
Le Paxini Gen3 communique via USB HID — aucun module de noyau ou pilote de fournisseur n'est requis. Le SDK Python enveloppe le protocole HID de bas niveau et expose une API de streaming propre.
Vérifiez l'installation :
Détection du capteur
Branchez le capteur Gen3 sur votre ordinateur via USB-C. Utilisez l'utilitaire de découverte de périphérique du SDK pour confirmer qu'il est reconnu :
Pour les configurations multi-capteurs (par exemple, cinq doigts sur un hub USB) :
sudo python -m paxini.install_udev une fois pour installer la règle, puis débranchez et rebranchez le capteur.
API de diffusion Python
L'API principale est un flux basé sur le rappel. Chaque image délivre un Cadre Tactile objet contenant le tableau de pression complet et les métadonnées.
Toutes les méthodes API publiques :
| Méthode / Propriété | Description | Retours |
|---|---|---|
| capteur.start() | Commencez la diffusion ; non bloquant | Aucune |
| capteur.stop() | Arrêtez le flux proprement | Aucune |
| capteur.stream() | Générateur produisant des objets TactileFrame à Hz configuré | Générateur[TactileFrame] |
| capteur.dernier() | Renvoie la trame la plus récente sans blocage | Cadre Tactile |
| capteur.set_rate(hz) | Définir la fréquence d'échantillonnage (50 à 500 Hz pour USB-C, 50 à 200 Hz pour BLE) | Aucune |
| capteur.calibrer() | Étalonnage du décalage zéro par rapport à la charge de repos actuelle | Aucune |
| capteur.série | Chaîne du numéro de série de l'appareil | str |
| capteur.variante | "bout du doigt" | "doigt" | "palmier" | str |
Format de données tactiles
Chaque Cadre Tactile contient:
| Championne | Cône | Description |
|---|---|---|
| frame.timestamp_ns | int | Horodatage nanoseconde (monotone, horloge hôte) |
| frame.pression_map | np.ndarray (H, W) float32 | Pression en kPa par taxel. La forme varie selon la variante : le bout du doigt est de 8 × 8, la paume est de 16 × 12. |
| cadre.contact_mask | combinateur np.ndarray (H, W). | Vrai lorsque la pression dépasse le seuil de contact (par défaut : 5 kPa) |
| frame.contact_area_mm2 | flotter | Somme des surfaces de taxels actifs en mm² |
| frame.total_force_n | flotter | Force normale intégrée sur tous les taxels, en Newtons |
| cadre.contact_centroid | (super, super) | (ligne, col) centroïde de la région de contact en coordonnées taxel |
| cadre.in_contact | bouffonne | Vrai si total_force_n dépasse le seuil de contact (par défaut : 0,05 N) |
| cadre.seq | int | Numéro de séquence de trame croissant de manière monotone |
Visualisation de la carte thermique en direct
Le SDK est livré avec un visualiseur en direct prêt à l'emploi. Exécutez-le directement depuis la ligne de commande :
Ou intégrez-le dans votre propre script en utilisant le paxini.viz module:
Interface ROS2
Le pont ROS2 publie un sensor_msgs/Image (carte de pression) et un personnalisé paxini_msgs/TactileFrame sujet par capteur. Nécessite ROS2 Humble ou Jazzy.
Pour les configurations multi-capteurs, chaque appareil publie sous son numéro de série. Vous pouvez remapper les sujets dans votre fichier de lancement à l'aide du remappage ROS2 standard.
Intégration du bras robot
Pour synchroniser les données Paxini avec l'état de l'articulation du bras du robot, utilisez le paxini.sync module. Il horodatage toutes les images du capteur par rapport à une horloge partagée et fournit une API de blocage qui génère des paires synchronisées (arm_state, tactile_frame) :
MultiSourceSync la classe gère l’interpolation lorsque les taux du bras et du capteur diffèrent.
Les 3 principaux problèmes
Le capteur n'est pas détecté. Vérifiez dans l'ordre : (1) Essayez un autre câble USB-C : certains câbles sont uniquement destinés à la charge et ne transportent pas de données. (2) Sous Linux, exécutez sudo python -m paxini.install_udev puis débranchez/rebranchez le capteur. (3) Vérifiez que la LED du capteur est fixe (ne clignote pas) – un clignotement signifie qu'il est en mode de mise à jour du micrologiciel ; maintenez le bouton de réinitialisation enfoncé pendant 5 secondes pour quitter.
Le capteur a besoin d'être calibré ou le seuil est réglé trop haut. Courir sensor.calibrate() avec le capteur déchargé (pas de contact). Si le problème persiste, vérifiez que la variante du capteur correspond à votre monture : un capteur palmaire installé sur le bout du doigt affichera des valeurs de pression très faibles en raison de la plus grande zone de taxel. Confirmez également la version 1.2+ du firmware avec python -m paxini.discover.
L'horloge de l'interface du bras et l'horodatage du capteur divergent de plus de max_dt_ms. Cela est généralement dû au fait que le SDK du bras renvoie un état commun obsolète (par exemple, mis en mémoire tampon à un débit inférieur). Augmenter max_dt_ms à 10,0 comme premier test, puis étudiez pourquoi le taux de rafraîchissement de l'état d'armement est inférieur à celui prévu. Pour les bras USB, vérifiez que le taux d'interrogation USB n'est pas limité par la gestion de l'alimentation (sudo powertop sous Linux).
Toujours bloqué ? Publier dans le fil de questions du forum avec votre système d'exploitation, version du SDK (paxini.__version__), et la sortie d'erreur exacte.