Tutoriels
Chaque tutoriel est un programme autonome qui illustre une fonctionnalité d'Inverse Service. Trois versions linguistiques sont proposées côte à côte afin que vous puissiez comparer les expressions idiomatiques et choisir la pile la mieux adaptée à votre projet :
- Python — la manière la plus rapide et la plus simple de commencer (
websockets+json) - C++ (nlohmann/json) — compatible avec C++11, le JSON est analysé à l'exécution
- C++ (Glaze) — langage moderne conforme à C++20, réflexion à la compilation et analyse syntaxique sans allocation de mémoire, recommandé pour les boucles haptiques en temps réel
Le code source est publié dans deux dépôts publics d'exemples :
- Exemples de code C++ pour l'inversion haply — un répertoire par tutoriel contenant des variantes pour nlohmann/json (C++11) et Glaze (C++20). Les cibles de compilation de la variante Glaze portent le suffixe
-glz. - haply-inverse-python-samples — un répertoire par tutoriel.
Chaque version du service Inverse associe une balise correspondante dans les deux dépôts. Suivez la branche release/<version>, afin de conserver la version correspondant à cette documentation.
Conditions préalables
- Der Service Inverse
fonctionne (soit via le Hub Haply ou le programme d'installation autonome) sur le port10001. - Au moins un appareil « Haply » est détecté. Les tutoriels s'adressent chacun à 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, ce qui nécessite des droits étendus sous Linux ; les tutoriels 08 et 09 nécessitent en outrerequests). - Tutoriels C++: CMake 3.15 ou version ultérieure et un compilateur C++11 pour les variantes nlohmann, ou C++20 pour les variantes Glaze (
-glz). DieCMakeLists.txtse charge au niveau supérieur du dépôt d'exemplelibhv,nlohmann/jsonetglazeÀ propos de FetchContent : il n'est pas nécessaire de configurer manuellement les dépendances.
Liste des tutoriels
| # | Nom | Appareils | Variantes | Ce que vous apprendrez |
|---|---|---|---|---|
| 00 | Liste des appareils | Au choix | Py · C++ · C++ Glaze | Détection des appareils HTTP, requêtes liées à une session |
| 01 | Numéro Inverse3 | Inverse3 | Py · C++ · C++ Glaze | Diffusion d'état WebSocket, Keepalive sans effort, handshake avec le premier message |
| 02 | Édition VerseGrip | VG (avec câble) | Py · C++ · C++ Glaze | Streaming d'orientation, Keepalive via probe_orientation, Quaternion → Euler |
| 03 | Édition Wireless VG | WVG | Py · C++ · C++ Glaze | Touches, batterie, capteur à effet Hall |
| 04 | Bonjour Boden | Inverse3 | Py · C++ · C++ Glaze | Premier effet tactile — ressort de tension au-dessus de set_cursor_force |
| 05 | Commande de position | Inverse3 | Py · C++ · C++ Glaze | Commande via set_cursor_position, cibles aléatoires (C++) ou déplacement avec les touches WASD lorsque la touche est enfoncée (Python) |
| 06 | Combiné | Inverse3 WVG | Py · C++ · C++ Glaze | Boucle pour plusieurs appareils, commande du curseur via la conversion « quaternion-direction » |
| 07 | Socle et support | Inverse3 | Py · C++ · C++ Glaze | configure.basis, configure.preset ainsi que les remplacements de durée via configure.mount; incompatibilité entre « Preset » et « Mount » |
| 08 | Configuration à distance via HTTP | Inverse3 | Py · C++ · C++ Glaze | Uniquement pour HTTP : configurateur inter-sessions — Rechercher une session à partir du profil et définir de manière interactive les paramètres « Base », « Preset » et « Mount » via REST (POST) |
| 09 | Télécommande WS | Inverse3 | Py · C++ · C++ Glaze | Navigateur d'espace de travail en temps réel : détection des sessions HTTP et des appareils, puis diffusion en continu de set_transform pro Takt via WebSocket |
| 10 | Événements | — | Py · C++ · C++ Glaze | Écouteur pour le flux d'événements sur le port 10020, filtrage par niveau/nom |
Conseil — Test de référence de la boucle haptique
Le tutoriel n° 10 (Événements) est conçu pour être suivi en parallèle de n'importe quel autre tutoriel. Si --no-hide-rate est activée, l'événement system-rate-report du service qui contient la fréquence d'horloge effective de l'appareil. Comparez les fréquences des variantes Python / C++ (nlohmann) / C++ (Glaze) du même tutoriel afin d'observer l'impact de la surcharge liée à la sérialisation sur une boucle de régulation fonctionnant à 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