Inverse Haply Inverse 3.5.0
Il s'agit de notre plus importante mise à jour depuis la refonte de l'API il y a un an. La version 3.5.0 introduit une couche mathématique 3D unifiée, une prise en charge complète de Minverse, un flux d'événements typé, une API de paramètres complète et une interface HTTP plus épurée, sans oublier une année de corrections de bogues et d'améliorations visant à faciliter l'utilisation.
Points forts
Couche mathématique 3D unifiée — un pipeline de transformation modulable comprenant des primitives de premier ordre pour la base de l'appareil (cadre), la transformation de montage, la transformation de l'espace de travail et la transformation de navigation, ainsi que des conversions explicites entre les espaces local, de session, d'application et interne.Navigation par bulles — permet de se déplacer dans de vastes espaces de travail virtuels à travers des zones délimitées (primitives SDF) grâce à un contrôle de vitesse basé sur la vitesse, une détection des collisions tenant compte de l'hystérésis et une fonction optionnelle de dérive vers le curseur. Entièrement configurable via HTTP et WebSocket avec échange de données entre l'application et l'espace de travail.Flux d'événements typés — un canal d'événements WebSocket dédié au cycle de vie de l'appareil, aux alertes de sécurité, à l'étalonnage, à la batterie, aux avertissements relatifs au débit de commande et aux indications de dépréciation.API de paramètres — un système complet de paramètres clé-valeur avec des opérations CRUD via HTTP, des indications de type, des contraintes de plage et des descriptions, qui remplace l'ancien fichier de configuration imbriqué.Configuration cohérente des appareils — un ensemble de routes HTTP pour chaque appareil : base, monture, préréglage, transformer, filtres, latéralité, mise à l'échelle du couple, compensation de la gravité, Retour à l'accueil.Calibrage synchronisé de Minverse et du stylet — l'appareil et son stylet sont désormais calibrés ensemble ; le calibrage reste verrouillé jusqu'à ce qu'un embout soit physiquement fixé.HTTP pour une meilleure qualité de vie — des sélecteurs de périphériques basés sur un index (permettant de cibler un périphérique par son index, sans avoir besoin d'un identifiant), un format unifié de requête/réponse commun avec WebSocket, une option d'adhésion {ok, erreur, données} enveloppe (?format=json), ainsi que les sélecteurs de session avec caractères génériques.Nouvelles fonctionnalités
Dispositifs
Minverse — prise en charge officielle incluse dans cette version : détection, séquence de préparation, notifications de sécurité et processus de calibrage synchronisé.Les modèles Ruko et Kingfisher sont désormais reconnus comme des types de poignées officiels.Prise en charge des simulateurs de périphériques — détecter et communiquer avec des périphériques simulés par logiciel parallèlement au matériel réel.Protection de la boucle de connexion — les ports qui présentent un comportement anormal sont automatiquement bloqués ; réinitialiser avec POST /ports/{port}/reset.Détection de la connexion/déconnexion du stylet — détection fiable de la connexion/déconnexion avec suppression des rebonds.Sessions, commandes et WebSocket
Filtrage et persistance des profils de session — les sessions spécifient un nom de profil et la version requise du SDK, que le service conserve entre les reconnexions ; les clients et les outils de surveillance peuvent ainsi filtrer et cibler les sessions en fonction de ce profil.Tampons de commande par session: une session lente ne peut plus bloquer une autre.Carte `configure` explicite pour les commandes ponctuelles — base, préréglage, monture, force_gate, amortissement par appareil, plus profil et base par session, désormais tous en direct sur configurer — aligné sur la carte de configuration de sortie, de sorte que ce que vous envoyez correspond à ce que vous recevez en retour.Support pour appareil personnalisable — sélectionnez un modèle d'espace de travail intégré (valeurs par défaut, avant du bras, bras_avant_centré, LED avant, led_avant_centré) ou envoyer une transformation explicite ; les modifications manuelles du montage inversent automatiquement le préréglage pour personnalisé.Champs de commande nommés — position, vecteur, angles, couples remplacer le terme générique valeurs tableau.définir les couples angulaires remplace définir_couple_angulaire (forme au singulier obsolète).Extensions de trame de session — Les trames de session des versions 3.0 et 3.1 prennent désormais en charge l'extensibilité config, Étatet statut objets ; les nouveaux champs de sortie comprennent force_du_curseur, position_du_curseur, couples angulaires actuels, position_angulaire_actuelle, domaine_de_contrôle, mode_de_contrôle, transformer, vitesse_de_transformation, plus riche config.*et état.sécurité (masqué par défaut).Mises à jour partielles des transformations — n'envoyez que les sous-champs que vous souhaitez modifier (position, rotation, échelle) concernant le montage, la transformation de l'espace de travail et la forme de navigation.HTTP
GET / — version de service.GET/POST/DELETE /paramètres et /paramètres/* — API complète de paramètres clé-valeur.GET /sessions/{session} et GET/POST/DELETE /sessions/{session}/profile.GET /devices?session=<selector> — convertir les coordonnées de l'appareil dans l'espace d'application d'une session donnée.Sélecteurs de périphériques basés sur un index — cibler n'importe quel appareil par son index sans connaître son identifiant (/inverse3/0/... pour le premier Inverse3 ; inverse... (pour tous les appareils Inverse).Modèle unifié de requête/réponse — Les corps des requêtes POST et GET utilisent le même données_de_commande Le format JSON s'adapte à WebSocket ; le code écrit pour un protocole de transport fonctionne également avec l'autre.Enveloppe d'adhésion via ?format=json sur n'importe quel itinéraire ; /paramètres* et GET /retour_à_la_page_d'accueil par défaut {ok, erreur, données}. Utiliser ?format=simple pour la forme brute.Caractères génériques du sélecteur de session — * (n'importe quelle séquence) et ? (un seul caractère) dans les noms de profil.Sélecteurs décodés en pourcentage — %2A, %3A, etc. sont décodés avant d'être acheminés.Événements
Flux d'événements WebSocket dédié sur communication/événements/port.24 catégories d'événements prédéfinies, notamment le cycle de vie de l'appareil, la sécurité (frein électronique, détection de corps étrangers, décrochage), les échecs d'étalonnage, les alertes de batterie, les avertissements de session, les taux de contrôle faibles ou critiques, la validation des entrées et les remarques concernant les fonctionnalités obsolètes.Observabilité
Messages de journal transmis à Tracy avec des couleurs correspondant au niveau lors du profilage.Tracy est activé sur chaque gestionnaire HTTP.Événements liés aux statistiques de synchronisation de la boucle principale.Répertoire de journaux et nom d'hôte du serveur configurables (compatible avec Docker).À venir dans la version 3.6
SDF Haptic Effects (SDF HFX) — les bases ont été mises en place dans la version 3.5 (module, cycle de vie, sérialisation des commandes et des états fournie par le module) et l'API publique sera disponible avec une documentation complète dans la version 3.6.Améliorations
Filtrage des oscillations de force — détection des oscillations par axe, récupération progressive en 8 étapes, validation d'entrée avec hystérésis et windows de relâchement asymétriques.Filtre à seuil forcé en temps réel — configurable via configure.force_gate.gain via WebSocket ou HTTP avec une connexion persistante par défaut.La fréquence maximale de la boucle principale a été portée à 32 kHz pour les applications de précision.Des charges utiles WebSocket plus petites — sous-champs de transformation par défaut de l'identité (position = 0, rotation = identité, échelle = 1) sont omis par défaut dans la sortie, ce qui réduit la taille des données utiles et rétablit la compatibilité avec la limite de 4 Ko imposée aux anciens paquets Unity. Deux paramètres avancés (sérialisation/champs_explicites, sérialisation/forcer_la_transformation_complète) rétablir tous les champs pour les consommateurs qui en ont besoin.Réduction de la gigue de la boucle principale — Le traitement des messages WebSocket ne bloque plus le tick de la boucle principale pendant l'analyse JSON et l'envoi réseau ; la planification du tick de session a été avancée avant la sérialisation de la réponse.Par défaut, les serveurs sont limités à localhost — activer l'accès au réseau avec le communication/lier_toutes_les_interfaces réglage.Les caractères génériques du sélecteur de périphériques utilisent une syntaxe de préfixe (par exemple inverse (convient à tous les appareils Inverse).Commandes d'amortissement s'est installé dans le configurer carte ci-contre force_gate.L'enregistreur de fichiers à rotation remplace l'ancien, avec un répertoire configurable.Commandes et état fournis par les modules — les modules peuvent intégrer leurs propres commandes, champs de configuration et données de sortie dans la trame WebSocket sans modifier le schéma de base.Corrections
Une année de corrections de bogues ; voici les plus importantes.
Une vitesse de session irrégulière dans certaines conditions.GripHook (Verse Grip Stopper) ne se débloquait pas correctement lorsqu'aucune simulation n'était en cours.Les délais d'expiration d'Inverse3 étaient trop courts et provoquaient des boucles de déconnexion sur les appareils à démarrage lent.Arrêt incorrect du service sous Windows — le serveur HTTP n'était pas toujours correctement libéré lors de l'arrêt du système.Boucle de reconnexion lorsque le service envoyait des commandes non prises en charge à des versions antérieures du micrologiciel.L'énumération des appareils Bluetooth a saturé le journal des systèmes équipés d'adaptateurs Bluetooth.Le service plante lorsqu'on le redémarre plusieurs fois de suite.Le dongle Wireless Verse Grip se bloque sur les ordinateurs portables Ubuntu après la mise en veille ou la sortie de veille.La procédure d'établissement de la connexion entre le Wireless Verse Grip et Linux ou macOS s'adapte désormais correctement lorsque la première tentative de détection échoue.Emplacement du fichier de configuration MacOS — La configuration est désormais enregistrée dans ~/Bibliothèque/Application Support/ au lieu de prendre le mauvais chemin.Gestion des signaux SIGSEGV sous Linux et macOS — le processus ne se bloque plus en boucle lors de la réception de signaux fatals lorsque la capture des plantages multithread est activée.Remplacement des commandes entre sessions — les commandes de configuration d'une session pouvaient être remplacées sans avertissement par celles d'une autre session ; elles sont désormais filtrées et fusionnées correctement.Les commandes de la sonde écrasent la configuration — envoi de sessions de surveillance (par exemple, Haply ) position_de_la_sonde ne remplace plus silencieusement les modifications en attente concernant les paramètres de base, les préréglages ou les profils.Affichage des poignées prototypes — un prototype de matériel s'est affiché par erreur comme une poignée standard au lieu d'une poignée personnalisée.La convention de matrice héritée `set_basis` est à nouveau prise en charge pour les clients qui n'ont pas encore effectué la migration.La force de coup de pied inverse 3 lors de la déconnexion d'une session ne provoque plus de pic de force résiduel.Perte de connexion WebSocket due à des cycles rapides de connexion/déconnexion.`session_id` WebSocket a été publié en feuilleton sous le titre 0 dans certaines charges utiles sortantes.Sous Windows, --niveau-journal est désormais pris en compte lorsqu'il est associé à --dev (auparavant réinitialisé automatiquement à débogage).Dépréciations
Toujours fonctionnel, mais sera supprimé dans une prochaine version majeure. Les réponses comprennent un avertissement_de_dépréciation champ, le cas échéant.
| Obsolète | Remplacement |
|---|---|
| POST /force_scale | POSTinverse |
| POST /compensation_gravitationnelle | POST /{device}/{id}/config/gravity_compensation |
| POST /torque_scaling | POST /{device}/{id}/config/torque_scaling |
| POST /device_handedness | POST /{device}/{id}/config/handedness |
| POST /serial_enable | POST /paramètres/communication/série/activé |
| POST /experimental/features/grip_dropped_simulation_stopper | API des paramètres |
| POST /experimental/features/screensaver_enable | API des paramètres |
| WebSocket command_data.values | position, vecteur, angles, couples |
| WebSocket définir_couple_angulaire | définir les couples angulaires |
| WebSocket position_du_curseur_de_sonde | position_de_la_sonde |
| WebSocket définir_l'origine_des_coordonnées | fichier de configuration prédéfini |
| Au niveau de la session WebSocket définir_la_base | configuration de base |
Remarques concernant la compatibilité
Aucune modification majeure par rapport à la version 3.4.19. Deux remarques concernant les intégrations existantes :
Les points de terminaison HTTP obsolètes incluent désormais un avertissement_de_dépréciation champ dans la réponse — les clients qui valident strictement les schémas de réponse devraient autoriser ce champ supplémentaire.Le valeurs champ dans WebSocket données_de_commande est obsolète mais toujours analysé ; privilégiez les champs nommés.Tutoriels et documentation
Nouveaux tutoriels: 05 Contrôle de position, 06 Combiné (Inverse3 + Verse Grip), 07 Base et montage, 08 Configurateur à distance HTTP, 09 Télécommande WebSocket, 10 Écouteur de flux d'événements.Nouvelle variante de Glaze de chaque tutoriel C++ (cpp-glz/) parallèlement à la variante nlohmann/json existante.Tous les tutoriels ont été réécrits pour l'API v3.1 (port 10001, fichier de configuration prédéfini, champs de commande nommés, print_state() (assistants).Le vieux tutoriel sur le Verse Grip Stopper a été supprimé — il a été remplacé par le nouveau tutoriel combiné.La documentation publique a été mise à jour dans les guides du SDK, la référence API et les pages consacrées au matériel.