Aller directement au corps du texte

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 :

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 outre keyboardest nécessaire, ce qui nécessite des droits d'administrateur sous Linux. Les tutoriels 08 et 09 contiennent requestsest é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'exemples CMakeLists.txtvia FetchContent libhv, nlohmann/json, glazeComme il est importé, il n'est pas nécessaire de configurer manuellement les dépendances.

Liste des tutoriels​

#NomAppareilVariationContenu pédagogique
00Liste des appareilsTous les appareilsPy · C++ · C++ GlazeRecherche de périphériques HTTP, requêtes portant sur la portée de la session
01Inverse3 SortieInverse3Py · C++ · C++ GlazeDiffusion en continu de l'état WebSocket, « zero-force keep-alive », poignée de main du premier message
02Impression VerseGripVG filairePy · C++ · C++ GlazeDiffusion directionnelle, probe_orientation KeepAlive, transformation des quaternions en coordonnées d'Euler
03Sortie VG sans filWVGPy · C++ · C++ GlazeBoutons, batterie, capteur de trou
04Bonjour FloorInverse3Py · C++ · C++ GlazePremier effet haptique — set_cursor_force Ressort de pénalité
05Contrôle de positionInverse3Py · C++ · C++ Glazeset_cursor_position Commandes : déplacement vers un point cible aléatoire (C++) ou déplacement à l'aide des touches WASD (Python)
06CombinaisonInverse3 WVGPy · C++ · C++ GlazeBoucle multi-périphériques, pilotage du curseur basé sur l'orientation des quaternions
07Système de coordonnées de référence et montureInverse3Py · C++ · C++ Glazeconfigure.basis, configure.preset, exécution configure.mount Redéfinition ; incompatibilité entre les préréglages et les montages
08Configuration à distance via HTTPInverse3Py · C++ · C++ GlazeConfigurateur 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
09Télécommande WSInverse3Py · C++ · C++ GlazeNavigateur 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