Tutoriels
Chaque tutoriel est un programme autonome qui démontre une fonctionnalité de Inverse Service. Trois variantes de langage sont proposées côte à côte afin que vous puissiez comparer les idiomes et choisir la pile technologique qui convient à votre projet :
- Python — le point d'entrée le plus court et le plus simple (
websockets+json) - C++ (nlohmann/json) — C++11 portable, JSON analysé à l'exécution
- C++ (Glaze) — C++20 moderne, avec réflexion à la compilation et analyse sans allocation, recommandé pour les boucles haptiques en temps réel
Le code source est publié dans deux dépôts d'exemples publics :
- haply-inverse-cpp-samples — 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 de Inverse Service épingle une étiquette correspondante dans les deux dépôts : suivez la branche release/<version> pour rester sur la version qui correspond à cette documentation.
Prérequis
- Inverse Service est en cours d'exécution (via Haply Hub ou via le programme d'installation autonome) sur le port
10001. - Au moins un appareil Haply est détecté. Chaque tutoriel cible une famille d'appareils précise ; voir le tableau ci-dessous.
- Tutoriels Python :
pip install websockets(les tutoriels 04, 05, 06, 07, 08 et 09 nécessitent en pluskeyboard, qui requiert des privilèges élevés sur Linux ; les tutoriels 08 et 09 nécessitent aussirequests). - Tutoriels C++ : CMake 3.15+ et un compilateur C++11 pour les variantes nlohmann, C++20 pour les variantes Glaze (
-glz). LeCMakeLists.txtde premier niveau du dépôt d'exemples récupèrelibhv,nlohmann/jsonetglazevia FetchContent : aucune configuration manuelle des dépendances n'est requise.
Liste des tutoriels
| # | Nom | Appareils | Variantes | Ce que vous apprendrez |
|---|---|---|---|---|
| 00 | Liste des appareils | Tous | Py · C++ · C++ Glaze | Découverte des appareils HTTP, requêtes limitées à la session |
| 01 | Affichage Inverse3 | Inverse3 | Py · C++ · C++ Glaze | Diffusion de l'état WebSocket, maintien de connexion à force nulle, échange initial au premier message |
| 02 | Affichage VerseGrip | VG filaire | Py · C++ · C++ Glaze | Diffusion de l'orientation, maintien de connexion avec probe_orientation, quaternion vers Euler |
| 03 | Affichage VG sans fil | WVG | Py · C++ · C++ Glaze | Boutons, batterie, capteur à effet Hall |
| 04 | Hello 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 maintenu (Python) |
| 06 | Combiné | Inverse3 + WVG | Py · C++ · C++ Glaze | Boucle multi-appareils, pilotage du curseur par direction issue du quaternion |
| 07 | Base et montage | Inverse3 | Py · C++ · C++ Glaze | Remplacements à l'exécution configure.basis, configure.preset et configure.mount ; exclusion mutuelle entre préréglage et montage |
| 08 | Configuration à distance HTTP | Inverse3 | Py · C++ · C++ Glaze | Configurateur inter-sessions réservé à HTTP : découverte d'une session par profil, puis envoi interactif de base / préréglage / montage en POST via 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 appareils 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 10 (Événements) est conçu pour être exécuté en parallèle avec n'importe quel autre tutoriel. Avec --no-hide-rate 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 pour observer l'incidence des frais 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