Skip to main content
Version : 3.5.x

v3.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, Minverse complète 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 — naviguez dans de vastes espaces de travail virtuels à travers des zones délimitées (primitives SDF) grâce à un contrôle de la vitesse basé sur une carte de 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 taux de contrôle et aux indications de fin de prise en charge.
  • 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 uniforme des appareils — un ensemble de routes HTTP pour chaque appareil : basis, mount, preset, transform, filters, handedness, torque_scaling, gravity_compensation, home_return.
  • Calibrage synchronisé Minverse 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, error, data} 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 workflow 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étection et communication avec des périphériques simulés par logiciel parallèlement au matériel physique.
  • 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 prise en main 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.
  • Explicite configure table de correspondance pour les commandes ponctuellesbasis, preset, mount, force_gate, damping par appareil, plus profile et basis par session, désormais tous en direct sur configure — 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 — choisir un modèle d'espace de travail intégré (defaults, arm_front, arm_front_centered, led_front, led_front_centered) ou envoyer une transformation explicite ; les modifications manuelles du montage inversent automatiquement le préréglage pour custom.
  • Champs de commande nommésposition, vector, angles, torques remplacer le terme générique values tableau.
  • set_angular_torques remplace set_angular_torque (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, stateet status objets ; les nouveaux champs de sortie comprennent current_cursor_force, current_cursor_position, current_angular_torques, current_angular_position, control_domain, control_mode, transform, transform_velocity, plus riche config.*et status.safety (masqué par défaut).
  • Mises à jour partielles des transformations — n'envoyez que les sous-champs que vous souhaitez modifier (position, rotation, scale) concernant le montage, la transformation de l'espace de travail et la forme de navigation.

HTTP

  • GET / — version du service.
  • GET/POST/DELETE /settings et /settings/* — une 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 de la gamme Inverse).
  • Modèle unifié de requête/réponse — Les corps des requêtes POST et GET utilisent le même command_data 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 ; /settings* et GET /home_return par défaut {ok, error, data}. Utiliser ?format=plain 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.

Evénements

  • Flux d'événements WebSocket dédié sur communication/events/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, un taux de contrôle faible ou critique, la validation des entrées et les remarques concernant les fonctionnalités obsolètes.

Observabilité

  • Les messages de journalisation sont transmis à Tracy avec des couleurs correspondant à leur 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 fondements ont été intégrés 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 fenêtres de relâchement asymétriques.
  • Filtre à coupure forcée 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 = identity, scale = 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 messages dans les anciens paquets Unity. Deux paramètres avancés (serialization/explicit_fields, serialization/force_complete_transforms) 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 des ticks 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/bind_all_interfaces paramètre.
  • 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 de la gamme Inverse).
  • Commandes d'amortissement s'est installé dans le configure 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.
  • 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 fermé à 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 une mise en veille ou une reprise.
  • 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 ~/Library/Application Support/ au lieu de s'égarer.
  • 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 en arrière-plan par celles d'une autre session ; elles sont désormais filtrées et fusionnées correctement.
  • Les commandes de Probe écrasent la configuration — envoi de sessions de surveillance (par exemple, Haply ) probe_position Ne plus écraser silencieusement les modifications en attente concernant la base, les préréglages ou les profils.
  • Affichage des poignées prototypes — un prototype de quincaillerie s'est affiché par erreur comme une poignée standard au lieu d'une poignée sur mesure.
  • Héritage set_basis convention de matrice a de nouveau été accordé aux clients qui n'avaient pas effectué la migration.
  • Inverse3 de rebondInverse3 lors de la déconnexion d'une session ne provoque plus de pic de force résiduel.
  • Perte de connexion WebSocket lors de cycles rapides de connexion/déconnexion.
  • WebSocket session_id a été publié en feuilleton sous le titre 0 dans certaines charges utiles sortantes.
  • Sous Windows, --log-level est désormais pris en compte lorsqu'il est associé à --dev (auparavant réinitialisé automatiquement à debug).

Dépréciations

Cette fonctionnalité est toujours disponible, mais elle sera supprimée dans une prochaine version majeure. Les réponses comprennent un deprecation_warning champ, le cas échéant.

DéclasséRemplacement
POST /force_scalePOST /settings/devices/inverse*/filters/force_scale/gain
POST /gravity_compensationPOST /{device}/{id}/config/gravity_compensation
POST /torque_scalingPOST /{device}/{id}/config/torque_scaling
POST /device_handednessPOST /{device}/{id}/config/handedness
POST /serial_enablePOST /settings/communication/serial/enabled
POST /experimental/features/grip_dropped_simulation_stopperAPI des paramètres
POST /experimental/features/screensaver_enableAPI des paramètres
WebSocket command_data.valuesposition, vector, angles, torques
WebSocket set_angular_torqueset_angular_torques
WebSocket probe_cursor_positionprobe_position
WebSocket set_coordinate_originconfigure.preset
Au niveau de la session WebSocket set_basisconfigure.basis

Remarques sur la compatibilité

Aucune modification majeure par rapport à la version 3.4.19. Deux remarques concernant les intégrations existantes :

  1. Les points de terminaison HTTP obsolètes incluent désormais un deprecation_warning champ dans la réponse — les clients qui valident strictement les schémas de réponse devraient autoriser ce champ supplémentaire.
  2. Les values champ dans WebSocket command_data est obsolète mais toujours pris en charge ; 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 Commande à distance WebSocket, 10 Écouteur de flux d'événements.
  • Nouvelle variante de Glaze de tous les tutoriels C++ (cpp-glz/) parallèlement à la variante nlohmann/json existante.
  • Tous les tutoriels ont été réécrits pour l'API v3.1 (port 10001, configure.preset, 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.