Unsere größte Veröffentlichung seit der Neugestaltung der API vor einem Jahr. Version 3.5.0 bietet eine einheitliche 3D-Mathematik-Ebene, vollständige Minverse-Unterstützung, einen typisierten Ereignisstrom, eine umfassende Einstellungs-API und eine übersichtlichere HTTP-Schnittstelle – sowie eine Vielzahl von Fehlerbehebungen und Verbesserungen der Benutzerfreundlichkeit, die im Laufe des letzten Jahres vorgenommen wurden.
Highlights
Einheitliche 3D-Mathematikebene – eine modulare Transformationspipeline mit erstklassigen Primitiven für Gerätebasis (Frame), Mount-Transformation, Arbeitsbereichstransformation und Navigationsttransformation sowie explizite Konvertierungen zwischen lokalen, Sitzungs-, Anwendungs- und internen Räumen.Bubble Navigation – Navigation durch große virtuelle Arbeitsbereiche mithilfe von geformten Zonen (SDF-Primitive) mit geschwindigkeitsabhängiger Steuerung, hysteresefähiger Kollisionserkennung und optionaler Drift-Toward-Cursor-Funktion. Vollständig konfigurierbar über HTTP und WebSocket mit App-Space-Round-Trip.Typisierter Ereignisstrom – ein spezieller WebSocket-Ereigniskanal für den Geräte-Lebenszyklus, Sicherheitswarnungen, Kalibrierung, Akku, Warnungen zur Steuerungsrate und Hinweise auf die Auslaufphase.Einstellungs-API – ein umfassendes Schlüssel-Wert-Einstellungssystem mit HTTP-CRUD, Typangaben, Bereichsbeschränkungen und Beschreibungen, das die alte verschachtelte Konfigurationsdatei ersetzt.Einheitliche Gerätekonfiguration — ein Satz HTTP-Routen für jedes Gerät: Grundlage, Halterung, Voreinstellung, umwandeln, Filter, Handhabung, Drehmomentskalierung, Schwerkraftkompensation, Startseite_Zurück.Synchronisierte Minverse- und Stiftkalibrierung – das Gerät und der Stift werden nun gemeinsam kalibriert; die Kalibrierung bleibt gespeichert, bis ein Griff physisch angebracht wird.HTTP für mehr Lebensqualität — indexbasierte Geräteselektoren (Auswahl eines Geräts anhand des Index, keine ID erforderlich), ein einheitliches Anfrage-/Antwortformat, das auch bei WebSocket verwendet wird, eine Opt-in-Funktion {ok, Fehler, Daten} Umschlag (?format=json) sowie Platzhalter-Sitzungsselektoren.Neue Funktionen
Geräte
Minverse – offizielle Unterstützung, die mit dieser Version bereitgestellt wird: Erkennung, Bereitschaftssequenz, Sicherheitsbenachrichtigungen und der synchronisierte Kalibrierungsablauf.Ruko und Kingfisher wurden als offizielle Griffmodelle anerkannt.Unterstützung für Gerätesimulatoren – Erkennung und Kommunikation mit softwaremäßig simulierten Geräten neben echter Hardware.Schutz der Verbindungsschleife — Ports, die sich verdächtig verhalten, werden automatisch blockiert; Zurücksetzen mit POST /ports/{port}/reset.Herzschlag des Stiftaufsatzes – zuverlässige Erkennung des Anbringens und Abnehmens mit Entprellung.Sitzungen, Befehle und WebSocket
Filterung und Persistenz von Sitzungsprofilen – Sitzungen geben einen Profilnamen und die erforderliche SDK-Version an, die der Dienst auch bei erneuten Verbindungen speichert; Clients und Überwachungstools können Sitzungen anhand dieses Profils filtern und gezielt ansprechen.Befehlspuffer pro Sitzung – eine langsame Sitzung kann eine andere nicht mehr blockieren.Explizite `configure`-Zuordnung für einmalige Befehle — Grundlage, Voreinstellung, Halterung, Krafttor, Dämpfung pro Gerät, zuzüglich Profil und Grundlage pro Sitzung, jetzt alle live in konfigurieren — abgestimmt auf die Ausgabekonfigurationszuordnung, sodass das, was Sie senden, mit dem übereinstimmt, was Sie zurücklesen.Anpassbare Gerätehalterung — Wählen Sie eine integrierte Arbeitsbereichsvoreinstellung (Standardwerte, Vorderarm, arm_front_centered, LED-Frontleuchte, led_front_centered) oder eine explizite Transformation senden; bei manuellen Mount-Änderungen wird die Voreinstellung automatisch auf benutzerdefiniert.Benannte Befehlsfelder — Position, Vektor, Winkel, Drehmomente das Standardelement ersetzen Werte Array.Winkelmomente festlegen ersetzt Winkelmoment festlegen (Singular veraltet).Erweiterungen für Sitzungsrahmen — Die Sitzungsrahmen der Versionen 3.0 und 3.1 enthalten nun erweiterbare Konfiguration, Zustandund Status Objekte; zu den neuen Ausgabefeldern gehören current_cursor_force, aktuelle_Cursorposition, aktuelle Drehmomente, aktuelle Winkelposition, Kontrolldomäne, Steuerungsmodus, umwandeln, transform_velocity, reichhaltiger config.*und status.sicherheit (standardmäßig ausgeblendet).Aktualisierungen von Teiltransformationen — Senden Sie nur die Unterfelder, die Sie ändern möchten (Position, Rotation, Skala) in Bezug auf die Montage, die Arbeitsbereichstransformation und die Navigationsform.HTTP
GET / — Serviceversion.GET/POST/DELETE /settings und /Einstellungen/* — vollständige API für Schlüssel-Wert-Einstellungen.GET /sessions/{session} und GET/POST/DELETE /sessions/{session}/profile.GET /devices?session=<selector> — Gerätkoordinaten in den Anwendungsraum einer bestimmten Sitzung umwandeln.Indexbasierte Geräteauswahl — jedes Gerät anhand seines Indexes ansprechen, ohne dessen ID zu kennen (/inverse3/0/... für das erste Inverse3; inverse... (für alle Geräte Inverse).Einheitliches Anfrage-/Antwortformat — POST-/GET-Body-Daten verwenden dieselben Befehlsdaten JSON lässt sich als WebSocket nutzen; Code, der für das eine Transportprotokoll geschrieben wurde, funktioniert auch mit dem anderen.Opt-in-Umschlag über ?format=json auf jeder Strecke; /Einstellungen* und GET /home_return standardmäßig {ok, Fehler, Daten}. Verwenden ?format=plain für die Rohform.Platzhalter für die Sitzungsauswahl — * (beliebige Folge) und ? (ein einzelnes Zeichen) in Profilnamen.Prozentual dekodierte Selektoren — %2A, %3A, usw. werden vor der Weiterleitung decodiert.Veranstaltungen
Spezieller WebSocket-Ereignisstrom auf Kommunikation/Veranstaltungen/Hafen.24 vordefinierte Ereigniskategorien, darunter Gerätelebenszyklus, Sicherheit (E-Bremse, Fremdkörpererkennung, Blockieren), Kalibrierungsfehler, Batteriewarnungen, Sitzungswarnungen, niedrige/kritische Steuerungsrate, Eingabevalidierung und Hinweise auf veraltete Funktionen.Beobachtbarkeit
Log-Meldungen, die bei der Profilerstellung an Tracy weitergeleitet werden, werden je nach Schweregrad farblich gekennzeichnet.Tracy wird auf jeden HTTP-Handler angewendet.Ereignisse zur Zeitmessung in der Hauptschleife.Konfigurierbares Protokollverzeichnis und Server-Hostname (Docker-kompatibel).Erscheint in Version 3.6
SDF Haptic Effects (SDF HFX) – die Grundlagen wurden bereits in Version 3.5 integriert (Modul, Lebenszyklus, durch das Modul bereitgestellte Befehls-/Zustandsserialisierung), und die öffentliche API wird in Version 3.6 zusammen mit einer vollständigen Dokumentation veröffentlicht.Verbesserungen
Kraftschwingungsfilterung – Schwingungserkennung pro Achse, 8-stufige abgestufte Rückstellung, Eingangsabfrage mit Hysterese und asymmetrische windows.Laufzeit-Force-Gate-Filter — konfigurierbar über configure.force_gate.gain über WebSocket oder HTTP mit einer dauerhaften Verbindung.Die maximale Frequenz der Hauptschleife wurde für Präzisionsanwendungen auf 32 kHz erhöht.Kleinere WebSocket-Datenpakete — Unterfelder der Standard-Identitätsumwandlung (position = 0, Rotation = Identitätsmatrix, Maßstab = 1) werden standardmäßig in der Ausgabe weggelassen, wodurch die Datenmenge reduziert und die Kompatibilität mit der 4-KB-Nachrichtenbegrenzung älterer Unity-Pakete wiederhergestellt wird. Zwei erweiterte Einstellungen (Serialisierung/explizite Felder, Serialisierung/Transformationen zwangsweise abschließen) alle Felder für Verbraucher wiederherstellen, die diese benötigen.Geringerer Jitter in der Hauptschleife – Die Verarbeitung von WebSocket-Nachrichten blockiert den Tick der Hauptschleife während der JSON-Analyse und des Netzwerk-Sendevorgangs nicht mehr; die Planung des Session-Ticks wurde vor die Serialisierung der Antwort verlegt.Server sind standardmäßig auf „localhost“ beschränkt — den Netzwerkzugang über das Kommunikation/Alle Schnittstellen binden Einstellung.Platzhalter für die Geräteauswahl verwenden eine Präfix-Syntax (z. B. inverse (gilt für alle Geräte Inverse).Dämpfungsbefehle zog in das konfigurieren Karte daneben Krafttor.Der Rotating-File-Logger ersetzt den bisherigen Logger und verfügt über ein konfigurierbares Verzeichnis.Von Modulen bereitgestellte Befehle und Statusdaten – Module können ihre eigenen Befehle, Konfigurationsfelder und Statusdaten in den WebSocket-Frame einfügen, ohne das Kernschema zu verändern.Korrekturen
Ein Jahr voller Fehlerbehebungen; die wichtigsten sind unten aufgeführt.
Unter bestimmten Umständen kommt es zu Schwankungen bei der Sitzungsgeschwindigkeit.GripHook (Verse Grip Stopper) löste sich nicht ordnungsgemäß, wenn keine Simulation lief.Die Timeouts von Inverse3 waren zu streng und führten bei Geräten mit langsamer Startzeit zu Endlosschleifen bei der Verbindungstrennung.Unbeaufsichtigter Dienstabbruch unter Windows – der HTTP-Server wurde beim Herunterfahren nicht immer ordnungsgemäß beendet.Wiederverbindungsschleife, wenn der Dienst nicht unterstützte Befehle an ältere Firmware-Versionen gesendet hat.Die Erfassung von Bluetooth-Geräten überflutete die Protokolle auf Systemen mit Bluetooth-Adaptern.Absturz beim wiederholten Neustart des Dienstes.Der Wireless Verse Grip-Dongle friert auf Ubuntu-Laptops nach dem Ruhezustand und dem Wiederaufwachen ein.Der Wireless-Verse-Grip-Handshake unter Linux und macOS weicht nun korrekt auf eine Ausweichlösung zurück, wenn der erste Erkennungsversuch fehlschlägt.Speicherort der MacOS-Konfigurationsdatei — Die Konfiguration wird nun gespeichert in ~/Bibliothek/Application Support/ statt den falschen Weg einzuschlagen.Behandlung von SIGSEGV-Signalen unter Linux und macOS – Der Prozess läuft bei fatalen Signalen nicht mehr in einer Endlosschleife, wenn die Erfassung von Abstürzen in Multithread-Umgebungen aktiviert ist.Überschreiben von Befehlen zwischen Sitzungen – Konfigurationsbefehle aus einer Sitzung konnten bisher unbemerkt durch Befehle aus einer anderen Sitzung ersetzt werden; sie werden nun gefiltert und korrekt zusammengeführt.Befehle zum Überschreiben der Konfiguration — Überwachungssitzungen (z. B. Haply ) senden Sondenposition Änderungen an Basis-, Voreinstellungen und Profilen werden nicht mehr stillschweigend überschrieben.Anzeige der Prototyp-Griffe – die Prototyp-Hardware wurde fälschlicherweise als Standardgriff statt als benutzerdefinierter Griff angezeigt.Die alte `set_basis`-Matrixkonvention wird für Clients, die noch nicht migriert wurden, wieder beibehalten.Das Auslösen des Inverse3-Kicks bei einer Sitzungsunterbrechung führt nicht mehr zu einem plötzlichen Anstieg der Restkraft.Bei schnellen Verbindungsaufbau- und -abbauzyklen kam es zu einem Wettlauf um die WebSocket-Verbindung.WebSocket-`session_id` wurde als Fortsetzungsroman veröffentlicht 0 in einigen ausgehenden Nutzdaten.Unter Windows, --Protokollstufe wird nun berücksichtigt, wenn es mit --dev (wurde zuvor stillschweigend zurückgesetzt auf Debug).Verwerfungen
Noch funktionsfähig, wird aber in einer zukünftigen Hauptversion entfernt. Zu den Antworten gehört ein Warnung vor veralteten Funktionen Feld, sofern zutreffend.
| Veraltet | Ersatz |
|---|---|
| POST /force_scale | POSTinverse |
| POST /gravity_compensation | 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 /settings/communication/serial/enabled |
| POST /experimental/features/grip_dropped_simulation_stopper | Einstellungen-API |
| POST /experimental/features/screensaver_enable | Einstellungen-API |
| WebSocket command_data.values | Position, Vektor, Winkel, Drehmomente |
| WebSocket Winkelmoment festlegen | Winkelmomente festlegen |
| WebSocket Cursorposition abfragen | Sondenposition |
| WebSocket set_coordinate_origin | Konfigurationsvoreinstellung |
| WebSocket-Ebene Basis festlegen | configure.basis |
Hinweise zur Kompatibilität
Keine gravierenden Kompatibilitätsprobleme gegenüber Version 3.4.19. Zwei kleinere Hinweise für bestehende Integrationen:
Veraltete HTTP-Endpunkte enthalten nun einen Warnung vor veralteten Funktionen Feld in der Antwort – Clients, die Antwort-Schemas streng validieren, sollten das zusätzliche Feld zulassen.Die Werte Feld in WebSocket Befehlsdaten ist veraltet, wird aber weiterhin ausgewertet; verwenden Sie vorzugsweise die benannten Felder.Anleitungen & Dokumentation
Neue Tutorials: 05 Positionssteuerung, 06 Kombiniert (Inverse3 + Verse Grip), 07 Basis und Halterung, 08 HTTP-Fernkonfigurator, 09 WebSocket-Fernsteuerung, 10 Event-Stream-Listener.Neue Glaze-Variante in jedem C++-Tutorial (cpp-glz/) neben der bestehenden nlohmann/json-Variante.Alle Tutorials wurden überarbeitet für die API v3.1 (Port 10001, Konfigurationsvoreinstellung, benannte Befehlsfelder, print_state() Helfer).Das alte Tutorial zum Verse Grip Stopper wurde entfernt – es wurde durch das neue kombinierte Tutorial ersetzt.Die öffentliche Dokumentation wurde in den SDK-Anleitungen, der API-Referenz und auf den Hardware-Seiten aktualisiert.