Haply Inverse SDK 3.5.0 {#haply-inverse-sdk-350}
Dies ist die umfangreichste Veröffentlichung seit der API-Überarbeitung vor einem Jahr. Mit Version 3.5.0 führen wir eine integrierte 3D-Mathematik-Ebene, vollständige Unterstützung für Minverse, typisierte Ereignisströme, eine umfassende Konfigurations-API sowie eine übersichtlichere HTTP-Schnittstelle ein. Darüber hinaus enthält diese Version Fehlerbehebungen und Verbesserungen der Benutzerfreundlichkeit aus dem gesamten letzten Jahr.
Highlights {#highlights}
Integrierte 3D-Mathematikebene – eine kombinierbare Transformationspipeline mit erstklassigen Primitiven für die Gerätebasis (Frame), die Befestigungstransformation, die Arbeitsbereichstransformation und die Navigationtransformation. Darüber hinaus sind explizite Transformationen zwischen den Räumen „Lokal“, „Sitzung“, „Anwendung“ und „Intern“ möglich.Bubble Navigation – Ermöglicht die Navigation innerhalb großer virtueller Arbeitsbereiche mithilfe von Zonen mit definierter Form (SDF-Primitive). Das System unterstützt die Geschwindigkeitssteuerung durch Speed-Mapping, eine Kollisionserkennung unter Berücksichtigung von Hysterese sowie bei Bedarf eine Drift in Cursorrichtung. Es lässt sich vollständig über HTTP und WebSocket konfigurieren und unterstützt auch Roundtrips innerhalb des App-Raums.Typisierter Ereignisstrom – Ein dedizierter WebSocket-Ereigniskanal für den Lebenszyklus des Geräts, Sicherheitswarnungen, Kalibrierungen, den Akku, Warnungen zur Abtastrate sowie Hinweise auf nicht empfohlene Vorgehensweisen.Einstellungs-API – Ein umfassendes Schlüssel-Wert-Einstellungssystem mit CRUD-Funktionen über HTTP, Typhinweisen, Bereichsbeschränkungen und Beschreibungen. Es ersetzt herkömmliche verschachtelte Konfigurationsdateien.Vereinheitlichung der Geräteeinstellungen — Es gibt einen einheitlichen Satz von HTTP-Routen, der auf allen Geräten gilt: Grundlage、Halterung、Voreinstellung、umwandeln、Filter、Handhabung、Drehmomentskalierung、Schwerkraftkompensation、Startseite_Zurück。Synchrone Kalibrierung von Minverse und Stift — Das Gerät und der Stift werden nun gemeinsam kalibriert. Die Kalibrierung bleibt gesperrt, bis der Griff physisch angebracht ist.Verbesserung der Benutzerfreundlichkeit von HTTP — Indexbasierter Geräteauswähler (keine ID erforderlich, Geräte können über den Index angegeben werden), ein mit WebSocket gemeinsames Anfrage-/Antwortformat, Opt-in- {ok, Fehler, Daten} Umschlag (?format=json) sowie einen Sitzungsselektor mit Platzhaltern.Neue Funktionen {#new-features}
Geräte {#devices}
Minverse – Mit dieser Version wird offizielle Unterstützung bereitgestellt. Dazu gehören Workflows für die Erkennung, die Vorbereitungssequenz, Sicherheitshinweise und die synchrone Kalibrierung.Ruko und Kingfisher werden nun als offizielle Griff-Produkttypen anerkannt.Unterstützung für Gerätesimulatoren – Neben den realen Geräten können auch softwaremäßig simulierte Geräte erkannt und mit ihnen kommuniziert werden.Schutz der Verbindungsschleife — Ports, die unzulässige Aktivitäten aufweisen, werden automatisch blockiert.POST /ports/{port}/reset kann zurückgesetzt werden.Der Herzschlag beim Anbringen des Stifts — Durch eine Entprellung wird das Anbringen bzw. Abnehmen des Griffs zuverlässig erkannt.Sitzungen, Befehle, WebSocket {#sessions-commands-websocket}
Filterung und Persistenz von Sitzungsprofilen — Eine Sitzung kann einen Profilnamen und die erforderliche SDK-Version angeben, und der Dienst speichert diese Informationen über mehrere Verbindungsneuaufnahmen hinweg. Clients und Überwachungstools können Sitzungen anhand dieses Profils filtern und gezielt auswählen.Befehlspuffer pro Sitzung – Langsame Sitzungen führen nun nicht mehr dazu, dass andere Sitzungen angehalten werden.Eine explizite `configure`-Zuordnung für einmalige Befehle — gerätebezogen Grundlage、Voreinstellung、Halterung、Krafttor、Dämpfungsowie pro Sitzung Profil und Grundlage aber alles konfigurieren ist nun enthalten. Da es mit der Konfigurationszuordnung der Ausgabe abgeglichen ist, stimmen die gesendeten und die gelesenen Inhalte über den gesamten Hin- und Rückweg hinweg überein.Anpassbare Gerätehalterung — Integrierte Arbeitsbereichsvoreinstellungen (Standardwerte、Vorderarm、arm_front_centered、LED-Frontleuchte、led_front_centered) auswählen oder eine explizite Konvertierung senden. Wenn Sie die Einbindung manuell ändern, wird die Voreinstellung automatisch benutzerdefiniert wird umgeschaltet.Benannte Befehlsfelder — Allgemein einsetzbar Werte Anstelle eines Arrays,Position、Vektor、Winkel、Drehmomente wird verwendet.Winkelmomente festlegen aber Winkelmoment festlegen ersetzt (die Singularform wird nicht empfohlen).Erweiterung des Sitzungsrahmens — Erweiterbare Session-Frames in den Versionen v3.0 und v3.1 Konfiguration、Zustand、Status Es enthält nun Objekte. Das neue Ausgabefeld enthält:current_cursor_force、aktuelle_Cursorposition、aktuelle Drehmomente、aktuelle Winkelposition、Kontrolldomäne、Steuerungsmodus、umwandeln、transform_velocity、ausführlichere config.*, und status.sicherheit(Standardmäßig ausgeblendet) gibt es.Teilweise Aktualisierung der Konvertierung — Bei „Mount“, „Arbeitsbereichskonvertierung“ und „Navigationsformen“ das Unterfeld, das Sie ändern möchten (Position、Rotation、Skala) können gesendet werden.HTTP {#http}
GET / — Version des Dienstes.GET/POST/DELETE /settings sowie /Einstellungen/* — Eine API zur vollständigen Konfiguration von Schlüsseln und Werten.GET /sessions/{session} sowie GET/POST/DELETE /sessions/{session}/profile。GET /devices?session=<selector> — Die Koordinaten des Geräts werden in den Anwendungsraum der angegebenen Sitzung umgerechnet.Indexbasierter Geräteauswähler — Auch ohne Kenntnis der ID können Sie über den Index ein beliebiges Gerät angeben (im ersten „ Inverse3 “ steht /inverse3/0/...、Alle Geräte der Inverse-Familie verfügen über inverse...).Vereinheitlichung des Anfrage-/Antwortformats — Der POST-/GET-Body entspricht dem von WebSocket Befehlsdaten Es wird das JSON-Format verwendet. Code, der für den einen Transport geschrieben wurde, funktioniert auch beim anderen.Opt-in-Umschlag — zu einem beliebigen Pfad ?format=json und aktivieren Sie diese./Einstellungen* und GET /home_return ist standardmäßig {ok, Fehler, Daten} wird daraus. Wenn Sie das Rohformat verwenden, ?format=plain wird angegeben.Platzhalter im Sitzungsselektor — Im Profilnamen steht:*(beliebige Zeichenfolge) und ?(beliebiges Zeichen) kann verwendet werden.Prozent-dekodierter Selektor — %2A、%3A Diese werden vor dem Routing dekodiert.Veranstaltungen {#events}
Kommunikation/Veranstaltungen/Hafen Der oben genannte dedizierte WebSocket-Ereignisstrom.24 verschiedene typisierte Ereigniskategorien, darunter Geräte-Lebenszyklus, Sicherheitsfunktionen (Notbremsung, Fremdkörpererkennung, Blockierung), Kalibrierungsfehler, Batteriewarnungen, Sitzungswarnungen, Abnahme sowie erhebliche Abnahme der Regelgeschwindigkeit, Eingabeverifizierung und nicht empfohlene Hinweise.Beobachtbarkeit {#observability}
Beim Profiling werden die Protokollmeldungen entsprechend ihrer Schwere in verschiedenen Farben an Tracy weitergeleitet.Für alle HTTP-Handler wird eine Tracy-Zone eingerichtet.Zeitliche Statistikereignisse der Hauptschleife.Das Protokollverzeichnis und der Hostname des Servers können konfiguriert werden (Docker-kompatibel).Funktionen, die in Version 3.6 verfügbar sein werden {#coming-in-36}
SDF Haptic Effects (SDF HFX) – Die Basis ist in Version 3.5 enthalten (Module, Lebenszyklus, von den Modulen bereitgestellte Befehle sowie die Serialisierung von Zuständen). Die öffentliche API soll in Version 3.6 zusammen mit einer vollständigen Dokumentation bereitgestellt werden.Verbesserungen {#improvements}
Kraftschwingungsfilter – mit Schwingungserkennung pro Achse, 8-stufiger schrittweiser Rückstellung, Eingangsabstimmung mit Hysterese und asymmetrischem Freigabefenster.Force-Gate-Filter zur Laufzeit — über WebSocket oder HTTP configure.force_gate.gain kann über diese Option konfiguriert werden. Es können auch dauerhafte Standardwerte festgelegt werden.Die maximale Frequenz der Hauptschleife wurde auf 32 kHz erhöht – für Anwendungen, die eine hohe Genauigkeit erfordern.Reduzierung der WebSocket-Nutzdaten — Transformationsunterfeld, bei dem der Standardwert der Identitätswert ist (position = 0、Rotation = Identitätsmatrix、Maßstab = 1) werden nun standardmäßig aus der Ausgabe weggelassen. Dadurch wird die Payload-Größe verringert und die Kompatibilität mit der 4-KB-Nachrichtenobergrenze älterer Unity-Pakete wiederhergestellt. Für Verbraucher, die alle Felder in die Ausgabe aufnehmen möchten, stehen zwei erweiterte Einstellungen zur Verfügung (Serialisierung/explizite Felder、Serialisierung/Transformationen zwangsweise abschließen) stehen zur Verfügung.Reduzierung des Jitters in der Hauptschleife — Die Verarbeitung von WebSocket-Nachrichten blockiert nun nicht mehr den Tick der Hauptschleife, auch nicht während der JSON-Parsierung und der Netzwerkübertragung. Die Tick-Planung für die Sitzung wurde vor die Serialisierung der Antwort verlegt.Der Server ist standardmäßig nur auf „localhost“ eingestellt. — Der Netzwerkzugang ist,Kommunikation/Alle Schnittstellen binden Dies kann in den Einstellungen explizit aktiviert werden.Die Platzhalter im Geräteauswahlfeld verwenden die Syntax der Vorwärtsübereinstimmung.(Beispiel: inverse (gilt für alle Geräte der Inverse-Familie).Dumping-Befehl ,Krafttor nebeneinander konfigurieren Ich bin zur Karte gewechselt.Anstelle des rotierenden Dateiloggers kann nun ein Verzeichnis festgelegt werden.Vom Modul bereitgestellte Befehle und Zustände — Das Modul kann eigene Befehle hinzufügen, Felder konfigurieren und Zustandsausgaben in WebSocket-Frames einbinden, ohne das Kernschema zu ändern.Korrekturen {#fixes}
Von den im Laufe des Jahres behobenen Fehlern sind die folgenden besonders schwerwiegend.
Schwankungen der Sitzungsgeschwindigkeit(unter bestimmten Bedingungen).GripHook (Verse Grip Stopper) wurde nicht korrekt freigegeben, wenn keine Simulation ausgeführt wurde.Inverse3 Dadas Timeoutzu kurz war, kam es bei Geräten mit langsamer Startzeit zu einer Verbindungsunterbrechungsschleife.Windows Unvollständiges Beenden bei einem Dienstausfall — Der HTTP-Server wurde beim Herunterfahren nicht immer vollständig bereinigt.Wiederverbindungsschleife(wenn der Dienst Befehle sendet, die von der älteren Firmware-Version nicht unterstützt werden).Durch die Erfassung von Bluetooth-Gerätenwurden auf Systemen mit Bluetooth-Adapter große Mengen an Protokollen ausgegeben.Absturz beim wiederholten Neustart des Dienstes.Das „Wireless Verse Grip“-Dongle friert ein(tritt bei einem Ubuntu-Laptop im Ruhezustand bzw. nach dem Aufwachen auf).Der Handshake des Wireless Verse Grip unter Linux und macOSwechselt nun korrekt auf einen Ausweichmodus, falls der erste Erkennungsversuch fehlschlägt.Speicherort der macOS-Konfigurationsdateien — Die Einstellung ist kein falscher Pfad, sondern ~/Bibliothek/Application Support/ wird nun dort gespeichert.SIGSEGV-Signalbehandlung unter Linux und macOS – Wenn die Multithread-Absturzprotokollierung aktiviert ist, bleibt der Prozess bei einem fatalen Signal nicht mehr in einer Schleife hängen.Überschreiben von Befehlen zwischen Sitzungen — Früher kam es vor, dass Konfigurationsbefehle einer Sitzung stillschweigend durch Befehle einer anderen Sitzung überschrieben wurden; mittlerweile werden diese jedoch korrekt gefiltert und zusammengeführt.Überschreiben der Einstellungen durch Probe-Befehle — Sondenposition Die Überwachungssitzung, die Daten sendet (z. B. „ Haply Hub“), überschreibt nun nicht mehr stillschweigend ausstehende Änderungen an „basis“, „preset“ oder „profile“.Anzeige des Prototyp-Griffs — Die Prototyp-Hardware wurde fälschlicherweise als Standardgriff statt als benutzerdefinierter Griff angezeigt.Die bisherige `set_basis`-Matrixkonventionwird nun wieder auf noch nicht migrierte Clients angewendet.Inverse3 Der erzwungene Kickverursacht nun keine Kraftspitzen mehr, die bei einer Unterbrechung der Sitzung zurückbleiben.WebSocket-Verbindungsverlust(während eines Zyklus aus schnellem Herstellen und Trennen der Verbindung).Die `session_id` von WebSocket Allerdings tritt bei einigen gesendeten Nutzdaten 0 wurde als … serialisiert.Windows Also,--dev auch in Kombination mit --Protokollstufe wird nun respektiert (früher Debug (… wurde stillschweigend zurückgesetzt).Veraltet {#deprecations}
Die folgenden Funktionen sind weiterhin verfügbar, sollen jedoch in einer zukünftigen Hauptversion entfernt werden. In diesem Fall enthält die Antwort Warnung vor veralteten Funktionen Enthält Felder.
| Nicht empfohlen | 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 {#compatibility-notes}
Seit Version 3.4.19 gibt es keine kompatibilitätsbrechenden Änderungen. Bei bestehenden Integrationen sind zwei Punkte zu beachten:
Die Antwort eines nicht empfohlenen HTTP-Endpunkts enthältWarnung vor veralteten Funktionen Es wurde ein Feld hinzugefügt. Bei Clients, die das Antwortschema streng validieren, sollten Sie die Einstellungen so anpassen, dass dieses zusätzliche Feld akzeptiert wird.WebSocket Befehlsdaten in … Werte Das Feld wird zwar nicht mehr empfohlen, wird aber weiterhin ausgewertet. Es wird empfohlen, benannte Felder zu verwenden.Tutorials und Dokumentation {#tutorials-documentation}
Neue Tutorials: 05 Positionssteuerung, 06 Kombination (Inverse3 + Verse Grip), 07 Basis und Mount, 08 HTTP-Fernkonfigurator, 09 WebSocket-Fernsteuerung, 10 Event-Stream-Listener.Neue Glaze-Version: Neben der bestehenden Version „nlohmann/json“ wurde sie allen C++-Tutorials hinzugefügt (cpp-glz/).Alle Tutorials neu schreiben、Wir haben die Kompatibilität mit der API v3.1 hergestellt (Port 10001,Konfigurationsvoreinstellung、benanntes Befehlsfeld,print_state() Helfer).Gelöscht — Das alte Tutorial zu „Verse Grip Stopper“ wurde gelöscht und durch ein neues Tutorial zu Kombinationen ersetzt.Die öffentlich zugänglichen Dokumentewurden aktualisiert (SDK-Handbuch, API-Referenz, Hardware-Seiten).