Aller au contenu principal

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 :

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 plus keyboard, qui requiert des privilèges élevés sur Linux ; les tutoriels 08 et 09 nécessitent aussi requests).
  • Tutoriels C++ : CMake 3.15+ et un compilateur C++11 pour les variantes nlohmann, C++20 pour les variantes Glaze (-glz). Le CMakeLists.txt de premier niveau du dépôt d'exemples récupère libhv, nlohmann/json et glaze via FetchContent : aucune configuration manuelle des dépendances n'est requise.

Liste des tutoriels​

#NomAppareilsVariantesCe que vous apprendrez
00Liste des appareilsTousPy · C++ · C++ GlazeDécouverte des appareils HTTP, requêtes limitées à la session
01Affichage Inverse3Inverse3Py · C++ · C++ GlazeDiffusion de l'état WebSocket, maintien de connexion à force nulle, échange initial au premier message
02Affichage VerseGripVG filairePy · C++ · C++ GlazeDiffusion de l'orientation, maintien de connexion avec probe_orientation, quaternion vers Euler
03Affichage VG sans filWVGPy · C++ · C++ GlazeBoutons, batterie, capteur à effet Hall
04Hello FloorInverse3Py · C++ · C++ GlazePremier effet haptique : ressort de pénalité set_cursor_force
05Contrôle de positionInverse3Py · C++ · C++ GlazeContrôle set_cursor_position, cibles aléatoires (C++) ou déplacement WASD maintenu (Python)
06CombinéInverse3 + WVGPy · C++ · C++ GlazeBoucle multi-appareils, pilotage du curseur par direction issue du quaternion
07Base et montageInverse3Py · C++ · C++ GlazeRemplacements à l'exécution configure.basis, configure.preset et configure.mount ; exclusion mutuelle entre préréglage et montage
08Configuration à distance HTTPInverse3Py · C++ · C++ GlazeConfigurateur 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
09Télécommande WSInverse3Py · C++ · C++ GlazeNavigateur 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