Tutoriel
Chaque tutoriel est un programme autonome qui présente une fonctionnalité spécifique d'Inverse Service. Les trois variantes linguistiques sont proposées côte à côte, ce qui vous permet de comparer les expressions idiomatiques et de choisir la pile technologique la mieux adaptée à votre projet :
- Python — Le point d'entrée le plus court et le plus facile pour commencer (
websockets+json) - C++ (nlohmann/json) — JSON en C++11, hautement portable, avec analyse syntaxique à l'exécution
- C++ (Glaze) — Prend en charge la réflexion à la compilation et l'analyse syntaxique sans allocation de mémoire, conformément aux dernières spécifications C++20 ; recommandé pour les boucles haptiques en temps réel
Le code source est disponible dans deux dépôts d'exemples ouverts au public :
- Exemples de code C++ pour l'inversion haply — Chaque tutoriel dispose de son propre répertoire et comprend à la fois les variantes nlohmann/json (C++11) et Glaze (C++20). La cible de compilation comprend, pour la variante Glaze,
-glzUn suffixe est ajouté. - haply-inverse-python-samples — Chaque tutoriel dispose de son propre répertoire.
Chaque version d'Inverse Service fixe des balises correspondantes dans les deux dépôts. Pour conserver une version correspondant à ce document, release/<version> Suivez la branche.
Conditions préalables
- Port
10001de Service Inverse
Le service doit être en cours d'exécution (Hub Haply ou bien Programme d'installation autonome(à exécuter). - Au moins un appareil « Haply » doit être détecté. Chaque tutoriel est destiné à une gamme 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, il y a en outrekeyboardest nécessaire, ce qui nécessite des droits d'administrateur sous Linux. Les tutoriels 08 et 09 contiennentrequestsest également nécessaire.) - Tutoriel C++: La variante nlohmann nécessite CMake 3.15 ou une version ultérieure ainsi qu'un compilateur C++11, tandis que Glaze (
-glz) Cette variante nécessite un compilateur C++20. À la racine du dépôt d'exemplesCMakeLists.txtvia FetchContentlibhv,nlohmann/json,glazeComme il est importé, il n'est pas nécessaire de configurer manuellement les dépendances.
Liste des tutoriels
| # | Nom | Appareil | Variation | Contenu pédagogique |
|---|---|---|---|---|
| 00 | Liste des appareils | Tous les appareils | Py · C++ · C++ Glaze | Recherche de périphériques HTTP, requêtes portant sur la portée de la session |
| 01 | Inverse3 Sortie | Inverse3 | Py · C++ · C++ Glaze | Diffusion en continu de l'état WebSocket, « zero-force keep-alive », poignée de main du premier message |
| 02 | Impression VerseGrip | VG filaire | Py · C++ · C++ Glaze | Diffusion directionnelle, probe_orientation KeepAlive, transformation des quaternions en coordonnées d'Euler |
| 03 | Sortie VG sans fil | WVG | Py · C++ · C++ Glaze | Boutons, batterie, capteur de trou |
| 04 | Bonjour Floor | Inverse3 | Py · C++ · C++ Glaze | Premier effet haptique — set_cursor_force Ressort de pénalité |
| 05 | Contrôle de position | Inverse3 | Py · C++ · C++ Glaze | set_cursor_position Commandes : déplacement vers un point cible aléatoire (C++) ou déplacement à l'aide des touches WASD (Python) |
| 06 | Combinaison | Inverse3 WVG | Py · C++ · C++ Glaze | Boucle multi-périphériques, pilotage du curseur basé sur l'orientation des quaternions |
| 07 | Système de coordonnées de référence et monture | Inverse3 | Py · C++ · C++ Glaze | configure.basis, configure.preset, exécution configure.mount Redéfinition ; incompatibilité entre les préréglages et les montages |
| 08 | Configuration à distance via HTTP | Inverse3 | Py · C++ · C++ Glaze | Configurateur de sessions HTTP dédié : après avoir recherché une session à l'aide d'un profil, envoyer de manière interactive les requêtes POST « 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 HTTP et des appareils, à chaque tick via WebSocket set_transform streaming |
| 10 | Événement | — | Py · C++ · C++ Glaze | Écouteur de flux d'événements sur le port 10020, filtrage par niveau/nom |
Astuce — Benchmark de la boucle haptique
Le tutoriel n° 10 (Événements) est conçu pour être utilisé conjointement avec les autres tutoriels. --no-hide-rate Si vous activez cette option, le service system-rate-report Un événement est généré, qui contient la fréquence de mise à jour réelle du périphérique. En comparant ces fréquences dans les variantes Python / C++ (nlohmann) / C++ (Glaze) du même tutoriel, on constate l'impact de la surcharge liée à la sérialisation sur la boucle de contrôle, de l'ordre de 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