Passer directement au contenu principal

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, -glz est 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
    port 10001 ce 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 également keyboard C'est indispensable. Cela nécessite des droits d'administrateur sous Linux. Dans les tutoriels 08 et 09, requests est é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.txt Mais via FetchContent, libhv,nlohmann/json,glaze Il n'est pas nécessaire de configurer manuellement les dépendances pour l'obtenir.

Liste des tutoriels​

#NomAppareilVarianteContenu pédagogique
00Liste des appareilsAu choixPy · C++ · C++ GlazeDétection des appareils via HTTP, requêtes dans le cadre de la session
01Inverse3 SortieInverse3Py · C++ · C++ GlazeDiffusion en continu de l'état via WebSocket, maintien de connexion sans effort, établissement de la connexion par le premier message
02Sortie VerseGripVG par câblePy · C++ · C++ GlazeDiffusion en continu de la posture,probe_orientation Conversion des angles de Quaternion en angles d'Euler par KeepAlive
03Sortie VG sans filWVGPy · C++ · C++ GlazeBoutons, batterie, capteur de niveau
04Bonjour FloorInverse3Py · C++ · C++ GlazePremier effet haptique — set_cursor_force Ressort de pénalité par
05Contrôle de positionInverse3Py · C++ · C++ Glazeset_cursor_position Commandes : cibles aléatoires (C++) ou déplacement par maintien enfoncé des touches WASD (Python)
06composéInverse3 WVGPy · C++ · C++ GlazeBoucle sur plusieurs périphériques, pilotage du curseur selon une direction définie par un quaternion
07Normes et fixationsInverse3Py · C++ · C++ Glazeconfigure.basis,configure.preset、au moment de l'exécution configure.mount Remplacement par. Incompatibilité entre les préréglages et les montages
08Configuration à distance HTTPInverse3Py · C++ · C++ GlazeConfigurateur 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.
09Télécommande WSInverse3Py · C++ · C++ GlazeNavigateur 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