Tutoriel
Chaque tutoriel est un programme autonome qui illustre l'une des fonctionnalités d'Inverse Service. Trois variantes linguistiques sont proposées en parallèle afin de vous permettre de comparer les conventions de codage respectives et de choisir la pile technologique la mieux adaptée à votre projet :
- Python — La façon la plus simple et la plus accessible de se lancer (
websockets+json) - C++ (nlohmann/json) — Bibliothèque C++11 portable permettant l'analyse de JSON à l'exécution
- C++ (Glaze) — Basé sur le C++20 moderne, utilisant la réflexion à la compilation et l'analyse sans allocation, recommandé pour les boucles tactiles 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 — Un répertoire par tutoriel, contenant à la fois les variantes nlohmann/json (C++11) et Glaze (C++20). Parmi les cibles de compilation, la variante Glaze comporte
-glzsuffixe. - haply-inverse-python-samples — Un répertoire par tutoriel.
Chaque version d'Inverse Service se voit attribuer une balise correspondante dans deux dépôts : veuillez suivre release/<version> Branche, afin de conserver une version cohérente avec le présent document.
Conditions préalables
- Service Inverse
En cours d'exécution (via Hub Haply ou Programme d'installation autonome (démarrage), le port d'écoute est10001。 - Au moins un appareil Haply a été détecté. Chaque tutoriel est dédié à une gamme d'appareils spécifique ; veuillez vous reporter au tableau ci-dessous.
- Tutoriel Python:
pip install websockets(Les tutoriels 04, 05, 06, 07, 08 et 09 sont encore nécessaires)keyboard, sous Linux, des droits d'administrateur sont nécessaires ; les tutoriels 08 et 09 nécessitent égalementrequests). - Tutoriel C++: La variante nlohmann nécessite CMake 3.15 ou une version ultérieure, ainsi qu'un compilateur prenant en charge C++11 ; Glaze (
-glz) Cette variante nécessite un compilateur prenant en charge C++20. À la racine du dépôt d'exemples, le fichierCMakeLists.txtsera récupéré via FetchContentlibhv,nlohmann/jsonetglaze, sans avoir à configurer manuellement les dépendances.
Liste des tutoriels
| # | Nom | Équipements | Variantes | Contenu pédagogique |
|---|---|---|---|---|
| 00 | Liste des équipements | Au choix | Py · C++ · C++ Glaze | Détection des périphériques HTTP, requête au niveau de la session |
| 01 | Imprimer Inverse3 | Inverse3 | Py · C++ · C++ Glaze | Diffusion en continu de l'état WebSocket, maintien de la connexion sans effort, poignée de main lors du premier message |
| 02 | Imprimer VerseGrip | VG par câble | Py · C++ · C++ Glaze | Diffusion en continu des poses,probe_orientation Recherche de crèche, quaternions → angles d'Euler |
| 03 | Impression sans fil VG | WVG | Py · C++ · C++ Glaze | Boutons, piles, capteurs à effet Hall |
| 04 | Bonjour Floor | Inverse3 | Py · C++ · C++ Glaze | Premier effet tactile — set_cursor_force Ressort de punition |
| 05 | Contrôle de position | Inverse3 | Py · C++ · C++ Glaze | set_cursor_position Commandes : cibles aléatoires (C++) ou déplacement en maintenant les touches WASD enfoncées (Python) |
| 06 | Combinaison | Inverse3 WVG | Py · C++ · C++ Glaze | Boucle multi-périphériques, pilotage du curseur : conversion des quaternions en directions |
| 07 | Basis et Mount | Inverse3 | Py · C++ · C++ Glaze | configure.basis,configure.preset, ainsi que lors de l'exécution configure.mount Couverture ; les commandes « preset » et « mount » sont incompatibles |
| 08 | Configuration à distance via HTTP | Inverse3 | Py · C++ · C++ Glaze | Configurateur intersessionnel réservé au protocole HTTP : détection des sessions par profil (profile), via une requête POST interactive REST vers /preset/mount |
| 09 | WS Télécommande | Inverse3 | Py · C++ · C++ Glaze | Navigateur d'espace de travail en temps réel : détection préalable des sessions HTTP et des appareils, puis diffusion en continu à chaque tick via WebSocket set_transform |
| 10 | Événement | — | Py · C++ · C++ Glaze | Écoute du flux d'événements sur le port 10020, avec prise en charge du filtrage par niveau/nom |
Remarque — Test de performance de la boucle tactile
Le tutoriel n° 10 (Événements) est conçu pour pouvoir être suivi en parallèle avec n'importe quel autre tutoriel. Activer --no-hide-rate 后,它会输出服务的 system-rate-report Exemple illustrant une fréquence de tick valide pour un périphérique. En comparant les fréquences entre les différentes variantes du même tutoriel en Python / C++ (nlohmann) et en C++ (Glaze), on peut observer l'impact de la surcharge liée à la sérialisation sur une boucle de contrôle 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