Tutoriel
Chaque tutoriel est un programme autonome qui illustre l'une des fonctionnalités d'Inverse Service. Les trois variantes de langage étant présentées côte à côte, vous pouvez comparer leur syntaxe et choisir la pile la mieux adaptée à votre projet :
- Python — Le point d'entrée le plus court et le plus simple pour se lancer (
websockets+json) - C++ (nlohmann/json) — Implémentation C++11 hautement portable avec analyse syntaxique du JSON à l'exécution
- C++ (Glaze) — Dernière version de C++20 dotée de la réflexion à la compilation et d'un analyseur syntaxique à allocation nulle. Recommandé pour les boucles haptiques en temps réel.
Le code source est disponible dans deux dépôts d'exemples publics :
- Exemples de code C++ pour l'inversion haply — Chaque tutoriel dispose de son propre répertoire et comprend à la fois la version nlohmann/json (C++11) et la version Glaze (C++20). En ce qui concerne les cibles de compilation, pour la version Glaze,
-glzest suivi du suffixe « no ». - haply-inverse-python-samples — Il y a un répertoire par tutoriel.
Dans chaque version d'Inverse Service, les balises correspondant aux deux dépôts sont fixes. Pour continuer à utiliser une version compatible avec ce document,release/<version> Veuillez suivre la branche.
Conditions préalables
- Service Inverse
port10001ce qui se passe (Hub Haplyou bienProgramme d'installation autonome(à lancer à partir de l'un ou l'autre). - Il faut qu'au moins un appareil Haply ait été détecté. Chaque tutoriel est destiné à une famille d'appareils spécifique. Veuillez vous reporter au tableau ci-dessous.
- Tutoriel Python:
pip install websockets(Dans les tutoriels 04, 05, 06, 07, 08 et 09, on aborde égalementkeyboardC'est indispensable. Cela nécessite des droits d'administrateur sous Linux. Dans les tutoriels 08 et 09,requestsest également nécessaire). - Tutoriel C++: La version nlohmann nécessite CMake 3.15 ou une version ultérieure ainsi qu'un compilateur compatible C++11, tandis que Glaze (
-glz) Cette version nécessite un compilateur compatible avec C++20. Au niveau racine du référentiel d'exemples,CMakeLists.txtMais via FetchContent,libhv,nlohmann/json,glazeIl n'est pas nécessaire de configurer manuellement les dépendances pour l'obtenir.
Liste des tutoriels
| # | Nom | Appareil | Variante | Contenu pédagogique |
|---|---|---|---|---|
| 00 | Liste des appareils | Au choix | Py · C++ · C++ Glaze | Détection des appareils via HTTP, requêtes dans le cadre de la session |
| 01 | Inverse3 Sortie | Inverse3 | Py · C++ · C++ Glaze | Diffusion en continu de l'état via WebSocket, maintien de connexion sans effort, établissement de la connexion par le premier message |
| 02 | Sortie VerseGrip | VG par câble | Py · C++ · C++ Glaze | Diffusion en continu de la posture,probe_orientation Conversion des angles de Quaternion en angles d'Euler par KeepAlive |
| 03 | Sortie VG sans fil | WVG | Py · C++ · C++ Glaze | Boutons, batterie, capteur de niveau |
| 04 | Bonjour Floor | Inverse3 | Py · C++ · C++ Glaze | Premier effet haptique — set_cursor_force Ressort de pénalité par |
| 05 | Contrôle de position | Inverse3 | Py · C++ · C++ Glaze | set_cursor_position Commandes : cibles aléatoires (C++) ou déplacement par maintien enfoncé des touches WASD (Python) |
| 06 | composé | Inverse3 WVG | Py · C++ · C++ Glaze | Boucle sur plusieurs périphériques, pilotage du curseur selon une direction définie par un quaternion |
| 07 | Normes et fixations | Inverse3 | Py · C++ · C++ Glaze | configure.basis,configure.preset、au moment de l'exécution configure.mount Remplacement par. Incompatibilité entre les préréglages et les montages |
| 08 | Configuration à distance HTTP | Inverse3 | Py · C++ · C++ Glaze | Configurateur de sessions dédié au protocole HTTP. Détecte les sessions via des profils et envoie de manière interactive des requêtes POST vers « basis », « preset » et « mount » via REST. |
| 09 | Télécommande WS | Inverse3 | Py · C++ · C++ Glaze | Navigateur d'espace de travail en temps réel : après la détection des sessions et des périphériques via HTTP, à chaque tick via WebSocket set_transform en streaming |
| 10 | Événement | — | Py · C++ · C++ Glaze | Écouteur de flux d'événements sur le port 10020. Filtrage par niveau et par nom |
Astuce — Benchmark de la boucle haptique
Le tutoriel n° 10 (Événements) est conçu pour pouvoir être suivi en parallèle avec n'importe quel autre tutoriel.--no-hide-rate Si vous activez cette option, le service system-rate-report Affiche l'événement. Cet événement contient la fréquence de mise à jour effective du périphérique. Comparez cette fréquence entre les différentes variantes de ce tutoriel (Python / C++ (nlohmann) / C++ (Glaze)) afin d'évaluer l'impact de la surcharge liée à la sérialisation sur une boucle de contrôle 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