Tutoriels
Chaque tutoriel est un programme autonome qui illustre une fonctionnalité d'Inverse Service. Trois variantes de langage sont présentées côte à côte afin que vous puissiez comparer les styles de programmation et choisir la pile technologique la mieux adaptée à votre projet :
- Python — le point d'entrée le plus court et le plus simple (
websockets+json) - C++ (nlohmann/json) — Compatible C++11, analyse JSON à l'exécution
- C++ (Glaze) — C++20 moderne, avec réflexion à la compilation et analyse sans allocation de mémoire, recommandé pour les boucles haptiques en temps réel
Le code source est publié dans deux dépôts d'exemples publics :
- Exemples de code C++ pour l'inversion haply — un répertoire par tutoriel, avec les variantes nlohmann/json (C++11) et Glaze (C++20). Les cibles de compilation portent le suffixe
-glzpour la variante Glaze. - haply-inverse-python-samples — un répertoire par tutoriel.
Chaque version d'Inverse Service associe un tag correspondant dans les deux dépôts : suivez la branche release/<version> pour conserver la version correspondant à cette documentation.
Prérequis
- Service Inverse
est en cours d'exécution (via Hub Haply ou via le programme d'installation autonome) sur le port10001. - Au moins un appareil Haply a été détecté. Chaque tutoriel est destiné à une famille d'appareils spécifique ; voir le tableau ci-dessous.
- Tutoriels Python :
pip install websockets(les tutoriels 04, 05, 06, 07, 08 et 09 nécessitent en outrekeyboard, qui nécessite des privilèges élevés sous Linux ; les tutoriels 08 et 09 nécessitent égalementrequests). - Tutoriels C++ : CMake 3.15 ou version ultérieure et un compilateur C++11 pour les variantes nlohmann, C++20 pour les variantes Glaze (
-glz). LeCMakeLists.txtle premier niveau du référentiel d'exemples récupèrelibhv,nlohmann/jsonetglazevia FetchContent : aucune configuration manuelle des dépendances n'est nécessaire.
Liste des tutoriels
| # | Nom | Appareils | Variantes | Ce que vous apprendrez |
|---|---|---|---|---|
| 00 | Liste des appareils | Tous | Py · C++ · C++ Glaze | Détection des appareils HTTP, requêtes limitées à la session |
| 01 | Affichage Inverse3 | Inverse3 | Py · C++ · C++ Glaze | Diffusion de l'état WebSocket, maintien de la connexion sans effort, échange initial dès le premier message |
| 02 | Affichage VerseGrip | Jeu vidéo sur console filaire | Py · C++ · C++ Glaze | Diffusion de l'orientation, maintien du lien avec probe_orientation, de quaternion en Euler |
| 03 | Affichage VG sans fil | WVG | Py · C++ · C++ Glaze | Boutons, batterie, capteur à effet Hall |
| 04 | Bonjour Floor | Inverse3 | Py · C++ · C++ Glaze | Premier effet haptique : ressort de pénalité set_cursor_force |
| 05 | Contrôle de position | Inverse3 | Py · C++ · C++ Glaze | Contrôle set_cursor_position, cibles aléatoires (C++) ou déplacement WASD en continu (Python) |
| 06 | Combiné | Inverse3 WVG | Py · C++ · C++ Glaze | Boucle multi-appareils, pilotage du curseur par direction dérivée du quaternion |
| 07 | Socle et montage | Inverse3 | Py · C++ · C++ Glaze | Remplacements lors de l'exécution configure.basis, configure.preset et configure.mount ; exclusion mutuelle entre le préréglage et le montage |
| 08 | Configuration à distance via HTTP | Inverse3 | Py · C++ · C++ Glaze | Configurateur intersessions réservé au protocole HTTP : détection d'une session par profil, puis envoi interactif d'une base / d'un préréglage / d'un montage via une requête POST REST |
| 09 | Télécommande WS | Inverse3 | Py · C++ · C++ Glaze | Navigateur d'espace de travail en temps réel : découverte des sessions et des appareils via HTTP, puis diffusion de set_transform à chaque cycle via WebSocket |
| 10 | Événements | — | Py · C++ · C++ Glaze | Écouteur du flux d'événements sur le port 10020, filtrage par niveau et par nom |
Astuce — mesurer les performances de la boucle haptique
Le tutoriel n° 10 (Événements) est conçu pour être suivi en parallèle avec n'importe quel autre tutoriel. Avec --no-hide-rate Lorsqu'il est activé, il affiche l'événement system-rate-report du service, qui inclut la fréquence de cycle effective de l'appareil. Comparez cette fréquence entre les variantes Python / C++ (nlohmann) / C++ (Glaze) d'un même tutoriel afin d'observer l'incidence des coûts de sérialisation sur une boucle de commande d'environ 4 kHz.
# Terminal 1 — pick a tutorial variant
./04-haply-inverse-hello-floor # C++ nlohmann
./04-haply-inverse-hello-floor-glz # C++ Glaze
python 04-haply-inverse-hello-floor.py # Python
# Terminal 2 — watch the rate
./10-haply-inverse-events --no-hide-rate